aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bip39-standalone.html22576
-rw-r--r--compile.py2
-rw-r--r--readme.md22
-rw-r--r--src/index.html6
-rw-r--r--src/js/ethereumjs-util.js18762
-rw-r--r--src/js/index.js16
-rw-r--r--src/js/polyfill.es6.js3793
-rw-r--r--tests.js69
8 files changed, 45234 insertions, 12 deletions
diff --git a/bip39-standalone.html b/bip39-standalone.html
index 3b4f0f2..de74d80 100644
--- a/bip39-standalone.html
+++ b/bip39-standalone.html
@@ -186,9 +186,9 @@
186 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label> 186 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
187 <div class="col-sm-9"> 187 <div class="col-sm-9">
188 <select class="mnemonic-length form-control"> 188 <select class="mnemonic-length form-control">
189 <option value="raw" data-translate>From entropy length (3 words per 32 bits)</option> 189 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
190 <option value="12">12 <span data-translate>Words</span></option> 190 <option value="12">12 <span data-translate>Words</span></option>
191 <option value="15" selected>15 <span data-translate>Words</option> 191 <option value="15">15 <span data-translate>Words</option>
192 <option value="18">18 <span data-translate>Words</span></option> 192 <option value="18">18 <span data-translate>Words</span></option>
193 <option value="21">21 <span data-translate>Words</span></option> 193 <option value="21">21 <span data-translate>Words</span></option>
194 <option value="24">24 <span data-translate>Words</span></option> 194 <option value="24">24 <span data-translate>Words</span></option>
@@ -655,6 +655,3800 @@
655 <td class="privkey"><span data-show-qr></span></td> 655 <td class="privkey"><span data-show-qr></span></td>
656 </tr> 656 </tr>
657 </script> 657 </script>
658 <script>// From
659// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
660// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
661// but is not required in any modern browsers.
662// For more information, see
663// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
664
665//----------------------------------------------------------------------
666//
667// ECMAScript 2015 Polyfills
668//
669//----------------------------------------------------------------------
670
671(function (global) {
672 "use strict";
673
674 // Set this to always override native implementations, for testing
675 // the polyfill in browsers with partial/full ES2015 support.
676 var OVERRIDE_NATIVE_FOR_TESTING = false;
677
678 var undefined = (void 0); // Paranoia
679
680 // Helpers
681
682 function strict(o) {
683 return o === global ? undefined : o;
684 }
685
686 function hook(o, p, f) {
687 var op = o[p];
688 console.assert(typeof op === 'function', 'Hooking a non-function');
689 o[p] = function() {
690 var o = strict(this);
691 var r = f.apply(o, arguments);
692 return r !== undefined ? r : op.apply(o, arguments);
693 };
694 }
695
696 function isSymbol(s) {
697 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
698 }
699
700 function getPropertyDescriptor(target, name) {
701 var desc = Object.getOwnPropertyDescriptor(target, name);
702 var proto = Object.getPrototypeOf(target);
703 while (!desc && proto) {
704 desc = Object.getOwnPropertyDescriptor(proto, name);
705 proto = Object.getPrototypeOf(proto);
706 }
707 return desc;
708 }
709
710 var enqueue = (function(nativePromise, nativeSetImmediate) {
711 if (nativePromise)
712 return function(job) { nativePromise.resolve().then(function() { job(); }); };
713 if (nativeSetImmediate)
714 return function(job) { nativeSetImmediate(job); };
715 return function(job) { setTimeout(job, 0); };
716 }(global['Promise'], global['setImmediate']));
717
718 function define(o, p, v, override) {
719 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
720 return;
721
722 if (typeof v === 'function') {
723 // Sanity check that functions are appropriately named (where possible)
724 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
725 Object.defineProperty(o, p, {
726 value: v,
727 configurable: true,
728 enumerable: false,
729 writable: true
730 });
731 } else {
732 Object.defineProperty(o, p, {
733 value: v,
734 configurable: false,
735 enumerable: false,
736 writable: false
737 });
738 }
739 }
740
741 function set_internal(o, p, v) {
742 Object.defineProperty(o, p, {
743 value: v,
744 configurable: false,
745 enumerable: false,
746 writable: true
747 });
748 }
749
750 // Snapshot intrinsic functions
751 var $isNaN = global.isNaN,
752 $parseInt = global.parseInt,
753 $parseFloat = global.parseFloat;
754
755 var E = Math.E,
756 LOG10E = Math.LOG10E,
757 LOG2E = Math.LOG2E,
758 abs = Math.abs,
759 ceil = Math.ceil,
760 exp = Math.exp,
761 floor = Math.floor,
762 log = Math.log,
763 max = Math.max,
764 min = Math.min,
765 pow = Math.pow,
766 random = Math.random,
767 sqrt = Math.sqrt;
768
769 var orig_match = String.prototype.match,
770 orig_replace = String.prototype.replace,
771 orig_search = String.prototype.search,
772 orig_split = String.prototype.split;
773
774 // These are used for implementing the polyfills, but not exported.
775
776 // Inspired by https://gist.github.com/1638059
777 /** @constructor */
778 function EphemeronTable() {
779 var secretKey = ObjectCreate(null);
780
781 function conceal(o) {
782 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
783 Object.defineProperty(o, 'valueOf', {
784 value: (function(secretKey) {
785 return function (k) {
786 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
787 };
788 }(secretKey)),
789 configurable: true,
790 writeable: true,
791 enumerable: false
792 });
793 return secrets;
794 }
795
796 function reveal(o) {
797 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
798 return v === o ? null : v;
799 }
800
801 return {
802 clear: function() {
803 secretKey = ObjectCreate(null);
804 },
805 remove: function(key) {
806 var secrets = reveal(key);
807 if (secrets && HasOwnProperty(secrets, 'value')) {
808 delete secrets.value;
809 return true;
810 }
811 return false;
812 },
813 get: function(key, defaultValue) {
814 var secrets = reveal(key);
815 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
816 },
817 has: function(key) {
818 var secrets = reveal(key);
819 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
820 },
821 set: function(key, value) {
822 var secrets = reveal(key) || conceal(key);
823 secrets.value = value;
824 }
825 };
826 }
827
828 var empty = Object.create(null);
829
830 //----------------------------------------------------------------------
831 //
832 // ECMAScript 2015
833 // http://www.ecma-international.org/ecma-262/6.0/
834 //
835 //----------------------------------------------------------------------
836
837 // ---------------------------------------
838 // 19.4 Symbol Objects
839 // ---------------------------------------
840
841 // NOTE: Symbols are defined here - out of spec order - since we need the
842 // properties and prototype to be populated for other polyfills.
843
844 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
845
846 var symbolForKey;
847 (function() {
848 var secret = Object.create(null);
849 var symbolMap = {};
850 symbolForKey = function(k) {
851 return symbolMap[k];
852 };
853
854 var GlobalSymbolRegistry = [];
855
856 function unique(bits) {
857 return Array(bits + 1).join('x').replace(/x/g, function() {
858 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
859 });
860 }
861
862 // 19.4.1 The Symbol Constructor
863 // 19.4.1.1 Symbol ( description=undefined )
864 function Symbol(description) {
865 if (!(this instanceof Symbol)) return new Symbol(description, secret);
866 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
867
868 var descString = description === undefined ? undefined : String(description);
869
870 set_internal(this, '[[SymbolData]]', unique(128));
871 set_internal(this, '[[Description]]', descString);
872
873 symbolMap[this] = this;
874 return this;
875 }
876
877 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
878 global.Symbol = Symbol;
879
880 // 19.4.2 Properties of the Symbol Constructor
881
882 // 19.4.2.1 Symbol.for (key)
883 define(Symbol, 'for', function for_(key) {
884 var stringKey = String(key);
885 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
886 var e = GlobalSymbolRegistry[i];
887 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
888 }
889 var newSymbol = Symbol(key);
890 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
891 return newSymbol;
892 });
893
894 // 19.4.2.2 Symbol.hasInstance
895 // 19.4.2.3 Symbol.isConcatSpreadable
896
897 // 19.4.2.4 Symbol.iterator
898 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
899
900 // 19.4.2.5 Symbol.keyFor (sym)
901 define(Symbol, 'keyFor', function keyFor(sym) {
902 if (!(sym instanceof Symbol)) throw TypeError();
903 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
904 var e = GlobalSymbolRegistry[i];
905 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
906 }
907 return undefined;
908 });
909
910 // 19.4.2.6 Symbol.match
911 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
912
913 // 19.4.2.7 Symbol.prototype
914
915 // 19.4.2.8 Symbol.replace
916 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
917
918 // 19.4.2.9 Symbol.search
919 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
920
921 // 19.4.2.10 Symbol.species
922
923 // 19.4.2.11 Symbol.search
924 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
925
926 // 19.4.2.12 Symbol.toPrimitive
927
928 // 19.4.2.13 Symbol.toStringTag
929 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
930
931 // 19.4.2.14 Symbol.unscopables
932
933 // 19.4.3 Properties of the Symbol Prototype Object
934 // 19.4.3.1 Symbol.prototype.constructor
935
936 // 19.4.3.2 Symbol.prototype.toString ( )
937 Object.defineProperty(Symbol.prototype, 'toString', {
938 value: function toString() {
939 var s = strict(this);
940 var desc = s['[[Description]]'];
941 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
942 },
943 configurable: true, writeable: true, enumerable: false });
944
945 // 19.4.3.3 Symbol.prototype.valueOf ( )
946 Object.defineProperty(Symbol.prototype, 'valueOf', {
947 value: function valueOf() {
948 // To prevent automatic string conversion:
949 throw TypeError();
950
951 // Spec has approximately the following:
952 //var s = strict(this);
953 //if (Type(s) === 'symbol') return s;
954 //if (Type(s) !== 'object') throw TypeError();
955 //if (!('[[SymbolData]]' in s)) throw TypeError();
956 //return s['[[SymbolData]]'];
957 },
958 configurable: true, writeable: true, enumerable: false });
959
960 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
961 // (Done later to polyfill partial implementations)
962
963 // 19.4.4 Properties of Symbol Instances
964 }());
965
966 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
967
968 // Defined here so that other prototypes can reference it
969 // 25.1.2 The %IteratorPrototype% Object
970 var $IteratorPrototype$ = {};
971
972 //----------------------------------------
973 // 6 ECMAScript Data Types and Values
974 //----------------------------------------
975
976 // 6.1 ECMAScript Language Types
977
978 // "Type(x)" is used as shorthand for "the type of x"...
979 function Type(v) {
980 switch (typeof v) {
981 case 'undefined': return 'undefined';
982 case 'boolean': return 'boolean';
983 case 'number': return 'number';
984 case 'string': return 'string';
985 case 'symbol': return 'symbol';
986 default:
987 if (v === null) return 'null';
988 if (v instanceof global.Symbol) return 'symbol';
989 return 'object';
990 }
991 }
992
993 // 6.1.5.1 Well-Known Symbols
994 var $$iterator = global.Symbol.iterator,
995 $$match = global.Symbol.match,
996 $$replace = global.Symbol.replace,
997 $$search = global.Symbol.search,
998 $$split = global.Symbol.split,
999 $$toStringTag = global.Symbol.toStringTag;
1000
1001 //----------------------------------------
1002 // 7 Abstract Operations
1003 //----------------------------------------
1004
1005 //----------------------------------------
1006 // 7.1 Type Conversion
1007 //----------------------------------------
1008
1009 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1010 // just use valueOf()
1011
1012 // 7.1.2 ToBoolean ( argument )
1013 // just use Boolean()
1014
1015 // 7.1.3 ToNumber ( argument )
1016 // just use Number()
1017
1018 // 7.1.4 ToInteger ( argument )
1019 function ToInteger(n) {
1020 n = Number(n);
1021 if ($isNaN(n)) return 0;
1022 if (n === 0 || n === Infinity || n === -Infinity) return n;
1023 return ((n < 0) ? -1 : 1) * floor(abs(n));
1024 }
1025
1026 // 7.1.5 ToInt32 ( argument )
1027 function ToInt32(v) { return v >> 0; }
1028
1029 // 7.1.6 ToUint32 ( argument )
1030 function ToUint32(v) { return v >>> 0; }
1031
1032 // 7.1.7 ToInt16 ( argument )
1033 function ToInt16(v) { return (v << 16) >> 16; }
1034
1035 // 7.1.8 ToUint16 ( argument )
1036 function ToUint16(v) { return v & 0xFFFF; }
1037
1038 // 7.1.9 ToInt8 ( argument )
1039 function ToInt8(v) { return (v << 24) >> 24; }
1040
1041 // 7.1.10 ToUint8 ( argument )
1042 function ToUint8(v) { return v & 0xFF; }
1043
1044 // 7.1.11 ToUint8Clamp ( argument )
1045 function ToUint8Clamp(argument) {
1046 var number = Number(argument);
1047 if ($isNaN(number)) return 0;
1048 if (number <= 0) return 0;
1049 if (number >= 255) return 255;
1050 var f = floor(number);
1051 if ((f + 0.5) < number) return f + 1;
1052 if (number < (f + 0.5)) return f;
1053 if (f % 2) return f + 1;
1054 return f;
1055 }
1056
1057 // 7.1.12 ToString ( argument )
1058 // just use String()
1059
1060 // 7.1.13 ToObject ( argument )
1061 function ToObject(v) {
1062 if (v === null || v === undefined) throw TypeError();
1063 return Object(v);
1064 }
1065
1066 // 7.1.14 ToPropertyKey ( argument )
1067 function ToPropertyKey(v) {
1068 return String(v);
1069 }
1070
1071 // 7.1.15 ToLength ( argument )
1072 function ToLength(v) {
1073 var len = ToInteger(v);
1074 if (len <= 0) return 0;
1075 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1076 return min(len, 0x20000000000000 - 1); // 2^53-1
1077 }
1078
1079 // 7.1.16 CanonicalNumericIndexString ( argument )
1080
1081 //----------------------------------------
1082 // 7.2 Testing and Comparison Operations
1083 //----------------------------------------
1084
1085 // 7.2.1 RequireObjectCoercible ( argument )
1086 // 7.2.2 IsArray ( argument )
1087
1088 // 7.2.3 IsCallable ( argument )
1089 function IsCallable(o) { return typeof o === 'function'; }
1090
1091 // 7.2.4 IsConstructor ( argument )
1092 function IsConstructor(o) {
1093 // Hacks for Safari 7 TypedArray XXXConstructor objects
1094 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1095 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1096 // TODO: Can this be improved on?
1097 return typeof o === 'function';
1098 }
1099
1100 // 7.2.5 IsExtensible (O)
1101 // 7.2.6 IsInteger ( argument )
1102
1103 // 7.2.7 IsPropertyKey ( argument )
1104 function IsPropertyKey(argument) {
1105 if (Type(argument) === 'string') return true;
1106 if (Type(argument) === 'symbol') return true;
1107 return false;
1108 }
1109
1110 // 7.2.8 IsRegExp ( argument )
1111 // 7.2.5 IsConstructor ( argument )
1112
1113 // 7.2.9 SameValue(x, y)
1114 function SameValue(x, y) {
1115 if (typeof x !== typeof y) return false;
1116 switch (typeof x) {
1117 case 'undefined':
1118 return true;
1119 case 'number':
1120 if (x !== x && y !== y) return true;
1121 if (x === 0 && y === 0) return 1/x === 1/y;
1122 return x === y;
1123 case 'boolean':
1124 case 'string':
1125 case 'object':
1126 default:
1127 return x === y;
1128 }
1129 }
1130
1131 // 7.2.10 SameValueZero(x, y)
1132 function SameValueZero(x, y) {
1133 if (typeof x !== typeof y) return false;
1134 switch (typeof x) {
1135 case 'undefined':
1136 return true;
1137 case 'number':
1138 if (x !== x && y !== y) return true;
1139 return x === y;
1140 case 'boolean':
1141 case 'string':
1142 case 'object':
1143 default:
1144 return x === y;
1145 }
1146 }
1147
1148 //----------------------------------------
1149 // 7.3 Operations on Objects
1150 //----------------------------------------
1151
1152 // 7.3.1 Get (O, P)
1153 // - just use o.p or o[p]
1154
1155 // 7.3.2 GetV (V, P)
1156 function GetV(v, p) {
1157 var o = ToObject(v);
1158 return o[p];
1159 }
1160
1161 // 7.3.3 Set (O, P, V, Throw)
1162 // - just use o.p = v or o[p] = v
1163
1164
1165
1166
1167 // 7.3.9 GetMethod (O, P)
1168 function GetMethod(o, p) {
1169 var func = GetV(o, p);
1170 if (func === undefined || func === null) return undefined;
1171 if (!IsCallable(func)) throw TypeError();
1172 return func;
1173 }
1174
1175 // 7.3.10 HasProperty (O, P)
1176 function HasProperty(o, p) {
1177 while (o) {
1178 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1179 if (Type(o) !== 'object') return false;
1180 o = Object.getPrototypeOf(o);
1181 }
1182 return false;
1183 }
1184
1185 // 7.3.11 HasOwnProperty (O, P)
1186 function HasOwnProperty(o, p) {
1187 return Object.prototype.hasOwnProperty.call(o, p);
1188 }
1189
1190 //----------------------------------------
1191 // 7.4 Operations on Iterator Objects
1192 //----------------------------------------
1193
1194 // 7.4.1 GetIterator ( obj, method )
1195 function GetIterator(obj, method) {
1196 if (arguments.length < 2)
1197 method = GetMethod(obj, $$iterator);
1198 var iterator = method.call(obj);
1199 if (Type(iterator) !== 'object') throw TypeError();
1200 return iterator;
1201 }
1202
1203 // 7.4.2 IteratorNext ( iterator, value )
1204 function IteratorNext(iterator, value) {
1205 if (arguments.length < 2)
1206 var result = iterator.next();
1207 else
1208 result = iterator.next(value);
1209 if (Type(result) !== 'object') throw TypeError();
1210 return result;
1211 }
1212
1213 // 7.4.3 IteratorComplete ( iterResult )
1214 function IteratorComplete(iterResult) {
1215 console.assert(Type(iterResult) === 'object');
1216 return Boolean(iterResult.done);
1217 }
1218
1219 // 7.4.4 IteratorValue ( iterResult )
1220 function IteratorValue(iterResult) {
1221 console.assert(Type(iterResult) === 'object');
1222 return iterResult.value;
1223 }
1224
1225 // 7.4.5 IteratorStep ( iterator )
1226 function IteratorStep( iterator, value ) {
1227 var result = IteratorNext(iterator, value);
1228 var done = result['done'];
1229 if (Boolean(done) === true) return false;
1230 return result;
1231 }
1232
1233 // 7.4.6 IteratorClose( iterator, completion )
1234 function IteratorClose( iterator, completion ) {
1235 console.assert(Type(iterator) === 'object');
1236 var _return = GetMethod(iterator, 'return');
1237 if (_return === undefined) return completion;
1238 try {
1239 var innerResult = _return[iterator]();
1240 } catch (result) {
1241 // TODO: If completion.[[type]] is throw, return completion
1242 return result;
1243 }
1244 if (Type(innerResult) !== 'object') throw TypeError();
1245 return completion;
1246 }
1247
1248 // 7.4.7 CreateIterResultObject (value, done)
1249 function CreateIterResultObject(value, done) {
1250 console.assert(Type(done) === 'boolean');
1251 var obj = {};
1252 obj["value"] = value;
1253 obj["done"] = done;
1254 return obj;
1255 }
1256
1257 // 7.4.8 CreateListIterator (list)
1258 // 7.4.8.1 ListIterator next( )
1259 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1260 // 7.4.9.1 CompoundIterator next( )
1261
1262 //----------------------------------------
1263 // 8 Executable Code and Execution Contexts
1264 //----------------------------------------
1265
1266 //----------------------------------------
1267 // 8.4 Jobs and Job Queues
1268 //----------------------------------------
1269
1270 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1271 function EnqueueJob(queueName, job, args) {
1272 var fn = function() { job.apply(undefined, args); };
1273 enqueue(fn);
1274 }
1275
1276 // 8.4.2 NextJob result
1277 function NextJob(result) {
1278 // no-op
1279 }
1280
1281 //----------------------------------------
1282 // 9 Ordinary and Exotic Objects Behaviors
1283 //----------------------------------------
1284
1285 // 9.1.11 [[Enumerate]] ()
1286 function Enumerate(obj) {
1287 var e = [];
1288 if (Object(obj) !== obj) return e;
1289 var visited = new Set;
1290 while (obj !== null) {
1291 Object.getOwnPropertyNames(obj).forEach(function(name) {
1292 if (!visited.has(name)) {
1293 var desc = Object.getOwnPropertyDescriptor(obj, name);
1294 if (desc) {
1295 visited.add(name);
1296 if (desc.enumerable) e.push(name);
1297 }
1298 }
1299 });
1300 obj = Object.getPrototypeOf(obj);
1301 }
1302 return e[$$iterator]();
1303 }
1304
1305 // 9.1.12 [[OwnPropertyKeys]] ( )
1306 function OwnPropertyKeys(o) {
1307 return Object.getOwnPropertyNames(o);
1308 }
1309
1310 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1311 function ObjectCreate(proto, internalSlotsList) {
1312 return Object.create(proto, internalSlotsList);
1313 }
1314
1315 // ---------------------------------------
1316 // 19 Fundamental Objects
1317 // ---------------------------------------
1318
1319 // ---------------------------------------
1320 // 19.1 Object Objects
1321 // ---------------------------------------
1322
1323 // 19.1.1 The Object Constructor
1324 // 19.1.1.1 Object ( [ value ] )
1325 // 19.1.2 Properties of the Object Constructor
1326 // 19.1.2.1 Object.assign ( target, ...sources )
1327 define(
1328 Object, 'assign',
1329 function assign(target, /*...*/sources) {
1330 var to = ToObject(target);
1331 if (arguments.length < 2) return to;
1332
1333 var sourcesIndex = 1;
1334 while (sourcesIndex < arguments.length) {
1335 var nextSource = arguments[sourcesIndex++];
1336 if (nextSource === undefined || nextSource === null) {
1337 var keys = [];
1338 } else {
1339 var from = ToObject(nextSource);
1340 keys = OwnPropertyKeys(from);
1341 }
1342 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1343 var nextKey = keys[keysIndex];
1344 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1345 if (desc !== undefined && desc.enumerable) {
1346 var propValue = from[nextKey];
1347 to[nextKey] = propValue;
1348 }
1349 }
1350 }
1351 return to;
1352 });
1353
1354 // 19.1.2.2 Object.create ( O [ , Properties ] )
1355 // 19.1.2.3 Object.defineProperties ( O, Properties )
1356 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1357 // 19.1.2.5 Object.freeze ( O )
1358 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1359
1360 (function() {
1361 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1362 $getOwnPropertyNames = Object.getOwnPropertyNames,
1363 $keys = Object.keys,
1364 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1365
1366 function isStringKey(k) { return !symbolForKey(k); }
1367
1368 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1369 define(
1370 Object, 'getOwnPropertyNames',
1371 function getOwnPropertyNames(o) {
1372 if (Object.prototype.toString.call(o) === '[object Window]') {
1373 // Workaround for cross-realm calling by IE itself.
1374 // https://github.com/inexorabletash/polyfill/issues/96
1375 try {
1376 return $getOwnPropertyNames(o).filter(isStringKey);
1377 } catch (_) {
1378 return $window_names.slice();
1379 }
1380 }
1381 return $getOwnPropertyNames(o).filter(isStringKey);
1382 }, !nativeSymbols);
1383
1384 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1385 define(
1386 Object, 'getOwnPropertySymbols',
1387 function getOwnPropertySymbols(o) {
1388 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1389 }, !nativeSymbols);
1390
1391 // 19.1.2.14 Object.keys ( O )
1392 define(
1393 Object, 'keys',
1394 function keys(o) {
1395 return $keys(o).filter(isStringKey);
1396 }, !nativeSymbols);
1397 }());
1398
1399 // 19.1.2.9 Object.getPrototypeOf ( O )
1400 // 19.1.2.10 Object.is ( value1, value2 )
1401 define(
1402 Object, 'is',
1403 function is(value1, value2) {
1404 return SameValue(value1, value2);
1405 });
1406
1407 // 19.1.2.11 Object.isExtensible ( O )
1408 // 19.1.2.12 Object.isFrozen ( O )
1409 // 19.1.2.13 Object.isSealed ( O )
1410
1411 // 19.1.2.14 Object.keys ( O )
1412 // see above
1413
1414 // 19.1.2.15 Object.preventExtensions ( O )
1415 // 19.1.2.16 Object.prototype
1416 // 19.1.2.17 Object.seal ( O )
1417
1418 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1419 define(
1420 Object, 'setPrototypeOf',
1421 function setPrototypeOf(o, proto) {
1422 if (Type(o) !== 'object') throw TypeError();
1423 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1424 o.__proto__ = proto;
1425 return o;
1426 }
1427 );
1428
1429 // 19.1.3 Properties of the Object Prototype Object
1430 // 19.1.3.1 Object.prototype.constructor
1431 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1432 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1433 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1434 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1435 // 19.1.3.6 Object.prototype.toString ( )
1436 hook(Object.prototype, 'toString',
1437 function() {
1438 var o = strict(this);
1439 if (o === Object(o) && $$toStringTag in o) {
1440 return '[object ' + o[$$toStringTag] + ']';
1441 }
1442 return undefined;
1443 });
1444
1445 // 19.1.3.7 Object.prototype.valueOf ( )
1446 // 19.1.4 Properties of Object Instances
1447
1448 // ---------------------------------------
1449 // 19.2 Function Objects
1450 // ---------------------------------------
1451
1452 // 19.2.1 The Function Constructor
1453 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1454 // 19.2.2 Properties of the Function Constructor
1455 // 19.2.2.1 Function.length
1456 // 19.2.2.2 Function.prototype
1457 // 19.2.3 Properties of the Function Prototype Object
1458 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1459 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1460 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1461 // 19.2.3.4 Function.prototype.constructor
1462 // 19.2.3.5 Function.prototype.toString ( )
1463 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1464 // 19.2.4 Function Instances
1465 // 19.2.4.1 length
1466 // 19.2.4.2 name
1467 // 19.2.4.3 prototype
1468
1469 // (No polyfillable changes from ES5)
1470
1471 // ---------------------------------------
1472 // 19.3 Boolean Objects
1473 // ---------------------------------------
1474
1475 // 19.3.1 The Boolean Constructor
1476 // 19.3.1.1 Boolean ( value )
1477 // 19.3.2 Properties of the Boolean Constructor
1478 // 19.3.2.1 Boolean.prototype
1479 // 19.3.3 Properties of the Boolean Prototype Object
1480 // 19.3.3.1 Boolean.prototype.constructor
1481 // 19.3.3.2 Boolean.prototype.toString ( )
1482 // 19.3.3.3 Boolean.prototype.valueOf ( )
1483 // 19.3.4 Properties of Boolean Instances
1484
1485 // (No polyfillable changes from ES5)
1486
1487 // ---------------------------------------
1488 // 19.4 Symbol Objects
1489 // ---------------------------------------
1490
1491 // Moved earlier in this script, so that other polyfills can depend on them.
1492
1493 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1494 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1495
1496 // ---------------------------------------
1497 // 19.5 Error Objects
1498 // ---------------------------------------
1499
1500 // 19.5.1 The Error Constructor
1501 // 19.5.1.1 Error ( message )
1502 // 19.5.1.2 new Error( ...argumentsList )
1503 // 19.5.2 Properties of the Error Constructor
1504 // 19.5.2.1 Error.prototype
1505 // 19.5.3 Properties of the Error Prototype Object
1506 // 19.5.3.1 Error.prototype.constructor
1507 // 19.5.3.2 Error.prototype.message
1508 // 19.5.3.3 Error.prototype.name
1509 // 19.5.3.4 Error.prototype.toString ( )
1510 // 19.5.4 Properties of Error Instances
1511 // 19.5.5 Native Error Types Used in This Standard
1512 // 19.5.5.1 EvalError
1513 // 19.5.5.2 RangeError
1514 // 19.5.5.3 ReferenceError
1515 // 19.5.5.4 SyntaxError
1516 // 19.5.5.5 TypeError
1517 // 19.5.5.6 URIError
1518 // 19.5.6 NativeError Object Structure
1519 // 19.5.6.1 NativeError Constructors
1520 // 19.5.6.1.1 NativeError ( message )
1521 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1522 // 19.5.6.2 Properties of the NativeError Constructors
1523 // 19.5.6.2.1 NativeError.prototype
1524 // 19.5.6.3 Properties of the NativeError Prototype Objects
1525 // 19.5.6.4 Properties of NativeError Instances
1526
1527 // (No polyfillable changes from ES5)
1528
1529 // ---------------------------------------
1530 // 20 Numbers and Dates
1531 // ---------------------------------------
1532
1533 // ---------------------------------------
1534 // 20.1 Number Objects
1535 // ---------------------------------------
1536
1537 // 20.1.1 The Number Constructor
1538 // 20.1.1.1 Number ( [ value ] )
1539 // 20.1.1.2 new Number ( ...argumentsList )
1540 // 20.1.2 Properties of the Number Constructor
1541
1542 // 20.1.2.1 Number.EPSILON
1543 define(
1544 Number, 'EPSILON',
1545 (function () {
1546 var next, result;
1547 for (next = 1; 1 + next !== 1; next = next / 2)
1548 result = next;
1549 return result;
1550 }()));
1551
1552 // 20.1.2.2 Number.isFinite ( number )
1553 define(
1554 Number, 'isFinite',
1555 function isFinite(number) {
1556 if (Type(number) !== 'number') return false;
1557 if (number !== number || number === +Infinity || number === -Infinity) return false;
1558 return true;
1559 });
1560
1561 // 20.1.2.3 Number.isInteger ( number )
1562 define(
1563 Number, 'isInteger',
1564 function isInteger(number) {
1565 if (Type(number) !== 'number') return false;
1566 if (number !== number || number === +Infinity || number === -Infinity) return false;
1567 var integer = ToInteger(number);
1568 if (integer !== number) return false;
1569 return true;
1570 });
1571
1572 // 20.1.2.4 Number.isNaN ( number )
1573 define(
1574 Number, 'isNaN',
1575 function isNaN(number) {
1576 if (Type(number) !== 'number') return false;
1577 if (number !== number) return true;
1578 return false;
1579 });
1580
1581 // 20.1.2.5 Number.isSafeInteger ( number )
1582 define(
1583 Number, 'isSafeInteger',
1584 function isSafeInteger(number) {
1585 if (Type(number) !== 'number') return false;
1586 if (number !== number || number === +Infinity || number === -Infinity) return false;
1587 var integer = ToInteger(number);
1588 if (integer !== number) return false;
1589 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1590 return true;
1591 return false;
1592 });
1593
1594 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1595 define(
1596 Number, 'MAX_SAFE_INTEGER',
1597 9007199254740991); // 2^53-1
1598
1599 // 20.1.2.7 Number.MAX_VALUE
1600
1601 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1602 define(
1603 Number, 'MIN_SAFE_INTEGER',
1604 -9007199254740991); // -2^53+1
1605
1606 // 20.1.2.9 Number.MIN_VALUE
1607 // 20.1.2.10 Number.NaN
1608 // 20.1.2.11 Number.NEGATIVE_INFINITY
1609
1610 // 20.1.2.12 Number.parseFloat ( string )
1611 define(Number, 'parseFloat', $parseFloat);
1612
1613 // 20.1.2.13 Number.parseInt ( string, radix )
1614 define(Number, 'parseInt', $parseInt);
1615
1616 // 20.1.2.14 Number.POSITIVE_INFINITY
1617 // 20.1.2.15 Number.prototype
1618
1619 // 20.1.3 Properties of the Number Prototype Object
1620 // 20.1.3.1 Number.prototype.constructor
1621 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1622 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1623 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1624 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1625 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1626 // 20.1.3.7 Number.prototype.valueOf ( )
1627 // 20.1.4 Properties of Number Instances
1628
1629 // ---------------------------------------
1630 // 20.2 The Math Object
1631 // ---------------------------------------
1632
1633 // 20.2.1 Value Properties of the Math Object
1634 // 20.2.1.1 Math.E
1635 // 20.2.1.2 Math.LN10
1636 // 20.2.1.3 Math.LN2
1637 // 20.2.1.4 Math.LOG10E
1638 // 20.2.1.5 Math.LOG2E
1639 // 20.2.1.6 Math.PI
1640 // 20.2.1.7 Math.SQRT1_2
1641 // 20.2.1.8 Math.SQRT2
1642
1643 // 20.2.1.9 Math [ @@toStringTag ]
1644 define(Math, $$toStringTag, 'Math');
1645
1646 // 20.2.2 Function Properties of the Math Object
1647 // 20.2.2.1 Math.abs ( x )
1648 // 20.2.2.2 Math.acos ( x )
1649
1650 // 20.2.2.3 Math.acosh(x)
1651 define(
1652 Math, 'acosh',
1653 function acosh(x) {
1654 x = Number(x);
1655 return log(x + sqrt(x * x - 1));
1656 });
1657
1658 // 20.2.2.4 Math.asin ( x )
1659
1660 // 20.2.2.5 Math.asinh( x )
1661 define(
1662 Math, 'asinh',
1663 function asinh(x) {
1664 x = Number(x);
1665 if (SameValue(x, -0)) {
1666 return x;
1667 }
1668 var s = sqrt(x * x + 1);
1669 return (s === -x) ? log(0) : log(x + s);
1670 });
1671
1672 // 20.2.2.6 Math.atan ( x )
1673
1674 // 20.2.2.7 Math.atanh( x )
1675 define(
1676 Math, 'atanh',
1677 function atanh(x) {
1678 x = Number(x);
1679 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1680 });
1681
1682 // 20.2.2.8 Math.atan2 ( y, x )
1683
1684 // 20.2.2.9 Math.cbrt ( x )
1685 define(
1686 Math, 'cbrt',
1687 function cbrt(x) {
1688 x = Number(x);
1689 if ($isNaN(x/x)) {
1690 return x;
1691 }
1692 var r = pow(abs(x), 1/3);
1693 var t = x/r/r;
1694 return r + (r * (t-r) / (2*r + t));
1695 });
1696
1697 // 20.2.2.10 Math.ceil ( x )
1698
1699 // 20.2.2.11 Math.clz32 ( x )
1700 define(
1701 Math, 'clz32',
1702 function clz32(x) {
1703 function clz8(x) {
1704 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1705 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1706 }
1707 x = ToUint32(x);
1708 return x & 0xff000000 ? clz8(x >> 24) :
1709 x & 0xff0000 ? clz8(x >> 16) + 8 :
1710 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1711 });
1712
1713
1714
1715 // 20.2.2.12 Math.cos ( x )
1716
1717 // 20.2.2.13 Math.cosh ( x )
1718 define(
1719 Math, 'cosh',
1720 function cosh(x) {
1721 x = Number(x);
1722 return (pow(E, x) + pow(E, -x)) / 2;
1723 });
1724
1725 // 20.2.2.14 Math.exp ( x )
1726
1727 // 20.2.2.15 Math.expm1 ( x )
1728 define(
1729 Math, 'expm1',
1730 function expm1(x) {
1731 x = Number(x);
1732 // from: http://www.johndcook.com/cpp_log1p.html
1733 if (SameValue(x, -0)) {
1734 return -0;
1735 } else if (abs(x) < 1e-5) {
1736 return x + 0.5 * x * x; // two terms of Taylor expansion
1737 } else {
1738 return exp(x) - 1;
1739 }
1740 });
1741
1742 // 20.2.2.16 Math.floor ( x )
1743
1744 // 20.2.2.17 Math.fround ( x )
1745 define(
1746 Math, 'fround',
1747 function fround(x) {
1748 if ($isNaN(x)) {
1749 return NaN;
1750 }
1751 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1752 return x;
1753 }
1754 return (new Float32Array([x]))[0];
1755 });
1756
1757 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1758 define(
1759 Math, 'hypot',
1760 function hypot() {
1761 var values = [];
1762 var m = 0, sawNaN = false;
1763 for (var i = 0; i < arguments.length; ++i) {
1764 var n = abs(Number(arguments[i]));
1765 if (n === Infinity) return n;
1766 if (n !== n) sawNaN = true;
1767 if (n > m) m = n;
1768 values[i] = n;
1769 }
1770 if (sawNaN) return NaN;
1771 if (m === 0) return +0;
1772 var sum = +0;
1773 for (i = 0; i < values.length; ++i) {
1774 var r = values[i] / m;
1775 sum = sum + r * r;
1776 }
1777 return m * sqrt(sum);
1778 });
1779
1780 // 20.2.2.19 Math.imul ( x, y )
1781 define(
1782 Math, 'imul',
1783 function imul(x, y) {
1784 var a = ToUint32(x);
1785 var b = ToUint32(y);
1786 // (slow but accurate)
1787 var ah = (a >>> 16) & 0xffff;
1788 var al = a & 0xffff;
1789 var bh = (b >>> 16) & 0xffff;
1790 var bl = b & 0xffff;
1791 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1792 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1793 );
1794
1795 // 20.2.2.20 Math.log ( x )
1796
1797 // 20.2.2.21 Math.log1p ( x )
1798 define(
1799 Math, 'log1p',
1800 function log1p(x) {
1801 x = Number(x);
1802 // from: http://www.johndcook.com/cpp_expm1.html
1803 if (x < -1) {
1804 return NaN;
1805 } else if (SameValue(x, -0)) {
1806 return -0;
1807 } else if (abs(x) > 1e-4) {
1808 return log(1 + x);
1809 } else {
1810 return (-0.5 * x + 1) * x;
1811 }
1812 });
1813
1814 // 20.2.2.22 Math.log10 ( x )
1815 define(
1816 Math, 'log10',
1817 function log10(x) {
1818 x = Number(x);
1819 return log(x) * LOG10E;
1820 });
1821
1822 // 20.2.2.23 Math.log2 ( x )
1823 define(
1824 Math, 'log2',
1825 function log2(x) {
1826 x = Number(x);
1827 return log(x) * LOG2E;
1828 });
1829
1830 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1831 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1832 // 20.2.2.26 Math.pow ( x, y )
1833 // 20.2.2.27 Math.random ( )
1834 // 20.2.2.28 Math.round ( x )
1835
1836 // 20.2.2.29 Math.sign(x)
1837 define(
1838 Math, 'sign',
1839 function sign(x) {
1840 x = Number(x);
1841 return x < 0 ? -1 : x > 0 ? 1 : x;
1842 });
1843
1844 // 20.2.2.30 Math.sin ( x )
1845
1846 // 20.2.2.31 Math.sinh( x )
1847 define(
1848 Math, 'sinh',
1849 function sinh(x) {
1850 x = Number(x);
1851 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1852 });
1853
1854 // 20.2.2.32 Math.sqrt ( x )
1855 // 20.2.2.33 Math.tan ( x )
1856
1857 // 20.2.2.34 Math.tanh ( x )
1858 define(
1859 Math, 'tanh',
1860 function tanh(x) {
1861 x = Number(x);
1862 var n = pow(E, 2 * x) - 1,
1863 d = pow(E, 2 * x) + 1;
1864 if (SameValue(x, -0))
1865 return x;
1866 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1867 });
1868
1869 // 20.2.2.35 Math.trunc ( x )
1870 define(
1871 Math, 'trunc',
1872 function trunc(x) {
1873 x = Number(x);
1874 return $isNaN(x) ? NaN :
1875 x < 0 ? ceil(x) : floor(x);
1876 });
1877
1878 // ---------------------------------------
1879 // 20.3 Date Objects
1880 // ---------------------------------------
1881
1882 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1883 // 20.3.1.1 Time Values and Time Range
1884 // 20.3.1.2 Day Number and Time within Day
1885 // 20.3.1.3 Year Number
1886 // 20.3.1.4 Month Number
1887 // 20.3.1.5 Date Number
1888 // 20.3.1.6 Week Day
1889 // 20.3.1.7 Local Time Zone Adjustment
1890 // 20.3.1.8 Daylight Saving Time Adjustment
1891 // 20.3.1.9 Local Time
1892 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1893 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1894 // 20.3.1.12 MakeDay (year, month, date)
1895 // 20.3.1.13 MakeDate (day, time)
1896 // 20.3.1.14 TimeClip (time)
1897 // 20.3.1.15 Date Time String Format
1898 // 20.3.1.15.1 Extended years
1899 // 20.3.2 The Date Constructor
1900 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1901 // 20.3.2.2 Date ( value )
1902 // 20.3.2.3 Date ( )
1903 // 20.3.3 Properties of the Date Constructor
1904 // 20.3.3.1 Date.now ( )
1905 // 20.3.3.2 Date.parse (string)
1906 // 20.3.3.3 Date.prototype
1907 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1908 // 20.3.4 Properties of the Date Prototype Object
1909 // 20.3.4.1 Date.prototype.constructor
1910 // 20.3.4.2 Date.prototype.getDate ( )
1911 // 20.3.4.3 Date.prototype.getDay ( )
1912 // 20.3.4.4 Date.prototype.getFullYear ( )
1913 // 20.3.4.5 Date.prototype.getHours ( )
1914 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1915 // 20.3.4.7 Date.prototype.getMinutes ( )
1916 // 20.3.4.8 Date.prototype.getMonth ( )
1917 // 20.3.4.9 Date.prototype.getSeconds ( )
1918 // 20.3.4.10 Date.prototype.getTime ( )
1919 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1920 // 20.3.4.12 Date.prototype.getUTCDate ( )
1921 // 20.3.4.13 Date.prototype.getUTCDay ( )
1922 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1923 // 20.3.4.15 Date.prototype.getUTCHours ( )
1924 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1925 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1926 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1927 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1928 // 20.3.4.20 Date.prototype.setDate ( date )
1929 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1930 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1931 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1932 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1933 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1934 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1935 // 20.3.4.27 Date.prototype.setTime ( time )
1936 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1937 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1938 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1939 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1940 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1941 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1942 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1943 // 20.3.4.35 Date.prototype.toDateString ( )
1944 // 20.3.4.36 Date.prototype.toISOString ( )
1945 // 20.3.4.37 Date.prototype.toJSON ( key )
1946 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1947 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1948 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1949 // 20.3.4.41 Date.prototype.toString ( )
1950 // 20.3.4.42 Date.prototype.toTimeString ( )
1951 // 20.3.4.43 Date.prototype.toUTCString ( )
1952 // 20.3.4.44 Date.prototype.valueOf ( )
1953 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1954 // 20.3.5 Properties of Date Instances
1955
1956 // (No polyfillable changes from ES5)
1957
1958 // ---------------------------------------
1959 // 21 Text Processing
1960 // ---------------------------------------
1961
1962 var string_regexp_dispatch = (function() {
1963 var faux = {}, secret = Symbol();
1964 faux[Symbol.match] = function() { return secret; };
1965 return ("").match(faux) === secret;
1966 }());
1967
1968 // 21.1 String Objects
1969 // 21.1.1 The String Constructor
1970 // 21.1.1.1 String ( value )
1971 // 21.1.2 Properties of the String Constructor
1972 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1973
1974 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1975 define(
1976 String, 'fromCodePoint',
1977 function fromCodePoint(/*...codePoints*/) {
1978 var codePoints = arguments,
1979 length = codePoints.length,
1980 elements = [],
1981 nextIndex = 0;
1982 while (nextIndex < length) {
1983 var next = codePoints[nextIndex];
1984 var nextCP = Number(next);
1985 if (!SameValue(nextCP, ToInteger(nextCP)) ||
1986 nextCP < 0 || nextCP > 0x10FFFF) {
1987 throw RangeError('Invalid code point ' + nextCP);
1988 }
1989 if (nextCP < 0x10000) {
1990 elements.push(String.fromCharCode(nextCP));
1991 } else {
1992 nextCP -= 0x10000;
1993 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
1994 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
1995 }
1996 nextIndex += 1;
1997 }
1998 return elements.join('');
1999 });
2000
2001 // 21.1.2.3 String.prototype
2002
2003 // 21.1.2.4 String.raw ( template , ...substitutions )
2004 define(
2005 String, 'raw',
2006 function raw(template /*, ...substitutions*/) {
2007 var substitutions = [].slice.call(arguments, 1);
2008
2009 var cooked = Object(template);
2010 var rawValue = cooked['raw'];
2011 var raw = Object(rawValue);
2012 var len = raw['length'];
2013 var literalSegments = ToLength(len);
2014 if (literalSegments <= 0) return '';
2015 var stringElements = [];
2016 var nextIndex = 0;
2017 while (true) {
2018 var next = raw[nextIndex];
2019 var nextSeg = String(next);
2020 stringElements.push(nextSeg);
2021 if (nextIndex + 1 === literalSegments)
2022 return stringElements.join('');
2023 next = substitutions[nextIndex];
2024 var nextSub = String(next);
2025 stringElements.push(nextSub);
2026 nextIndex = nextIndex + 1;
2027 }
2028 });
2029
2030 // See https://githib.com/inexorabletash/uate for a more useful version.
2031
2032 // 21.1.3 Properties of the String Prototype Object
2033 // 21.1.3.1 String.prototype.charAt ( pos )
2034 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2035
2036 // 21.1.3.3 String.prototype.codePointAt ( pos )
2037 define(
2038 String.prototype, 'codePointAt',
2039 function codePointAt(pos) {
2040 var o = strict(this);
2041 var s = String(o);
2042 var position = ToInteger(pos);
2043 var size = s.length;
2044 if (position < 0 || position >= size) return undefined;
2045 var first = s.charCodeAt(position);
2046 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2047 var second = s.charCodeAt(position + 1);
2048 if (second < 0xDC00 || second > 0xDFFF) return first;
2049 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2050 });
2051
2052 // 21.1.3.4 String.prototype.concat ( ...args )
2053 // 21.1.3.5 String.prototype.constructor
2054
2055 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2056 define(
2057 String.prototype, 'endsWith',
2058 function endsWith(searchString) {
2059 var endPosition = arguments[1];
2060
2061 var o = strict(this);
2062 var s = String(o);
2063 var searchStr = String(searchString);
2064 var len = s.length;
2065 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2066 var end = min(max(pos, 0), len);
2067 var searchLength = searchStr.length;
2068 var start = end - searchLength;
2069 if (start < 0) return false;
2070 if (s.substring(start, start + searchLength) === searchStr) return true;
2071 return false;
2072 });
2073
2074 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2075 define(
2076 String.prototype, 'includes',
2077 function includes(searchString) {
2078 var position = arguments[1];
2079
2080 var o = strict(this);
2081 var s = String(o);
2082 var searchStr = String(searchString);
2083 var pos = ToInteger(position);
2084 var len = s.length;
2085 var start = min(max(pos, 0), len);
2086 return s.indexOf(searchStr, start) !== -1;
2087 });
2088
2089 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2090 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2091 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2092 // 21.1.3.11 String.prototype.match ( regexp )
2093 define(
2094 String.prototype, 'match',
2095 function match(regexp) {
2096 var o = strict(this);
2097 var s = String(o);
2098 if (HasProperty(regexp, $$match)) var rx = regexp;
2099 else rx = new RegExp(regexp);
2100 return rx[$$match](s);
2101 }, !string_regexp_dispatch);
2102
2103 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2104
2105 // Not practical due to table sizes; if needed, pull in:
2106 // https://github.com/walling/unorm/
2107
2108 // 21.1.3.13 String.prototype.repeat ( count )
2109 define(
2110 String.prototype, 'repeat',
2111 function repeat(count) {
2112 var o = strict(this);
2113 var s = String(o);
2114 var n = ToInteger(count);
2115 if (n < 0) throw RangeError();
2116 if (n === Infinity) throw RangeError();
2117 var t = new Array(n + 1).join(s);
2118 return t;
2119 });
2120
2121 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2122 define(
2123 String.prototype, 'replace',
2124 function replace(searchValue, replaceValue) {
2125 var o = strict(this);
2126 if (HasProperty(searchValue, $$replace))
2127 return searchValue[$$replace](o, replaceValue);
2128 return orig_replace.call(o, searchValue, replaceValue);
2129 }, !string_regexp_dispatch);
2130
2131 // 21.1.3.15 String.prototype.search ( regexp )
2132 define(
2133 String.prototype, 'search',
2134 function search(regexp) {
2135 var o = strict(this);
2136 var string = String(o);
2137 if (HasProperty(regexp, $$search)) var rx = regexp;
2138 else rx = new RegExp(regexp);
2139 return rx[$$search](string);
2140 }, !string_regexp_dispatch);
2141
2142 // 21.1.3.16 String.prototype.slice ( start, end )
2143 // 21.1.3.17 String.prototype.split ( separator, limit )
2144 define(
2145 String.prototype, 'split',
2146 function split(separator, limit) {
2147 var o = strict(this);
2148 if (HasProperty(separator, $$split))
2149 return separator[$$split](o, limit);
2150 return orig_split.call(o, separator, limit);
2151 }, !string_regexp_dispatch);
2152
2153 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2154 define(
2155 String.prototype, 'startsWith',
2156 function startsWith(searchString) {
2157 var position = arguments[1];
2158
2159 var o = strict(this);
2160 var s = String(o);
2161 var searchStr = String(searchString);
2162 var pos = ToInteger(position);
2163 var len = s.length;
2164 var start = min(max(pos, 0), len);
2165 var searchLength = searchStr.length;
2166 if (searchLength + start > len) return false;
2167 if (s.substring(start, start + searchLength) === searchStr) return true;
2168 return false;
2169 });
2170
2171 // 21.1.3.19 String.prototype.substring ( start, end )
2172 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2173 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2174 // 21.1.3.22 String.prototype.toLowerCase ( )
2175 // 21.1.3.23 String.prototype.toString ( )
2176 // 21.1.3.24 String.prototype.toUpperCase ( )
2177 // 21.1.3.25 String.prototype.trim ( )
2178 // 21.1.3.26 String.prototype.valueOf ( )
2179
2180 // 21.1.3.27 String.prototype [ @@iterator ]( )
2181 define(
2182 String.prototype, $$iterator,
2183 function entries() {
2184 return CreateStringIterator(this, 'value');
2185 });
2186
2187 // 21.1.4 Properties of String Instances
2188 // 21.1.4.1 length
2189
2190 // 21.1.5 String Iterator Objects
2191 /** @constructor */
2192 function StringIterator() {}
2193
2194 // 21.1.5.1 CreateStringIterator Abstract Operation
2195 function CreateStringIterator(string, kind) {
2196 var s = String(string);
2197 var iterator = new StringIterator;
2198 set_internal(iterator, '[[IteratedString]]', s);
2199 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2200 set_internal(iterator, '[[StringIterationKind]]', kind);
2201 return iterator;
2202 }
2203
2204 // 21.1.5.2 The %StringIteratorPrototype% Object
2205 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2206 StringIterator.prototype = $StringIteratorPrototype$;
2207
2208 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2209 define(
2210 $StringIteratorPrototype$, 'next',
2211 function next() {
2212 var o = ToObject(this);
2213 var s = String(o['[[IteratedString]]']),
2214 index = o['[[StringIteratorNextIndex]]'],
2215 len = s.length;
2216 if (index >= len) {
2217 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2218 return CreateIterResultObject(undefined, true);
2219 }
2220 var cp = s.codePointAt(index);
2221 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2222 return CreateIterResultObject(String.fromCodePoint(cp), false);
2223 });
2224
2225 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2226 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2227
2228 // 21.1.5.3 Properties of String Iterator Instances
2229
2230 // ---------------------------------------
2231 // 21.2 RegExp (Regular Expression) Objects
2232 // ---------------------------------------
2233
2234 // 21.2.1 Patterns
2235 // 21.2.2 Pattern Semantics
2236 // 21.2.2.1 Notation
2237 // 21.2.2.2 Pattern
2238 // 21.2.2.3 Disjunction
2239 // 21.2.2.4 Alternative
2240 // 21.2.2.5 Term
2241 // 21.2.2.6 Assertion
2242 // 21.2.2.7 Quantifier
2243 // 21.2.2.8 Atom
2244 // 21.2.2.9 AtomEscape
2245 // 21.2.2.10 CharacterEscape
2246 // 21.2.2.11 DecimalEscape
2247 // 21.2.2.12 CharacterClassEscape
2248 // 21.2.2.13 CharacterClass
2249 // 21.2.2.14 ClassRanges
2250 // 21.2.2.15 NonemptyClassRanges
2251 // 21.2.2.16 NonemptyClassRangesNoDash
2252 // 21.2.2.17 ClassAtom
2253 // 21.2.2.18 ClassAtomNoDash
2254 // 21.2.2.19 ClassEscape
2255 // 21.2.3 The RegExp Constructor
2256 // 21.2.3.1 RegExp ( pattern, flags )
2257 // 21.2.3.2 new RegExp( ...argumentsList )
2258 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2259 // 21.2.4 Properties of the RegExp Constructor
2260 // 21.2.4.1 RegExp.prototype
2261 // 21.2.5 Properties of the RegExp Prototype Object
2262 // 21.2.5.1 RegExp.prototype.constructor
2263 // 21.2.5.2 RegExp.prototype.exec ( string )
2264
2265 // 21.2.5.3 get RegExp.prototype.flags
2266 if (!('flags' in RegExp.prototype)) {
2267 Object.defineProperty(
2268 RegExp.prototype, 'flags', {
2269 get: function() {
2270 var s = String(this);
2271 return s.substring(s.lastIndexOf('/') + 1);
2272 }
2273 });
2274 }
2275
2276 // 21.2.5.4 get RegExp.prototype.global
2277 // 21.2.5.5 get RegExp.prototype.ignoreCase
2278
2279 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2280 define(RegExp.prototype, $$match, function(string) {
2281 var o = strict(this);
2282 return orig_match.call(string, o);
2283 });
2284
2285 // 21.2.5.7 get RegExp.prototype.multiline
2286
2287 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2288 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2289 var o = strict(this);
2290 return orig_replace.call(string, o, replaceValue);
2291 });
2292
2293 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2294 define(RegExp.prototype, $$search, function(string) {
2295 var o = strict(this);
2296 return orig_search.call(string, o);
2297 });
2298
2299 // 21.2.5.10 get RegExp.prototype.source
2300
2301 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2302 define(RegExp.prototype, $$split, function(string, limit) {
2303 var o = strict(this);
2304 return orig_split.call(string, o, limit);
2305 });
2306
2307 // 21.2.5.12 get RegExp.prototype.sticky
2308 // 21.2.5.13 RegExp.prototype.test( S )
2309 // 21.2.5.14 RegExp.prototype.toString ( )
2310 // 21.2.5.15 get RegExp.prototype.unicode
2311
2312 // 21.2.6 Properties of RegExp Instances
2313 // 21.2.6.1 lastIndex
2314
2315 // (No polyfillable changes from ES5)
2316
2317 // ---------------------------------------
2318 // 22 Indexed Collections
2319 // ---------------------------------------
2320
2321 // ---------------------------------------
2322 // 22.1 Array Objects
2323 // ---------------------------------------
2324
2325 // 22.1.1 The Array Constructor
2326 // 22.1.1.1 Array ( )
2327 // 22.1.1.2 Array (len)
2328 // 22.1.1.3 Array (...items )
2329
2330 // 22.1.2 Properties of the Array Constructor
2331
2332 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2333 define(
2334 Array, 'from',
2335 function from(items) {
2336 var mapfn = arguments[1];
2337 var thisArg = arguments[2];
2338
2339 var c = strict(this);
2340 if (mapfn === undefined) {
2341 var mapping = false;
2342 } else {
2343 if (!IsCallable(mapfn)) throw TypeError();
2344 var t = thisArg;
2345 mapping = true;
2346 }
2347 var usingIterator = GetMethod(items, $$iterator);
2348 if (usingIterator !== undefined) {
2349 if (IsConstructor(c)) {
2350 var a = new c();
2351 } else {
2352 a = new Array(0);
2353 }
2354 var iterator = GetIterator(items, usingIterator);
2355 var k = 0;
2356 while (true) {
2357 var next = IteratorStep(iterator);
2358 if (next === false) {
2359 a.length = k;
2360 return a;
2361 }
2362 var nextValue = IteratorValue(next);
2363 if (mapping)
2364 var mappedValue = mapfn.call(t, nextValue);
2365 else
2366 mappedValue = nextValue;
2367 a[k] = mappedValue;
2368 k += 1;
2369 }
2370 }
2371 var arrayLike = ToObject(items);
2372 var lenValue = arrayLike.length;
2373 var len = ToLength(lenValue);
2374 if (IsConstructor(c)) {
2375 a = new c(len);
2376 } else {
2377 a = new Array(len);
2378 }
2379 k = 0;
2380 while (k < len) {
2381 var kValue = arrayLike[k];
2382 if (mapping)
2383 mappedValue = mapfn.call(t, kValue, k);
2384 else
2385 mappedValue = kValue;
2386 a[k] = mappedValue;
2387 k += 1;
2388 }
2389 a.length = len;
2390 return a;
2391 });
2392
2393 // 22.1.2.2 Array.isArray ( arg )
2394
2395 // 22.1.2.3 Array.of ( ...items )
2396 define(
2397 Array, 'of',
2398 function of() {
2399 var items = arguments;
2400
2401 var lenValue = items.length;
2402 var len = ToUint32(lenValue);
2403 var c = strict(this), a;
2404 if (IsConstructor(c)) {
2405 a = new c(len);
2406 a = ToObject(a);
2407 } else {
2408 a = new Array(len);
2409 }
2410 var k = 0;
2411 while (k < len) {
2412 a[k] = items[k];
2413 k += 1;
2414 }
2415 a.length = len;
2416 return a;
2417 });
2418
2419 // 22.1.2.4 Array.prototype
2420 // 22.1.2.5 get Array [ @@species ]
2421 // 22.1.3 Properties of the Array Prototype Object
2422 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2423 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2424 // 22.1.3.2 Array.prototype.constructor
2425 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2426 define(
2427 Array.prototype, 'copyWithin',
2428 function copyWithin(target, start/*, end*/) {
2429 var end = arguments[2];
2430
2431 var o = ToObject(this);
2432 var lenVal = o.length;
2433 var len = ToLength(lenVal);
2434 len = max(len, 0);
2435 var relativeTarget = ToInteger(target);
2436 var to;
2437 if (relativeTarget < 0)
2438 to = max(len + relativeTarget, 0);
2439 else
2440 to = min(relativeTarget, len);
2441 var relativeStart = ToInteger(start);
2442 var from;
2443 if (relativeStart < 0)
2444 from = max(len + relativeStart, 0);
2445 else
2446 from = min(relativeStart, len);
2447 var relativeEnd;
2448 if (end === undefined)
2449 relativeEnd = len;
2450 else
2451 relativeEnd = ToInteger(end);
2452 var final;
2453 if (relativeEnd < 0)
2454 final = max(len + relativeEnd, 0);
2455 else
2456 final = min(relativeEnd, len);
2457 var count = min(final - from, len - to);
2458 var direction;
2459 if (from < to && to < from + count) {
2460 direction = -1;
2461 from = from + count - 1;
2462 to = to + count - 1;
2463 } else {
2464 direction = 1;
2465 }
2466 while (count > 0) {
2467 var fromKey = String(from);
2468 var toKey = String(to);
2469 var fromPresent = HasProperty(o, fromKey);
2470 if (fromPresent) {
2471 var fromVal = o[fromKey];
2472 o[toKey] = fromVal;
2473 } else {
2474 delete o[toKey];
2475 }
2476 from = from + direction;
2477 to = to + direction;
2478 count = count - 1;
2479 }
2480 return o;
2481 });
2482
2483 // 22.1.3.4 Array.prototype.entries ( )
2484 var nativeArrayIteratorMethods =
2485 ('entries' in Array.prototype && 'next' in [].entries());
2486
2487 define(
2488 Array.prototype, 'entries',
2489 function entries() {
2490 return CreateArrayIterator(this, 'key+value');
2491 }, !nativeArrayIteratorMethods);
2492
2493 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2494
2495 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2496 define(
2497 Array.prototype, 'fill',
2498 function fill(value/*, start, end*/) {
2499 var start = arguments[1],
2500 end = arguments[2];
2501
2502 var o = ToObject(this);
2503 var lenVal = o.length;
2504 var len = ToLength(lenVal);
2505 len = max(len, 0);
2506 var relativeStart = ToInteger(start);
2507 var k;
2508 if (relativeStart < 0)
2509 k = max((len + relativeStart), 0);
2510 else
2511 k = min(relativeStart, len);
2512 var relativeEnd;
2513 if (end === undefined)
2514 relativeEnd = len;
2515 else
2516 relativeEnd = ToInteger(end);
2517 var final;
2518 if (relativeEnd < 0)
2519 final = max((len + relativeEnd), 0);
2520 else
2521 final = min(relativeEnd, len);
2522 while (k < final) {
2523 var pk = String(k);
2524 o[pk] = value;
2525 k += 1;
2526 }
2527 return o;
2528 });
2529
2530 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2531
2532 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2533 define(
2534 Array.prototype, 'find',
2535 function find(predicate) {
2536 var o = ToObject(this);
2537 var lenValue = o.length;
2538 var len = ToInteger(lenValue);
2539 if (!IsCallable(predicate)) throw TypeError();
2540 var t = arguments.length > 1 ? arguments[1] : undefined;
2541 var k = 0;
2542 while (k < len) {
2543 var pk = String(k);
2544 var kPresent = HasProperty(o, pk);
2545 if (kPresent) {
2546 var kValue = o[pk];
2547 var testResult = predicate.call(t, kValue, k, o);
2548 if (Boolean(testResult)) {
2549 return kValue;
2550 }
2551 }
2552 ++k;
2553 }
2554 return undefined;
2555 });
2556
2557 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2558 define(
2559 Array.prototype, 'findIndex',
2560 function findIndex(predicate) {
2561 var o = ToObject(this);
2562 var lenValue = o.length;
2563 var len = ToLength(lenValue);
2564 if (!IsCallable(predicate)) throw TypeError();
2565 var t = arguments.length > 1 ? arguments[1] : undefined;
2566 var k = 0;
2567 while (k < len) {
2568 var pk = String(k);
2569 var kPresent = HasProperty(o, pk);
2570 if (kPresent) {
2571 var kValue = o[pk];
2572 var testResult = predicate.call(t, kValue, k, o);
2573 if (Boolean(testResult)) {
2574 return k;
2575 }
2576 }
2577 ++k;
2578 }
2579 return -1;
2580 });
2581
2582 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2583 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2584 // 22.1.3.12 Array.prototype.join (separator)
2585
2586 // 22.1.3.13 Array.prototype.keys ( )
2587 define(
2588 Array.prototype, 'keys',
2589 function keys() {
2590 return CreateArrayIterator(this, 'key');
2591 }, !nativeArrayIteratorMethods);
2592
2593 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2594 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2595 // 22.1.3.16 Array.prototype.pop ( )
2596 // 22.1.3.17 Array.prototype.push ( ...items )
2597 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2598 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2599 // 22.1.3.20 Array.prototype.reverse ( )
2600 // 22.1.3.21 Array.prototype.shift ( )
2601 // 22.1.3.22 Array.prototype.slice (start, end)
2602 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2603 // 22.1.3.24 Array.prototype.sort (comparefn)
2604 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2605 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2606 // 22.1.3.27 Array.prototype.toString ( )
2607 // 22.1.3.28 Array.prototype.unshift ( ...items )
2608
2609 // 22.1.3.29 Array.prototype.values ( )
2610 define(
2611 Array.prototype, 'values',
2612 function values() {
2613 return CreateArrayIterator(this, 'value');
2614 }, !nativeArrayIteratorMethods);
2615
2616 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2617 define(
2618 Array.prototype, $$iterator,
2619 Array.prototype.values
2620 );
2621
2622 // 22.1.3.31 Array.prototype [ @@unscopables ]
2623 // 22.1.4 Properties of Array Instances
2624 // 22.1.4.1 length
2625
2626 // 22.1.5 Array Iterator Objects
2627 function ArrayIterator() {}
2628
2629 // 22.1.5.1 CreateArrayIterator Abstract Operation
2630 function CreateArrayIterator(array, kind) {
2631 var o = ToObject(array);
2632 var iterator = new ArrayIterator;
2633 set_internal(iterator, '[[IteratedObject]]', o);
2634 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2635 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2636 return iterator;
2637 }
2638
2639 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2640 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2641 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2642
2643 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2644 define(
2645 $ArrayIteratorPrototype$, 'next',
2646 function next() {
2647 var o = strict(this);
2648 if (Type(o) !== 'object') throw TypeError();
2649 var a = o['[[IteratedObject]]'],
2650 index = o['[[ArrayIteratorNextIndex]]'],
2651 itemKind = o['[[ArrayIterationKind]]'],
2652 lenValue = a.length,
2653 len = ToUint32(lenValue),
2654 elementKey,
2655 elementValue;
2656 if (itemKind.indexOf('sparse') !== -1) {
2657 var found = false;
2658 while (!found && index < len) {
2659 elementKey = String(index);
2660 found = HasProperty(a, elementKey);
2661 if (!found) {
2662 index += 1;
2663 }
2664 }
2665 }
2666 if (index >= len) {
2667 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2668 return CreateIterResultObject(undefined, true);
2669 }
2670 elementKey = index;
2671 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2672 if (itemKind.indexOf('value') !== -1)
2673 elementValue = a[elementKey];
2674 if (itemKind.indexOf('key+value') !== -1)
2675 return CreateIterResultObject([elementKey, elementValue], false);
2676 if (itemKind.indexOf('key') !== -1)
2677 return CreateIterResultObject(elementKey, false);
2678 if (itemKind === 'value')
2679 return CreateIterResultObject(elementValue, false);
2680 throw Error('Internal error');
2681 });
2682
2683 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2684 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2685
2686 // 22.1.5.3 Properties of Array Iterator Instances
2687
2688
2689 // ---------------------------------------
2690 // 22.2 TypedArray Objects
2691 // ---------------------------------------
2692
2693 // See typedarray.js for TypedArray polyfill
2694
2695 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2696 'Int16Array', 'Uint16Array',
2697 'Int32Array', 'Uint32Array',
2698 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2699 if (!($TypedArrayName$ in global))
2700 return;
2701 var $TypedArray$ = global[$TypedArrayName$];
2702
2703 // 22.2.1 The %TypedArray% Intrinsic Object
2704 // 22.2.1.1 %TypedArray% ( length )
2705 // 22.2.1.2 %TypedArray% ( typedArray )
2706 // 22.2.1.3 %TypedArray% ( object )
2707 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2708 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2709 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2710
2711 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2712 define(
2713 $TypedArray$, 'from',
2714 function from(source) {
2715 var mapfn = arguments[1];
2716 var thisArg = arguments[2];
2717
2718 var c = strict(this);
2719 if (!IsConstructor(c)) throw TypeError();
2720 if (mapfn === undefined) {
2721 var mapping = false;
2722 } else {
2723 if (IsCallable(mapfn)) throw TypeError();
2724 var t = thisArg;
2725 mapping = true;
2726 }
2727 var usingIterator = GetMethod(source, $$iterator);
2728 if (usingIterator !== undefined) {
2729 var iterator = GetIterator(source, usingIterator);
2730 var values = [];
2731 var next = true;
2732 while (next !== false) {
2733 next = IteratorStep(iterator);
2734 if (next !== false) {
2735 var nextValue = IteratorValue(next);
2736 values.push(nextValue);
2737 }
2738 }
2739 var len = values.length;
2740 var newObj = new c(len);
2741 var k = 0;
2742 while (k < len) {
2743 var kValue = values.shift();
2744 if (mapping) {
2745 var mappedValue = mapfn.call(t, kValue);
2746 } else {
2747 mappedValue = kValue;
2748 }
2749 newObj[k] = mappedValue;
2750 ++k;
2751 }
2752 console.assert(values.length === 0);
2753 return newObj;
2754 }
2755 var arrayLike = ToObject(source);
2756 var lenValue = arrayLike.length;
2757 len = ToLength(lenValue);
2758 newObj = new c(len);
2759 k = 0;
2760 while (k < len) {
2761 kValue = arrayLike[k];
2762 if (mapping) {
2763 mappedValue = mapfn.call(t, kValue, k);
2764 } else {
2765 mappedValue = kValue;
2766 }
2767 newObj[k] = mappedValue;
2768 ++k;
2769 }
2770 return newObj;
2771 });
2772
2773 // 22.2.2.2 %TypedArray%.of ( ...items )
2774 define(
2775 $TypedArray$, 'of',
2776 function of() {
2777 var items = arguments;
2778
2779 var len = items.length;
2780 var c = strict(this);
2781 var newObj = new c(len);
2782 var k = 0;
2783 while (k < len) {
2784 newObj[k] = items[k];
2785 ++k;
2786 }
2787 return newObj;
2788 });
2789
2790 // 22.2.2.3 %TypedArray%.prototype
2791 // 22.2.2.4 get %TypedArray% [ @@species ]
2792 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2793 // 22.2.3.1 get %TypedArray%.prototype.buffer
2794 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2795 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2796 // 22.2.3.4 %TypedArray%.prototype.constructor
2797
2798 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2799 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2800
2801 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2802 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2803
2804 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2805 define($TypedArray$.prototype, 'every', Array.prototype.every);
2806
2807 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2808 define(
2809 $TypedArray$.prototype, 'fill',
2810 //Array.prototype.fill // Doesn't work in Safari 7
2811 function fill(value/*, start, end*/) {
2812 var start = arguments[1],
2813 end = arguments[2];
2814
2815 var o = ToObject(this);
2816 var lenVal = o.length;
2817 var len = ToLength(lenVal);
2818 len = max(len, 0);
2819 var relativeStart = ToInteger(start);
2820 var k;
2821 if (relativeStart < 0) k = max((len + relativeStart), 0);
2822 else k = min(relativeStart, len);
2823 var relativeEnd;
2824 if (end === undefined) relativeEnd = len;
2825 else relativeEnd = ToInteger(end);
2826 var final;
2827 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2828 else final = min(relativeEnd, len);
2829 while (k < final) {
2830 var pk = String(k);
2831 o[pk] = value;
2832 k += 1;
2833 }
2834 return o;
2835 });
2836
2837 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2838 define(
2839 $TypedArray$.prototype, 'filter',
2840 function filter(callbackfn) {
2841 var thisArg = arguments[1];
2842
2843 var o = ToObject(this);
2844 var lenVal = o.length;
2845 var len = ToLength(lenVal);
2846 if (!IsCallable(callbackfn)) throw TypeError();
2847 var t = thisArg;
2848 var c = o.constructor;
2849 var kept = [];
2850 var k = 0;
2851 var captured = 0;
2852 while (k < len) {
2853 var kValue = o[k];
2854 var selected = callbackfn.call(t, kValue, k, o);
2855 if (selected) {
2856 kept.push(kValue);
2857 ++captured;
2858 }
2859 ++k;
2860 }
2861 var a = new c(captured);
2862 var n = 0;
2863 for (var i = 0; i < kept.length; ++i) {
2864 var e = kept[i];
2865 a[n] = e;
2866 ++n;
2867 }
2868 return a;
2869 });
2870
2871 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2872 define($TypedArray$.prototype, 'find', Array.prototype.find);
2873
2874 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2875 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2876
2877 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2878 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2879
2880 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2881 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2882
2883 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2884 define($TypedArray$.prototype, 'join', Array.prototype.join);
2885
2886 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2887 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2888
2889 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2890 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2891
2892 // 22.2.3.17 get %TypedArray%.prototype.length
2893
2894 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2895 define(
2896 $TypedArray$.prototype, 'map',
2897 function map(callbackfn) {
2898 var thisArg = arguments[1];
2899
2900 var o = ToObject(this);
2901 var lenValue = o.length;
2902 var len = ToLength(lenValue);
2903 if (!IsCallable(callbackfn)) throw TypeError();
2904 var t = thisArg;
2905 var a = undefined;
2906 var c = o.constructor;
2907 if (IsConstructor(c))
2908 a = new c(len);
2909 if (a === undefined)
2910 a = new Array(len);
2911 var k = 0;
2912 while (k < len) {
2913 var kPresent = HasProperty(o, k);
2914 if (kPresent) {
2915 var kValue = o[k];
2916 var mappedValue = callbackfn.call(t, kValue, k, o);
2917 a[k] = mappedValue;
2918 }
2919 ++k;
2920 }
2921 return a;
2922 });
2923
2924 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2925 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2926
2927 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2928 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2929
2930 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2931 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2932
2933 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2934 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2935 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2936
2937 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2938 define(
2939 $TypedArray$.prototype, 'slice',
2940 function slice(start, end) {
2941 var o = ToObject(this);
2942 var lenVal = o.length;
2943 var len = ToLength(lenVal);
2944 var relativeStart = ToInteger(start);
2945 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2946 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2947 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2948 var count = final - k;
2949 var c = o.constructor;
2950 if (IsConstructor(c)) {
2951 var a = new c(count);
2952 } else {
2953 throw TypeError();
2954 }
2955 var n = 0;
2956 while (k < final) {
2957 var kValue = o[k];
2958 a[n] = kValue;
2959 ++k;
2960 ++n;
2961 }
2962 return a;
2963 });
2964
2965 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2966 define($TypedArray$.prototype, 'some', Array.prototype.some);
2967
2968 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2969 define(
2970 $TypedArray$.prototype, 'sort',
2971 function sort() {
2972 var comparefn = arguments[0];
2973
2974 function sortCompare(x, y) {
2975 console.assert(Type(x) === 'number' && Type(y) === 'number');
2976 if (x !== x && y !== y) return +0;
2977 if (x !== x) return 1;
2978 if (y !== y) return -1;
2979 if (comparefn !== undefined) {
2980 return comparefn(x, y);
2981 }
2982 if (x < y) return -1;
2983 if (x > y) return 1;
2984 return +0;
2985 }
2986 return Array.prototype.sort.call(this, sortCompare);
2987 });
2988
2989 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
2990 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
2991 // 22.2.3.28 %TypedArray%.prototype.toString ( )
2992
2993 // 22.2.3.29 %TypedArray%.prototype.values ( )
2994 define($TypedArray$.prototype, 'values', Array.prototype.values);
2995
2996 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
2997 define(
2998 $TypedArray$.prototype, $$iterator,
2999 $TypedArray$.prototype.values
3000 );
3001
3002 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3003 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3004
3005 // 22.2.4 The TypedArray Constructors
3006 // 22.2.4.1TypedArray( ... argumentsList)
3007 // 22.2.5 Properties of the TypedArray Constructors
3008 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3009 // 22.2.5.2 TypedArray.prototype
3010 // 22.2.6 Properties of TypedArray Prototype Objects
3011 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3012 // 22.2.6.2 TypedArray.prototype.constructor
3013 // 22.2.7 Properties of TypedArray Instances
3014 });
3015
3016 // ---------------------------------------
3017 // 23 Keyed Collection
3018 // ---------------------------------------
3019
3020 // ---------------------------------------
3021 // 23.1 Map Objects
3022 // ---------------------------------------
3023
3024 (function() {
3025 // 23.1.1 The Map Constructor
3026
3027 // 23.1.1.1 Map ( [ iterable ] )
3028 /** @constructor */
3029 function Map(/*iterable*/) {
3030 var map = strict(this);
3031 var iterable = arguments[0];
3032
3033 if (Type(map) !== 'object') throw TypeError();
3034 if ('[[MapData]]' in map) throw TypeError();
3035
3036 if (iterable !== undefined) {
3037 var adder = map['set'];
3038 if (!IsCallable(adder)) throw TypeError();
3039 var iter = GetIterator(ToObject(iterable));
3040 }
3041 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3042 if (iter === undefined) return map;
3043 while (true) {
3044 var next = IteratorStep(iter);
3045 if (next === false)
3046 return map;
3047 var nextItem = IteratorValue(next);
3048 if (Type(nextItem) !== 'object') throw TypeError();
3049 var k = nextItem[0];
3050 var v = nextItem[1];
3051 adder.call(map, k, v);
3052 }
3053
3054 return map;
3055 }
3056
3057 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3058 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3059 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3060 (new global.Map([['a', 1]]).size !== 1))
3061 global.Map = Map;
3062
3063
3064 function MapDataIndexOf(mapData, key) {
3065 var i;
3066 if (key === key) return mapData.keys.indexOf(key);
3067 // Slow case for NaN
3068 for (i = 0; i < mapData.keys.length; i += 1)
3069 if (SameValueZero(mapData.keys[i], key)) return i;
3070 return -1;
3071 }
3072
3073 // 23.1.1.2 new Map ( ... argumentsList )
3074 // 23.1.2 Properties of the Map Constructor
3075 // 23.1.2.1 Map.prototype
3076 var $MapPrototype$ = {};
3077 Map.prototype = $MapPrototype$;
3078
3079 // 23.1.2.2 get Map [ @@species ]
3080
3081 // 23.1.3 Properties of the Map Prototype Object
3082 // 23.1.3.1 Map.prototype.clear ()
3083 define(
3084 Map.prototype, 'clear',
3085 function clear() {
3086 var m = strict(this);
3087 if (Type(m) !== 'object') throw TypeError();
3088 if (!('[[MapData]]' in m)) throw TypeError();
3089 if (m['[[MapData]]'] === undefined) throw TypeError();
3090 var entries = m['[[MapData]]'];
3091 entries.keys.length = 0;
3092 entries.values.length = 0;
3093 return undefined;
3094 });
3095
3096 // 23.1.3.2 Map.prototype.constructor
3097
3098 // 23.1.3.3 Map.prototype.delete ( key )
3099 define(
3100 Map.prototype, 'delete',
3101 function delete_(key) {
3102 var m = strict(this);
3103 if (Type(m) !== 'object') throw TypeError();
3104 if (!('[[MapData]]' in m)) throw TypeError();
3105 if (m['[[MapData]]'] === undefined) throw TypeError();
3106 var entries = m['[[MapData]]'];
3107 var i = MapDataIndexOf(entries, key);
3108 if (i < 0) return false;
3109 entries.keys[i] = empty;
3110 entries.values[i] = empty;
3111 return true;
3112 });
3113
3114 // 23.1.3.4 Map.prototype.entries ( )
3115 define(
3116 Map.prototype, 'entries',
3117 function entries() {
3118 var m = strict(this);
3119 if (Type(m) !== 'object') throw TypeError();
3120 return CreateMapIterator(m, 'key+value');
3121 });
3122
3123 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3124 define(
3125 Map.prototype, 'forEach',
3126 function forEach(callbackfn /*, thisArg*/) {
3127 var thisArg = arguments[1];
3128
3129 var m = strict(this);
3130 if (Type(m) !== 'object') throw TypeError();
3131 if (!('[[MapData]]' in m)) throw TypeError();
3132 if (m['[[MapData]]'] === undefined) throw TypeError();
3133 var entries = m['[[MapData]]'];
3134
3135 if (!IsCallable(callbackfn)) {
3136 throw TypeError('First argument to forEach is not callable.');
3137 }
3138 for (var i = 0; i < entries.keys.length; ++i) {
3139 if (entries.keys[i] !== empty) {
3140 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3141 }
3142 }
3143 return undefined;
3144 });
3145
3146 // 23.1.3.6 Map.prototype.get ( key )
3147 define(
3148 Map.prototype, 'get',
3149 function get(key) {
3150 var m = strict(this);
3151 if (Type(m) !== 'object') throw TypeError();
3152 if (!('[[MapData]]' in m)) throw TypeError();
3153 if (m['[[MapData]]'] === undefined) throw TypeError();
3154 var entries = m['[[MapData]]'];
3155 var i = MapDataIndexOf(entries, key);
3156 if (i >= 0) return entries.values[i];
3157 return undefined;
3158 });
3159
3160 // 23.1.3.7 Map.prototype.has ( key )
3161 define(
3162 Map.prototype, 'has',
3163 function has(key) {
3164 var m = strict(this);
3165 if (Type(m) !== 'object') throw TypeError();
3166 if (!('[[MapData]]' in m)) throw TypeError();
3167 if (m['[[MapData]]'] === undefined) throw TypeError();
3168 var entries = m['[[MapData]]'];
3169 if (MapDataIndexOf(entries, key) >= 0) return true;
3170 return false;
3171 });
3172
3173 // 23.1.3.8 Map.prototype.keys ( )
3174 define(
3175 Map.prototype, 'keys',
3176 function keys() {
3177 var m = strict(this);
3178 if (Type(m) !== 'object') throw TypeError();
3179 return CreateMapIterator(m, 'key');
3180 });
3181
3182 // 23.1.3.9 Map.prototype.set ( key , value )
3183 define(
3184 Map.prototype, 'set',
3185 function set(key, value) {
3186 var m = strict(this);
3187 if (Type(m) !== 'object') throw TypeError();
3188 if (!('[[MapData]]' in m)) throw TypeError();
3189 if (m['[[MapData]]'] === undefined) throw TypeError();
3190 var entries = m['[[MapData]]'];
3191 var i = MapDataIndexOf(entries, key);
3192 if (i < 0) i = entries.keys.length;
3193 if (SameValue(key, -0)) key = 0;
3194 entries.keys[i] = key;
3195 entries.values[i] = value;
3196 return m;
3197 });
3198
3199 // 23.1.3.10 get Map.prototype.size
3200 Object.defineProperty(
3201 Map.prototype, 'size', {
3202 get: function() {
3203 var m = strict(this);
3204 if (Type(m) !== 'object') throw TypeError();
3205 if (!('[[MapData]]' in m)) throw TypeError();
3206 if (m['[[MapData]]'] === undefined) throw TypeError();
3207 var entries = m['[[MapData]]'];
3208 var count = 0;
3209 for (var i = 0; i < entries.keys.length; ++i) {
3210 if (entries.keys[i] !== empty)
3211 count = count + 1;
3212 }
3213 return count;
3214 }
3215 });
3216
3217 // 23.1.3.11 Map.prototype.values ( )
3218 define(
3219 Map.prototype, 'values',
3220 function values() {
3221 var m = strict(this);
3222 if (Type(m) !== 'object') throw TypeError();
3223 return CreateMapIterator(m, 'value');
3224 });
3225
3226 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3227 define(
3228 Map.prototype, $$iterator,
3229 function() {
3230 var m = strict(this);
3231 if (Type(m) !== 'object') throw TypeError();
3232 return CreateMapIterator(m, 'key+value');
3233 });
3234
3235 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3236 define(global.Map.prototype, $$toStringTag, 'Map');
3237
3238 // 23.1.4 Properties of Map Instances
3239 // 23.1.5 Map Iterator Objects
3240
3241 /** @constructor */
3242 function MapIterator() {}
3243
3244 // 23.1.5.1 CreateMapIterator Abstract Operation
3245 function CreateMapIterator(map, kind) {
3246 if (Type(map) !== 'object') throw TypeError();
3247 if (!('[[MapData]]' in map)) throw TypeError();
3248 if (map['[[MapData]]'] === undefined) throw TypeError();
3249 var iterator = new MapIterator;
3250 set_internal(iterator, '[[Map]]', map);
3251 set_internal(iterator, '[[MapNextIndex]]', 0);
3252 set_internal(iterator, '[[MapIterationKind]]', kind);
3253 return iterator;
3254 }
3255
3256 // 23.1.5.2 The %MapIteratorPrototype% Object
3257 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3258 MapIterator.prototype = $MapIteratorPrototype$;
3259
3260 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3261 define(
3262 $MapIteratorPrototype$, 'next',
3263 function next() {
3264 var o = strict(this);
3265 if (Type(o) !== 'object') throw TypeError();
3266 var m = o['[[Map]]'],
3267 index = o['[[MapNextIndex]]'],
3268 itemKind = o['[[MapIterationKind]]'],
3269 entries = m['[[MapData]]'];
3270 while (index < entries.keys.length) {
3271 var e = {key: entries.keys[index], value: entries.values[index]};
3272 index = index += 1;
3273 set_internal(o, '[[MapNextIndex]]', index);
3274 if (e.key !== empty) {
3275 if (itemKind === 'key') {
3276 return CreateIterResultObject(e.key, false);
3277 } else if (itemKind === 'value') {
3278 return CreateIterResultObject(e.value, false);
3279 } else {
3280 return CreateIterResultObject([e.key, e.value], false);
3281 }
3282 }
3283 }
3284 return CreateIterResultObject(undefined, true);
3285 });
3286
3287 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3288 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3289
3290 // 23.1.5.3 Properties of Map Iterator Instances
3291 }());
3292
3293 // ---------------------------------------
3294 // 23.2 Set Objects
3295 // ---------------------------------------
3296
3297 (function() {
3298 // 23.2.1 The Set Constructor
3299 // 23.2.1.1 Set ( [ iterable ] )
3300
3301 /** @constructor */
3302 function Set(/*iterable*/) {
3303 var set = strict(this);
3304 var iterable = arguments[0];
3305
3306 if (Type(set) !== 'object') throw TypeError();
3307 if ('[[SetData]]' in set) throw TypeError();
3308
3309 if (iterable !== undefined) {
3310 var adder = set['add'];
3311 if (!IsCallable(adder)) throw TypeError();
3312 var iter = GetIterator(ToObject(iterable));
3313 }
3314 set_internal(set, '[[SetData]]', []);
3315 if (iter === undefined) return set;
3316 while (true) {
3317 var next = IteratorStep(iter);
3318 if (next === false)
3319 return set;
3320 var nextValue = IteratorValue(next);
3321 adder.call(set, nextValue);
3322 }
3323
3324 return set;
3325 }
3326
3327 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3328 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3329 (new global.Set([1]).size !== 1))
3330 global.Set = Set;
3331
3332 function SetDataIndexOf(setData, key) {
3333 var i;
3334 if (key === key)
3335 return setData.indexOf(key);
3336 // Slow case for NaN
3337 for (i = 0; i < setData.length; i += 1)
3338 if (SameValueZero(setData[i], key)) return i;
3339 return -1;
3340 }
3341
3342 // 23.2.1.2 new Set ( ...argumentsList )
3343 // 23.2.2 Properties of the Set Constructor
3344
3345 // 23.2.2.1 Set.prototype
3346 var $SetPrototype$ = {};
3347 Set.prototype = $SetPrototype$;
3348
3349 // 23.2.2.2 get Set [ @@species ]
3350 // 23.2.3 Properties of the Set Prototype Object
3351
3352 // 23.2.3.1 Set.prototype.add (value )
3353 define(
3354 Set.prototype, 'add',
3355 function add(value) {
3356 var s = strict(this);
3357 if (Type(s) !== 'object') throw TypeError();
3358 if (!('[[SetData]]' in s)) throw TypeError();
3359 if (s['[[SetData]]'] === undefined) throw TypeError();
3360 if (SameValue(value, -0)) value = 0;
3361 var entries = s['[[SetData]]'];
3362 var i = SetDataIndexOf(entries, value);
3363 if (i < 0) i = s['[[SetData]]'].length;
3364 s['[[SetData]]'][i] = value;
3365
3366 return s;
3367 });
3368
3369 // 23.2.3.2 Set.prototype.clear ()
3370 define(
3371 Set.prototype, 'clear',
3372 function clear() {
3373 var s = strict(this);
3374 if (Type(s) !== 'object') throw TypeError();
3375 if (!('[[SetData]]' in s)) throw TypeError();
3376 if (s['[[SetData]]'] === undefined) throw TypeError();
3377 var entries = s['[[SetData]]'];
3378 entries.length = 0;
3379 return undefined;
3380 });
3381
3382 // 23.2.3.3 Set.prototype.constructor
3383 // 23.2.3.4 Set.prototype.delete ( value )
3384 define(
3385 Set.prototype, 'delete',
3386 function delete_(value) {
3387 var s = strict(this);
3388 if (Type(s) !== 'object') throw TypeError();
3389 if (!('[[SetData]]' in s)) throw TypeError();
3390 if (s['[[SetData]]'] === undefined) throw TypeError();
3391 var entries = s['[[SetData]]'];
3392 var i = SetDataIndexOf(entries, value);
3393 if (i < 0) return false;
3394 entries[i] = empty;
3395 return true;
3396 });
3397
3398 // 23.2.3.5 Set.prototype.entries ( )
3399 define(
3400 Set.prototype, 'entries',
3401 function entries() {
3402 var s = strict(this);
3403 if (Type(s) !== 'object') throw TypeError();
3404 return CreateSetIterator(s, 'key+value');
3405 });
3406
3407 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3408 define(
3409 Set.prototype, 'forEach',
3410 function forEach(callbackfn/*, thisArg*/) {
3411 var thisArg = arguments[1];
3412
3413 var s = strict(this);
3414 if (Type(s) !== 'object') throw TypeError();
3415 if (!('[[SetData]]' in s)) throw TypeError();
3416 if (s['[[SetData]]'] === undefined) throw TypeError();
3417 var entries = s['[[SetData]]'];
3418
3419 if (!IsCallable(callbackfn)) {
3420 throw TypeError('First argument to forEach is not callable.');
3421 }
3422 for (var i = 0; i < entries.length; ++i) {
3423 if (entries[i] !== empty) {
3424 callbackfn.call(thisArg, entries[i], entries[i], s);
3425 }
3426 }
3427 });
3428
3429 // 23.2.3.7 Set.prototype.has ( value )
3430 define(
3431 Set.prototype, 'has',
3432 function has(key) {
3433 var s = strict(this);
3434 if (Type(s) !== 'object') throw TypeError();
3435 if (!('[[SetData]]' in s)) throw TypeError();
3436 if (s['[[SetData]]'] === undefined) throw TypeError();
3437 var entries = s['[[SetData]]'];
3438 return SetDataIndexOf(entries, key) !== -1;
3439 });
3440
3441 // 23.2.3.8 Set.prototype.keys ( )
3442 // See Set.prototype.values
3443
3444 // 23.2.3.9 get Set.prototype.size
3445 Object.defineProperty(
3446 Set.prototype, 'size', {
3447 get: function() {
3448 var s = strict(this);
3449 if (Type(s) !== 'object') throw TypeError();
3450 if (!('[[SetData]]' in s)) throw TypeError();
3451 if (s['[[SetData]]'] === undefined) throw TypeError();
3452 var entries = s['[[SetData]]'];
3453 var count = 0;
3454 for (var i = 0; i < entries.length; ++i) {
3455 if (entries[i] !== empty)
3456 count = count + 1;
3457 }
3458 return count;
3459 }
3460 });
3461
3462 // 23.2.3.10 Set.prototype.values ( )
3463 define(
3464 Set.prototype, 'values',
3465 function values() {
3466 var s = strict(this);
3467 if (Type(s) !== 'object') throw TypeError();
3468 return CreateSetIterator(s, 'value');
3469 });
3470 // NOTE: function name is still 'values':
3471 Set.prototype.keys = Set.prototype.values;
3472
3473 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3474 define(
3475 Set.prototype, $$iterator,
3476 function() {
3477 var s = strict(this);
3478 if (Type(s) !== 'object') throw TypeError();
3479 return CreateSetIterator(s);
3480 });
3481
3482 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3483 define(global.Set.prototype, $$toStringTag, 'Set');
3484
3485 // 23.2.4 Properties of Set Instances
3486 // 23.2.5 Set Iterator Objects
3487 /** @constructor */
3488 function SetIterator() {}
3489
3490 // 23.2.5.1 CreateSetIterator Abstract Operation
3491 function CreateSetIterator(set, kind) {
3492 if (Type(set) !== 'object') throw TypeError();
3493 if (!('[[SetData]]' in set)) throw TypeError();
3494 if (set['[[SetData]]'] === undefined) throw TypeError();
3495 var iterator = new SetIterator;
3496 set_internal(iterator, '[[IteratedSet]]', set);
3497 set_internal(iterator, '[[SetNextIndex]]', 0);
3498 set_internal(iterator, '[[SetIterationKind]]', kind);
3499 return iterator;
3500 }
3501
3502 // 23.2.5.2 The %SetIteratorPrototype% Object
3503 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3504 SetIterator.prototype = $SetIteratorPrototype$;
3505
3506 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3507 define(
3508 $SetIteratorPrototype$, 'next',
3509 function next() {
3510 var o = strict(this);
3511 if (Type(o) !== 'object') throw TypeError();
3512 var s = o['[[IteratedSet]]'],
3513 index = o['[[SetNextIndex]]'],
3514 itemKind = o['[[SetIterationKind]]'],
3515 entries = s['[[SetData]]'];
3516 while (index < entries.length) {
3517 var e = entries[index];
3518 index = index += 1;
3519 set_internal(o, '[[SetNextIndex]]', index);
3520 if (e !== empty) {
3521 if (itemKind === 'key+value')
3522 return CreateIterResultObject([e, e], false);
3523 return CreateIterResultObject(e, false);
3524 }
3525 }
3526 return CreateIterResultObject(undefined, true);
3527 });
3528
3529 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3530 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3531
3532 // 23.2.5.3 Properties of Set Iterator Instances
3533
3534 }());
3535
3536 // ---------------------------------------
3537 // 23.3 WeakMap Objects
3538 // ---------------------------------------
3539
3540 (function() {
3541 // 23.3.1 The WeakMap Constructor
3542 // 23.3.1.1 WeakMap ( [ iterable ] )
3543 /** @constructor */
3544 function WeakMap(/*iterable*/) {
3545 var map = strict(this);
3546 var iterable = arguments[0];
3547
3548 if (Type(map) !== 'object') throw TypeError();
3549 if ('[[WeakMapData]]' in map) throw TypeError();
3550
3551 if (iterable !== undefined) {
3552 var adder = map['set'];
3553 if (!IsCallable(adder)) throw TypeError();
3554 var iter = GetIterator(ToObject(iterable));
3555 }
3556 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3557 if (iter === undefined) return map;
3558 while (true) {
3559 var next = IteratorStep(iter);
3560 if (next === false)
3561 return map;
3562 var nextValue = IteratorValue(next);
3563 if (Type(nextValue) !== 'object') throw TypeError();
3564 var k = nextValue[0];
3565 var v = nextValue[1];
3566 adder.call(map, k, v);
3567 }
3568
3569 return map;
3570 }
3571
3572 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3573 global.WeakMap = WeakMap;
3574
3575 // 23.3.2 Properties of the WeakMap Constructor
3576 // 23.3.2.1 WeakMap.prototype
3577 var $WeakMapPrototype$ = {};
3578 WeakMap.prototype = $WeakMapPrototype$;
3579
3580
3581
3582 // 23.3.2.2 WeakMap[ @@create ] ( )
3583 // 23.3.3 Properties of the WeakMap Prototype Object
3584
3585 // 23.3.3.1 WeakMap.prototype.constructor
3586
3587 // 23.3.3.2 WeakMap.prototype.delete ( key )
3588 define(
3589 WeakMap.prototype, 'delete',
3590 function delete_(key) {
3591 var M = strict(this);
3592 if (Type(M) !== 'object') throw TypeError();
3593 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3594 if (Type(key) !== 'object') throw TypeError('Expected object');
3595 return M['[[WeakMapData]]'].remove(key);
3596 });
3597
3598 // 23.3.3.3 WeakMap.prototype.get ( key )
3599 define(
3600 WeakMap.prototype, 'get',
3601 function get(key, defaultValue) {
3602 var M = strict(this);
3603 if (Type(M) !== 'object') throw TypeError();
3604 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3605 if (Type(key) !== 'object') throw TypeError('Expected object');
3606 return M['[[WeakMapData]]'].get(key, defaultValue);
3607 });
3608
3609 // 23.3.3.4 WeakMap.prototype.has ( key )
3610 define(
3611 WeakMap.prototype, 'has',
3612 function has(key) {
3613 var M = strict(this);
3614 if (Type(M) !== 'object') throw TypeError();
3615 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3616 if (Type(key) !== 'object') throw TypeError('Expected object');
3617 return M['[[WeakMapData]]'].has(key);
3618 });
3619
3620 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3621 define(
3622 WeakMap.prototype, 'set',
3623 function set(key, value) {
3624 var M = strict(this);
3625 if (Type(M) !== 'object') throw TypeError();
3626 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3627 if (Type(key) !== 'object') throw TypeError('Expected object');
3628 M['[[WeakMapData]]'].set(key, value);
3629 return M;
3630 });
3631
3632 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3633 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3634
3635 // 23.3.4 Properties of WeakMap Instances
3636
3637 // Polyfills for incomplete native implementations:
3638 (function() {
3639 var wm = new global.WeakMap();
3640 var orig = global.WeakMap.prototype.set;
3641 define(global.WeakMap.prototype, 'set', function set() {
3642 orig.apply(this, arguments);
3643 return this;
3644 }, wm.set({}, 0) !== wm);
3645 }());
3646 }());
3647
3648 // ---------------------------------------
3649 // 23.4 WeakSet Objects
3650 // ---------------------------------------
3651
3652 (function() {
3653 // 23.4.1 The WeakSet Constructor
3654 // 23.4.1.1 WeakSet ( [ iterable ] )
3655 /** @constructor */
3656 function WeakSet(/*iterable*/) {
3657 var set = strict(this);
3658 var iterable = arguments[0];
3659
3660 if (Type(set) !== 'object') throw TypeError();
3661 if ('[[WeakSetData]]' in set) throw TypeError();
3662
3663 if (iterable !== undefined) {
3664 var adder = set['add'];
3665 if (!IsCallable(adder)) throw TypeError();
3666 var iter = GetIterator(ToObject(iterable));
3667 }
3668 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3669 if (iter === undefined) return set;
3670 while (true) {
3671 var next = IteratorStep(iter);
3672 if (next === false)
3673 return set;
3674 var nextValue = IteratorValue(next);
3675 adder.call(set, nextValue);
3676 }
3677
3678 return set;
3679 }
3680
3681 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3682 global.WeakSet = WeakSet;
3683
3684 // 23.4.2 Properties of the WeakSet Constructor
3685 // 23.4.2.1 WeakSet.prototype
3686 var $WeakSetPrototype$ = {};
3687 WeakSet.prototype = $WeakSetPrototype$;
3688
3689 // 23.4.3 Properties of the WeakSet Prototype Object
3690 // 23.4.3.1 WeakSet.prototype.add (value )
3691 define(
3692 WeakSet.prototype, 'add',
3693 function add(value) {
3694 var S = strict(this);
3695 if (Type(S) !== 'object') throw TypeError();
3696 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3697 if (Type(value) !== 'object') throw TypeError('Expected object');
3698 S['[[WeakSetData]]'].set(value, true);
3699 return S;
3700 });
3701
3702 // 23.4.3.2 WeakSet.prototype.constructor
3703 // 23.4.3.3 WeakSet.prototype.delete ( value )
3704 define(
3705 WeakSet.prototype, 'delete',
3706 function delete_(value) {
3707 var S = strict(this);
3708 if (Type(S) !== 'object') throw TypeError();
3709 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3710 if (Type(value) !== 'object') throw TypeError('Expected object');
3711 return S['[[WeakSetData]]'].remove(value);
3712 });
3713
3714 // 23.4.3.4 WeakSet.prototype.has ( value )
3715 define(
3716 WeakSet.prototype, 'has',
3717 function has(key) {
3718 var S = strict(this);
3719 if (Type(S) !== 'object') throw TypeError();
3720 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3721 if (Type(key) !== 'object') throw TypeError('Expected object');
3722 return S['[[WeakSetData]]'].has(key);
3723 });
3724
3725 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3726 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3727
3728 // 23.4.4 Properties of WeakSet Instances
3729
3730 // Polyfills for incomplete native implementations:
3731 (function() {
3732 var ws = new global.WeakSet();
3733 var orig = global.WeakSet.prototype.add;
3734 define(global.WeakSet.prototype, 'add', function add() {
3735 orig.apply(this, arguments);
3736 return this;
3737 }, ws.add({}) !== ws);
3738 }());
3739 }());
3740
3741 // ---------------------------------------
3742 // 24 Structured Data
3743 // ---------------------------------------
3744
3745 // ---------------------------------------
3746 // 24.1 ArrayBuffer Objects
3747 // ---------------------------------------
3748
3749 // See typedarray.js for TypedArray polyfill
3750
3751 (function() {
3752 if (!('ArrayBuffer' in global))
3753 return;
3754
3755 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3756 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3757 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3758 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3759 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3760 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3761 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3762 // 24.1.2 The ArrayBuffer Constructor
3763 // 24.1.2.1 ArrayBuffer( length )
3764 // 24.1.3 Properties of the ArrayBuffer Constructor
3765
3766 // 24.1.3.1 ArrayBuffer.isView ( arg )
3767 define(
3768 ArrayBuffer, 'isView',
3769 function isView(arg) {
3770 if (Type(arg) !== 'object') return false;
3771 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3772 return false;
3773 });
3774
3775 // 24.1.3.2 ArrayBuffer.prototype
3776 // 24.1.3.3 get ArrayBuffer [ @@species ]
3777 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3778 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3779 // 24.1.4.2 ArrayBuffer.prototype.constructor
3780 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3781
3782 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3783 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3784
3785 // 24.1.5 Properties of the ArrayBuffer Instances
3786 }());
3787
3788 // ---------------------------------------
3789 // 24.2 DataView Objects
3790 // ---------------------------------------
3791
3792 // See typedarray.js for TypedArray polyfill
3793
3794 (function() {
3795 if (!('DataView' in global))
3796 return;
3797
3798 // 24.2.1 Abstract Operations For DataView Objects
3799 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3800 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3801 // 24.2.2 The DataView Constructor
3802 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3803 // 24.2.3 Properties of the DataView Constructor
3804 // 24.2.3.1 DataView.prototype
3805 // 24.2.4 Properties of the DataView Prototype Object
3806 // 24.2.4.1 get DataView.prototype.buffer
3807 // 24.2.4.2 get DataView.prototype.byteLength
3808 // 24.2.4.3 get DataView.prototype.byteOffset
3809 // 24.2.4.4 DataView.prototype.constructor
3810 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3811 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3812 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3813 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3814 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3815 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3816 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3817 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3818 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3819 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3820 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3821 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3822 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3823 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3824 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3825 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3826
3827 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3828 define(DataView.prototype, $$toStringTag, 'DataView');
3829
3830 // 24.2.5 Properties of DataView Instances
3831 }());
3832
3833 // ---------------------------------------
3834 // 24.3 The JSON Object
3835 // ---------------------------------------
3836
3837 // 24.3.1 JSON.parse ( text [ , reviver ] )
3838 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3839 // 24.3.3 JSON [ @@toStringTag ]
3840 define(JSON, $$toStringTag, 'JSON');
3841
3842 // ---------------------------------------
3843 // 25.1 Iteration
3844 // ---------------------------------------
3845
3846 // 25.1.1 Common Iteration Interfaces
3847 // 25.1.1.1 The Iterable Interface
3848 // 25.1.1.2 The Iterator Interface
3849 // 25.1.1.3 The IteratorResult Interface
3850
3851 // 25.1.2 The %IteratorPrototype% Object
3852 // Defined earlier, so other prototypes can reference it.
3853 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3854 define($IteratorPrototype$, $$iterator, function() {
3855 return this;
3856 });
3857
3858
3859 // ---------------------------------------
3860 // 25.4 Promise Objects
3861 // ---------------------------------------
3862
3863 (function() {
3864 // 25.4 Promise Objects
3865
3866 // 25.4.1 Promise Abstract Operations
3867
3868 // 25.4.1.1 PromiseCapability Records
3869 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3870
3871 function IfAbruptRejectPromise(value, capability) {
3872 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3873 return capability['[[Promise]]'];
3874 }
3875
3876 // 25.4.1.2 PromiseReaction Records
3877
3878 // 25.4.1.3 CreateResolvingFunctions ( promise )
3879
3880 function CreateResolvingFunctions(promise) {
3881 var alreadyResolved = {'[[value]]': false};
3882 var resolve = PromiseResolveFunction();
3883 set_internal(resolve, '[[Promise]]', promise);
3884 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3885 var reject = PromiseRejectFunction();
3886 set_internal(reject, '[[Promise]]', promise);
3887 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3888 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3889 }
3890
3891 // 25.4.1.3.1 Promise Reject Functions
3892
3893 function PromiseRejectFunction() {
3894 var F = function(reason) {
3895 console.assert(Type(F['[[Promise]]']) === 'object');
3896 var promise = F['[[Promise]]'];
3897 var alreadyResolved = F['[[AlreadyResolved]]'];
3898 if (alreadyResolved['[[value]]']) return undefined;
3899 set_internal(alreadyResolved, '[[value]]', true);
3900 return RejectPromise(promise, reason);
3901 };
3902 return F;
3903 }
3904
3905 // 25.4.1.3.2 Promise Resolve Functions
3906
3907 function PromiseResolveFunction() {
3908 var F = function(resolution) {
3909 console.assert(Type(F['[[Promise]]']) === 'object');
3910 var promise = F['[[Promise]]'];
3911 var alreadyResolved = F['[[AlreadyResolved]]'];
3912 if (alreadyResolved['[[value]]']) return undefined;
3913 set_internal(alreadyResolved, '[[value]]', true);
3914
3915 if (SameValue(resolution, promise)) {
3916 var selfResolutionError = TypeError();
3917 return RejectPromise(promise, selfResolutionError);
3918 }
3919 if (Type(resolution) !== 'object')
3920 return FulfillPromise(promise, resolution);
3921 try {
3922 var then = resolution['then'];
3923 } catch(then) {
3924 return RejectPromise(promise, then);
3925 }
3926 if (!IsCallable(then))
3927 return FulfillPromise(promise, resolution);
3928 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3929 return undefined;
3930 };
3931 return F;
3932 }
3933
3934 // 25.4.1.4 FulfillPromise ( promise, value )
3935
3936 function FulfillPromise(promise, value) {
3937 console.assert(promise['[[PromiseState]]'] === 'pending');
3938 var reactions = promise['[[PromiseFulfillReactions]]'];
3939 set_internal(promise, '[[PromiseResult]]', value);
3940 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3941 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3942 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3943 return TriggerPromiseReactions(reactions, value);
3944 }
3945
3946 // 25.4.1.5 NewPromiseCapability ( C )
3947
3948 function NewPromiseCapability(c) {
3949 // To keep Promise hermetic, this doesn't look much like the spec.
3950 return CreatePromiseCapabilityRecord(undefined, c);
3951 }
3952
3953 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3954
3955 function CreatePromiseCapabilityRecord(promise, constructor) {
3956 // To keep Promise hermetic, this doesn't look much like the spec.
3957 console.assert(IsConstructor(constructor));
3958 var promiseCapability = {};
3959 set_internal(promiseCapability, '[[Promise]]', promise);
3960 set_internal(promiseCapability, '[[Resolve]]', undefined);
3961 set_internal(promiseCapability, '[[Reject]]', undefined);
3962 var executor = GetCapabilitiesExecutor();
3963 set_internal(executor, '[[Capability]]', promiseCapability);
3964
3965 // NOTE: Differs from spec; object is constructed here
3966 var constructorResult = promise = new constructor(executor);
3967 set_internal(promiseCapability, '[[Promise]]', promise);
3968
3969 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3970 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3971 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3972 return promiseCapability;
3973 }
3974
3975 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3976
3977 function GetCapabilitiesExecutor() {
3978 var F = function(resolve, reject) {
3979 console.assert(F['[[Capability]]']);
3980 var promiseCapability = F['[[Capability]]'];
3981 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
3982 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
3983 set_internal(promiseCapability, '[[Resolve]]', resolve);
3984 set_internal(promiseCapability, '[[Reject]]', reject);
3985 return undefined;
3986 };
3987 return F;
3988 }
3989
3990 // 25.4.1.6 IsPromise ( x )
3991
3992 function IsPromise(x) {
3993 if (Type(x) !== 'object') return false;
3994 if (!('[[PromiseState]]' in x)) return false;
3995 if (x['[[PromiseState]]'] === undefined) return false;
3996 return true;
3997 }
3998
3999 // 25.4.1.7 RejectPromise ( promise, reason )
4000
4001 function RejectPromise(promise, reason) {
4002 console.assert(promise['[[PromiseState]]'] === 'pending');
4003 var reactions = promise['[[PromiseRejectReactions]]'];
4004 set_internal(promise, '[[PromiseResult]]', reason);
4005 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4006 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4007 set_internal(promise, '[[PromiseState]]', 'rejected');
4008 return TriggerPromiseReactions(reactions, reason);
4009 }
4010
4011 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4012
4013 function TriggerPromiseReactions(reactions, argument) {
4014 for (var i = 0, len = reactions.length; i < len; ++i)
4015 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4016 return undefined;
4017 }
4018
4019 // 25.4.2 Promise Jobs
4020
4021 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4022
4023 function PromiseReactionJob(reaction, argument) {
4024 var promiseCapability = reaction['[[Capabilities]]'];
4025 var handler = reaction['[[Handler]]'];
4026 var handlerResult, status;
4027 try {
4028 if (handler === 'Identity') handlerResult = argument;
4029 else if (handler === 'Thrower') throw argument;
4030 else handlerResult = handler.call(undefined, argument);
4031 } catch (handlerResult) {
4032 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4033 NextJob(status); return;
4034 }
4035 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4036 NextJob(status);
4037 }
4038
4039 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4040
4041 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4042 // SPEC BUG: promise vs. promiseToResolve
4043 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4044 try {
4045 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4046 resolvingFunctions['[[Reject]]']);
4047 } catch (thenCallResult) {
4048 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4049 NextJob(status); return;
4050 }
4051 NextJob(thenCallResult);
4052 }
4053
4054 // 25.4.3 The Promise Constructor
4055
4056 // 25.4.3.1 Promise ( executor )
4057
4058 function Promise(executor) {
4059 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4060 Object.defineProperty(this, '[[PromiseState]]', config);
4061 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4062 Object.defineProperty(this, '[[PromiseResult]]', config);
4063 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4064 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4065
4066 var promise = this;
4067 if (Type(promise) !== 'object') throw new TypeError();
4068 if (!('[[PromiseState]]' in promise)) throw TypeError();
4069 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4070 if (!IsCallable(executor)) throw TypeError();
4071
4072 set_internal(promise, '[[PromiseConstructor]]', Promise);
4073
4074 return InitializePromise(promise, executor);
4075 }
4076
4077 // 25.4.3.1.1 InitializePromise ( promise, executor )
4078
4079 function InitializePromise(promise, executor) {
4080 console.assert('[[PromiseState]]' in promise);
4081 console.assert(IsCallable(executor));
4082 set_internal(promise, '[[PromiseState]]', 'pending');
4083 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4084 set_internal(promise, '[[PromiseRejectReactions]]', []);
4085 var resolvingFunctions = CreateResolvingFunctions(promise);
4086 try {
4087 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4088 resolvingFunctions['[[Reject]]']);
4089 } catch (completion) {
4090 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4091 }
4092 return promise;
4093 }
4094
4095 // 25.4.4 Properties of the Promise Constructor
4096 // 25.4.4.1 Promise.all ( iterable )
4097
4098 define(Promise, 'all', function all(iterable) {
4099 var c = strict(this);
4100 var promiseCapability = NewPromiseCapability(c);
4101 try {
4102 var iterator = GetIterator(iterable);
4103 } catch (value) {
4104 promiseCapability['[[Reject]]'].call(undefined, value);
4105 return promiseCapability['[[Promise]]'];
4106 }
4107 var values = [];
4108 var remainingElementsCount = { value: 1 };
4109 var index = 0;
4110 while (true) {
4111 try {
4112 var next = IteratorStep(iterator);
4113 } catch (value) {
4114 promiseCapability['[[Reject]]'].call(undefined, value);
4115 return promiseCapability['[[Promise]]'];
4116 }
4117 if (!next) {
4118 remainingElementsCount.value -= 1;
4119 if (remainingElementsCount.value === 0) {
4120 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4121
4122
4123 }
4124 return promiseCapability['[[Promise]]'];
4125 }
4126 try {
4127 var nextValue = IteratorValue(next);
4128 } catch (value) {
4129 promiseCapability['[[Reject]]'].call(undefined, value);
4130 return promiseCapability['[[Promise]]'];
4131 }
4132 try {
4133 var nextPromise = c.resolve(nextValue);
4134 } catch (value) {
4135 promiseCapability['[[Reject]]'].call(undefined, value);
4136 return promiseCapability['[[Promise]]'];
4137 }
4138 var resolveElement = PromiseAllResolveElementFunction();
4139 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4140 set_internal(resolveElement, '[[Index]]', index);
4141 set_internal(resolveElement, '[[Values]]', values);
4142 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4143 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4144 remainingElementsCount.value += 1;
4145 try {
4146 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4147 } catch (value) {
4148 promiseCapability['[[Reject]]'].call(undefined, value);
4149 return promiseCapability['[[Promise]]'];
4150 }
4151 index += 1;
4152 }
4153 });
4154
4155 // 25.4.4.1.1 Promise.all Resolve Element Functions
4156
4157 function PromiseAllResolveElementFunction() {
4158 var F = function(x) {
4159 var alreadyCalled = F['[[AlreadyCalled]]'];
4160 if (alreadyCalled.value) return undefined;
4161 alreadyCalled.value = true;
4162 var index = F['[[Index]]'];
4163 var values = F['[[Values]]'];
4164 var promiseCapability = F['[[Capabilities]]'];
4165 var remainingElementsCount = F['[[RemainingElements]]'];
4166 try {
4167 values[index] = x;
4168 } catch (result) {
4169 promiseCapability['[[Reject]]'].call(undefined, result);
4170 return promiseCapability['[[Promise]]'];
4171 }
4172 remainingElementsCount.value -= 1;
4173 if (remainingElementsCount.value === 0)
4174 return promiseCapability['[[Resolve]]'].call(undefined, values);
4175 return undefined;
4176 };
4177 return F;
4178 }
4179
4180 // 25.4.4.2 Promise.prototype
4181
4182 Promise.prototype = {};
4183
4184 // 25.4.4.3 Promise.race ( iterable )
4185
4186 define(Promise, 'race', function race(iterable) {
4187 var c = strict(this);
4188 var promiseCapability = NewPromiseCapability(c);
4189 try {
4190 var iterator = GetIterator(iterable);
4191 } catch (value) {
4192 promiseCapability['[[Reject]]'].call(undefined, value);
4193 return promiseCapability['[[Promise]]'];
4194 }
4195 while (true) {
4196 try {
4197 var next = IteratorStep(iterator);
4198 } catch (value) {
4199 promiseCapability['[[Reject]]'].call(undefined, value);
4200 return promiseCapability['[[Promise]]'];
4201 }
4202 if (!next) return promiseCapability['[[Promise]]'];
4203 try {
4204 var nextValue = IteratorValue(next);
4205 } catch (value) {
4206 promiseCapability['[[Reject]]'].call(undefined, value);
4207 return promiseCapability['[[Promise]]'];
4208 }
4209 try {
4210 var nextPromise = c.resolve(nextValue);
4211 } catch (value) {
4212 promiseCapability['[[Reject]]'].call(undefined, value);
4213 return promiseCapability['[[Promise]]'];
4214 }
4215 try {
4216 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4217 } catch (value) {
4218 promiseCapability['[[Reject]]'].call(undefined, value);
4219 return promiseCapability['[[Promise]]'];
4220 }
4221 }
4222 });
4223
4224 // 25.4.4.4 Promise.reject ( r )
4225
4226 define(Promise, 'reject', function reject(r) {
4227 var c = strict(this);
4228 var promiseCapability = NewPromiseCapability(c);
4229 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4230 return promiseCapability['[[Promise]]'];
4231 });
4232
4233 // 25.4.4.5 Promise.resolve ( x )
4234
4235 define(Promise, 'resolve', function resolve(x) {
4236 var c = strict(this);
4237 if (IsPromise(x)) {
4238 var constructor = x['[[PromiseConstructor]]'];
4239 if (SameValue(constructor, c)) return x;
4240 }
4241 var promiseCapability = NewPromiseCapability(c);
4242 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4243 return promiseCapability['[[Promise]]'];
4244 });
4245
4246 // 25.4.4.6 Promise [ @@create ] ( )
4247 // 25.4.4.6.1 AllocatePromise ( constructor )
4248 // 25.4.5 Properties of the Promise Prototype Object
4249 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4250
4251 define(Promise.prototype, 'catch', function catch_(onRejected) {
4252 var promise = this;
4253 return promise.then(undefined, onRejected);
4254 });
4255
4256 // 25.4.5.2 Promise.prototype.constructor
4257
4258 Promise.prototype.constructor = Promise;
4259
4260 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4261
4262 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4263 var promise = this;
4264 if (!IsPromise(promise)) throw TypeError();
4265 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4266 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4267 var c = promise.constructor;
4268 var promiseCapability = NewPromiseCapability(c);
4269 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4270 '[[Handler]]': onFulfilled };
4271 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4272 '[[Handler]]': onRejected };
4273 if (promise['[[PromiseState]]'] === 'pending') {
4274 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4275 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4276 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4277 var value = promise['[[PromiseResult]]'];
4278 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4279 } else if (promise['[[PromiseState]]'] === 'rejected') {
4280 var reason = promise['[[PromiseResult]]'];
4281 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4282 }
4283 return promiseCapability['[[Promise]]'];
4284 });
4285
4286 // 25.4.6 Properties of Promise Instances
4287
4288 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4289 global.Promise = Promise;
4290
4291 // Patch early Promise.cast vs. Promise.resolve implementations
4292 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4293 }());
4294
4295 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4296 define(Promise.prototype, $$toStringTag, 'Promise');
4297
4298 // ---------------------------------------
4299 // 26 Reflection
4300 // ---------------------------------------
4301
4302 (function() {
4303 // 26.1 The Reflect Object
4304 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4305 global.Reflect = {};
4306
4307 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4308 define(
4309 Reflect, 'apply',
4310 function apply(target, thisArgument, argumentsList) {
4311 if (!IsCallable(target)) throw TypeError();
4312 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4313 });
4314
4315 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4316 define(
4317 Reflect, 'construct',
4318 function construct(target, argumentsList) {
4319 return __cons(target, argumentsList);
4320 });
4321
4322 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4323 define(
4324 Reflect, 'defineProperty',
4325 function defineProperty(target, propertyKey, attributes) {
4326 try {
4327 Object.defineProperty(target, propertyKey, attributes);
4328 return true;
4329 } catch (_) {
4330 return false;
4331 }
4332 });
4333
4334 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4335 define(
4336 Reflect, 'deleteProperty',
4337 function deleteProperty(target,name) {
4338 try {
4339 delete target[name];
4340 return !HasOwnProperty(target, name);
4341 } catch (_) {
4342 return false;
4343 }
4344 });
4345
4346 // 26.1.5 Reflect.enumerate ( target )
4347 define(
4348 Reflect, 'enumerate',
4349 function enumerate(target) {
4350 target = ToObject(target);
4351 var iterator = Enumerate(target);
4352 return iterator;
4353 });
4354
4355 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4356 define(
4357 Reflect, 'get',
4358 function get(target, name, receiver) {
4359 target = ToObject(target);
4360 name = String(name);
4361 receiver = (receiver === undefined) ? target : ToObject(receiver);
4362 var desc = getPropertyDescriptor(target, name);
4363 if (desc && 'get' in desc)
4364 return Function.prototype.call.call(desc['get'], receiver);
4365 return target[name];
4366 });
4367
4368 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4369 define(
4370 Reflect, 'getOwnPropertyDescriptor',
4371 Object.getOwnPropertyDescriptor);
4372
4373 // 26.1.8 Reflect.getPrototypeOf ( target )
4374 define(
4375 Reflect, 'getPrototypeOf',
4376 Object.getPrototypeOf);
4377
4378 // 26.1.9 Reflect.has ( target, propertyKey )
4379 define(
4380 Reflect, 'has',
4381 function has(target,name) {
4382 return String(name) in ToObject(target);
4383 });
4384
4385 // 26.1.10 Reflect.isExtensible (target)
4386 define(
4387 Reflect, 'isExtensible',
4388 Object.isExtensible);
4389
4390 // 26.1.11 Reflect.ownKeys ( target )
4391 define(
4392 Reflect, 'ownKeys',
4393 function ownKeys(target) {
4394 var obj = ToObject(target);
4395 return Object.getOwnPropertyNames(obj);
4396 });
4397
4398 // 26.1.12 Reflect.preventExtensions ( target )
4399 define(
4400 Reflect, 'preventExtensions',
4401 function preventExtensions(target) {
4402 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4403 });
4404
4405 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4406 define(
4407 Reflect, 'set',
4408 function set(target, name, value, receiver) {
4409 target = ToObject(target);
4410 name = String(name);
4411 receiver = (receiver === undefined) ? target : ToObject(receiver);
4412 var desc = getPropertyDescriptor(target, name);
4413 try {
4414 if (desc && 'set' in desc)
4415 Function.prototype.call.call(desc['set'], receiver, value);
4416 else
4417 target[name] = value;
4418 return true;
4419 } catch (_) {
4420 return false;
4421 }
4422 });
4423
4424 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4425 define(
4426 Reflect, 'setPrototypeOf',
4427 function setPrototypeOf(target, proto) {
4428 try {
4429 target.__proto__ = proto;
4430 return Reflect.getPrototypeOf(target) === proto;
4431 } catch(_) {
4432 return false;
4433 }
4434 });
4435
4436 }());
4437
4438 // ---------------------------------------
4439 // 26.2 Proxy Objects
4440 // ---------------------------------------
4441
4442 // Not polyfillable.
4443
4444}(self));
4445
4446// This helper is defined outside the main scope so that the use of
4447// 'eval' does not taint the scope for minifiers.
4448function __cons(t, a) {
4449 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4450}
4451</script>
658 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 4452 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
659!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) 4453!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
660},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) 4454},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
@@ -13658,6 +17452,18768 @@ bitcoin.networks.peercoin = {
13658}; 17452};
13659 17453
13660</script> 17454</script>
17455 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
17456(function (global){
17457'use strict';
17458
17459// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
17460// original notice:
17461
17462/*!
17463 * The buffer module from node.js, for the browser.
17464 *
17465 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
17466 * @license MIT
17467 */
17468function compare(a, b) {
17469 if (a === b) {
17470 return 0;
17471 }
17472
17473 var x = a.length;
17474 var y = b.length;
17475
17476 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
17477 if (a[i] !== b[i]) {
17478 x = a[i];
17479 y = b[i];
17480 break;
17481 }
17482 }
17483
17484 if (x < y) {
17485 return -1;
17486 }
17487 if (y < x) {
17488 return 1;
17489 }
17490 return 0;
17491}
17492function isBuffer(b) {
17493 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
17494 return global.Buffer.isBuffer(b);
17495 }
17496 return !!(b != null && b._isBuffer);
17497}
17498
17499// based on node assert, original notice:
17500
17501// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
17502//
17503// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
17504//
17505// Originally from narwhal.js (http://narwhaljs.org)
17506// Copyright (c) 2009 Thomas Robinson <280north.com>
17507//
17508// Permission is hereby granted, free of charge, to any person obtaining a copy
17509// of this software and associated documentation files (the 'Software'), to
17510// deal in the Software without restriction, including without limitation the
17511// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
17512// sell copies of the Software, and to permit persons to whom the Software is
17513// furnished to do so, subject to the following conditions:
17514//
17515// The above copyright notice and this permission notice shall be included in
17516// all copies or substantial portions of the Software.
17517//
17518// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17519// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17520// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17521// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
17522// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17523// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17524
17525var util = require('util/');
17526var hasOwn = Object.prototype.hasOwnProperty;
17527var pSlice = Array.prototype.slice;
17528var functionsHaveNames = (function () {
17529 return function foo() {}.name === 'foo';
17530}());
17531function pToString (obj) {
17532 return Object.prototype.toString.call(obj);
17533}
17534function isView(arrbuf) {
17535 if (isBuffer(arrbuf)) {
17536 return false;
17537 }
17538 if (typeof global.ArrayBuffer !== 'function') {
17539 return false;
17540 }
17541 if (typeof ArrayBuffer.isView === 'function') {
17542 return ArrayBuffer.isView(arrbuf);
17543 }
17544 if (!arrbuf) {
17545 return false;
17546 }
17547 if (arrbuf instanceof DataView) {
17548 return true;
17549 }
17550 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
17551 return true;
17552 }
17553 return false;
17554}
17555// 1. The assert module provides functions that throw
17556// AssertionError's when particular conditions are not met. The
17557// assert module must conform to the following interface.
17558
17559var assert = module.exports = ok;
17560
17561// 2. The AssertionError is defined in assert.
17562// new assert.AssertionError({ message: message,
17563// actual: actual,
17564// expected: expected })
17565
17566var regex = /\s*function\s+([^\(\s]*)\s*/;
17567// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
17568function getName(func) {
17569 if (!util.isFunction(func)) {
17570 return;
17571 }
17572 if (functionsHaveNames) {
17573 return func.name;
17574 }
17575 var str = func.toString();
17576 var match = str.match(regex);
17577 return match && match[1];
17578}
17579assert.AssertionError = function AssertionError(options) {
17580 this.name = 'AssertionError';
17581 this.actual = options.actual;
17582 this.expected = options.expected;
17583 this.operator = options.operator;
17584 if (options.message) {
17585 this.message = options.message;
17586 this.generatedMessage = false;
17587 } else {
17588 this.message = getMessage(this);
17589 this.generatedMessage = true;
17590 }
17591 var stackStartFunction = options.stackStartFunction || fail;
17592 if (Error.captureStackTrace) {
17593 Error.captureStackTrace(this, stackStartFunction);
17594 } else {
17595 // non v8 browsers so we can have a stacktrace
17596 var err = new Error();
17597 if (err.stack) {
17598 var out = err.stack;
17599
17600 // try to strip useless frames
17601 var fn_name = getName(stackStartFunction);
17602 var idx = out.indexOf('\n' + fn_name);
17603 if (idx >= 0) {
17604 // once we have located the function frame
17605 // we need to strip out everything before it (and its line)
17606 var next_line = out.indexOf('\n', idx + 1);
17607 out = out.substring(next_line + 1);
17608 }
17609
17610 this.stack = out;
17611 }
17612 }
17613};
17614
17615// assert.AssertionError instanceof Error
17616util.inherits(assert.AssertionError, Error);
17617
17618function truncate(s, n) {
17619 if (typeof s === 'string') {
17620 return s.length < n ? s : s.slice(0, n);
17621 } else {
17622 return s;
17623 }
17624}
17625function inspect(something) {
17626 if (functionsHaveNames || !util.isFunction(something)) {
17627 return util.inspect(something);
17628 }
17629 var rawname = getName(something);
17630 var name = rawname ? ': ' + rawname : '';
17631 return '[Function' + name + ']';
17632}
17633function getMessage(self) {
17634 return truncate(inspect(self.actual), 128) + ' ' +
17635 self.operator + ' ' +
17636 truncate(inspect(self.expected), 128);
17637}
17638
17639// At present only the three keys mentioned above are used and
17640// understood by the spec. Implementations or sub modules can pass
17641// other keys to the AssertionError's constructor - they will be
17642// ignored.
17643
17644// 3. All of the following functions must throw an AssertionError
17645// when a corresponding condition is not met, with a message that
17646// may be undefined if not provided. All assertion methods provide
17647// both the actual and expected values to the assertion error for
17648// display purposes.
17649
17650function fail(actual, expected, message, operator, stackStartFunction) {
17651 throw new assert.AssertionError({
17652 message: message,
17653 actual: actual,
17654 expected: expected,
17655 operator: operator,
17656 stackStartFunction: stackStartFunction
17657 });
17658}
17659
17660// EXTENSION! allows for well behaved errors defined elsewhere.
17661assert.fail = fail;
17662
17663// 4. Pure assertion tests whether a value is truthy, as determined
17664// by !!guard.
17665// assert.ok(guard, message_opt);
17666// This statement is equivalent to assert.equal(true, !!guard,
17667// message_opt);. To test strictly for the value true, use
17668// assert.strictEqual(true, guard, message_opt);.
17669
17670function ok(value, message) {
17671 if (!value) fail(value, true, message, '==', assert.ok);
17672}
17673assert.ok = ok;
17674
17675// 5. The equality assertion tests shallow, coercive equality with
17676// ==.
17677// assert.equal(actual, expected, message_opt);
17678
17679assert.equal = function equal(actual, expected, message) {
17680 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
17681};
17682
17683// 6. The non-equality assertion tests for whether two objects are not equal
17684// with != assert.notEqual(actual, expected, message_opt);
17685
17686assert.notEqual = function notEqual(actual, expected, message) {
17687 if (actual == expected) {
17688 fail(actual, expected, message, '!=', assert.notEqual);
17689 }
17690};
17691
17692// 7. The equivalence assertion tests a deep equality relation.
17693// assert.deepEqual(actual, expected, message_opt);
17694
17695assert.deepEqual = function deepEqual(actual, expected, message) {
17696 if (!_deepEqual(actual, expected, false)) {
17697 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
17698 }
17699};
17700
17701assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
17702 if (!_deepEqual(actual, expected, true)) {
17703 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
17704 }
17705};
17706
17707function _deepEqual(actual, expected, strict, memos) {
17708 // 7.1. All identical values are equivalent, as determined by ===.
17709 if (actual === expected) {
17710 return true;
17711 } else if (isBuffer(actual) && isBuffer(expected)) {
17712 return compare(actual, expected) === 0;
17713
17714 // 7.2. If the expected value is a Date object, the actual value is
17715 // equivalent if it is also a Date object that refers to the same time.
17716 } else if (util.isDate(actual) && util.isDate(expected)) {
17717 return actual.getTime() === expected.getTime();
17718
17719 // 7.3 If the expected value is a RegExp object, the actual value is
17720 // equivalent if it is also a RegExp object with the same source and
17721 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
17722 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
17723 return actual.source === expected.source &&
17724 actual.global === expected.global &&
17725 actual.multiline === expected.multiline &&
17726 actual.lastIndex === expected.lastIndex &&
17727 actual.ignoreCase === expected.ignoreCase;
17728
17729 // 7.4. Other pairs that do not both pass typeof value == 'object',
17730 // equivalence is determined by ==.
17731 } else if ((actual === null || typeof actual !== 'object') &&
17732 (expected === null || typeof expected !== 'object')) {
17733 return strict ? actual === expected : actual == expected;
17734
17735 // If both values are instances of typed arrays, wrap their underlying
17736 // ArrayBuffers in a Buffer each to increase performance
17737 // This optimization requires the arrays to have the same type as checked by
17738 // Object.prototype.toString (aka pToString). Never perform binary
17739 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
17740 // bit patterns are not identical.
17741 } else if (isView(actual) && isView(expected) &&
17742 pToString(actual) === pToString(expected) &&
17743 !(actual instanceof Float32Array ||
17744 actual instanceof Float64Array)) {
17745 return compare(new Uint8Array(actual.buffer),
17746 new Uint8Array(expected.buffer)) === 0;
17747
17748 // 7.5 For all other Object pairs, including Array objects, equivalence is
17749 // determined by having the same number of owned properties (as verified
17750 // with Object.prototype.hasOwnProperty.call), the same set of keys
17751 // (although not necessarily the same order), equivalent values for every
17752 // corresponding key, and an identical 'prototype' property. Note: this
17753 // accounts for both named and indexed properties on Arrays.
17754 } else if (isBuffer(actual) !== isBuffer(expected)) {
17755 return false;
17756 } else {
17757 memos = memos || {actual: [], expected: []};
17758
17759 var actualIndex = memos.actual.indexOf(actual);
17760 if (actualIndex !== -1) {
17761 if (actualIndex === memos.expected.indexOf(expected)) {
17762 return true;
17763 }
17764 }
17765
17766 memos.actual.push(actual);
17767 memos.expected.push(expected);
17768
17769 return objEquiv(actual, expected, strict, memos);
17770 }
17771}
17772
17773function isArguments(object) {
17774 return Object.prototype.toString.call(object) == '[object Arguments]';
17775}
17776
17777function objEquiv(a, b, strict, actualVisitedObjects) {
17778 if (a === null || a === undefined || b === null || b === undefined)
17779 return false;
17780 // if one is a primitive, the other must be same
17781 if (util.isPrimitive(a) || util.isPrimitive(b))
17782 return a === b;
17783 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
17784 return false;
17785 var aIsArgs = isArguments(a);
17786 var bIsArgs = isArguments(b);
17787 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
17788 return false;
17789 if (aIsArgs) {
17790 a = pSlice.call(a);
17791 b = pSlice.call(b);
17792 return _deepEqual(a, b, strict);
17793 }
17794 var ka = objectKeys(a);
17795 var kb = objectKeys(b);
17796 var key, i;
17797 // having the same number of owned properties (keys incorporates
17798 // hasOwnProperty)
17799 if (ka.length !== kb.length)
17800 return false;
17801 //the same set of keys (although not necessarily the same order),
17802 ka.sort();
17803 kb.sort();
17804 //~~~cheap key test
17805 for (i = ka.length - 1; i >= 0; i--) {
17806 if (ka[i] !== kb[i])
17807 return false;
17808 }
17809 //equivalent values for every corresponding key, and
17810 //~~~possibly expensive deep test
17811 for (i = ka.length - 1; i >= 0; i--) {
17812 key = ka[i];
17813 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
17814 return false;
17815 }
17816 return true;
17817}
17818
17819// 8. The non-equivalence assertion tests for any deep inequality.
17820// assert.notDeepEqual(actual, expected, message_opt);
17821
17822assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
17823 if (_deepEqual(actual, expected, false)) {
17824 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
17825 }
17826};
17827
17828assert.notDeepStrictEqual = notDeepStrictEqual;
17829function notDeepStrictEqual(actual, expected, message) {
17830 if (_deepEqual(actual, expected, true)) {
17831 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
17832 }
17833}
17834
17835
17836// 9. The strict equality assertion tests strict equality, as determined by ===.
17837// assert.strictEqual(actual, expected, message_opt);
17838
17839assert.strictEqual = function strictEqual(actual, expected, message) {
17840 if (actual !== expected) {
17841 fail(actual, expected, message, '===', assert.strictEqual);
17842 }
17843};
17844
17845// 10. The strict non-equality assertion tests for strict inequality, as
17846// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
17847
17848assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
17849 if (actual === expected) {
17850 fail(actual, expected, message, '!==', assert.notStrictEqual);
17851 }
17852};
17853
17854function expectedException(actual, expected) {
17855 if (!actual || !expected) {
17856 return false;
17857 }
17858
17859 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
17860 return expected.test(actual);
17861 }
17862
17863 try {
17864 if (actual instanceof expected) {
17865 return true;
17866 }
17867 } catch (e) {
17868 // Ignore. The instanceof check doesn't work for arrow functions.
17869 }
17870
17871 if (Error.isPrototypeOf(expected)) {
17872 return false;
17873 }
17874
17875 return expected.call({}, actual) === true;
17876}
17877
17878function _tryBlock(block) {
17879 var error;
17880 try {
17881 block();
17882 } catch (e) {
17883 error = e;
17884 }
17885 return error;
17886}
17887
17888function _throws(shouldThrow, block, expected, message) {
17889 var actual;
17890
17891 if (typeof block !== 'function') {
17892 throw new TypeError('"block" argument must be a function');
17893 }
17894
17895 if (typeof expected === 'string') {
17896 message = expected;
17897 expected = null;
17898 }
17899
17900 actual = _tryBlock(block);
17901
17902 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
17903 (message ? ' ' + message : '.');
17904
17905 if (shouldThrow && !actual) {
17906 fail(actual, expected, 'Missing expected exception' + message);
17907 }
17908
17909 var userProvidedMessage = typeof message === 'string';
17910 var isUnwantedException = !shouldThrow && util.isError(actual);
17911 var isUnexpectedException = !shouldThrow && actual && !expected;
17912
17913 if ((isUnwantedException &&
17914 userProvidedMessage &&
17915 expectedException(actual, expected)) ||
17916 isUnexpectedException) {
17917 fail(actual, expected, 'Got unwanted exception' + message);
17918 }
17919
17920 if ((shouldThrow && actual && expected &&
17921 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
17922 throw actual;
17923 }
17924}
17925
17926// 11. Expected to throw an error:
17927// assert.throws(block, Error_opt, message_opt);
17928
17929assert.throws = function(block, /*optional*/error, /*optional*/message) {
17930 _throws(true, block, error, message);
17931};
17932
17933// EXTENSION! This is annoying to write outside this module.
17934assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
17935 _throws(false, block, error, message);
17936};
17937
17938assert.ifError = function(err) { if (err) throw err; };
17939
17940var objectKeys = Object.keys || function (obj) {
17941 var keys = [];
17942 for (var key in obj) {
17943 if (hasOwn.call(obj, key)) keys.push(key);
17944 }
17945 return keys;
17946};
17947
17948}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
17949},{"util/":30}],2:[function(require,module,exports){
17950'use strict'
17951
17952exports.byteLength = byteLength
17953exports.toByteArray = toByteArray
17954exports.fromByteArray = fromByteArray
17955
17956var lookup = []
17957var revLookup = []
17958var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
17959
17960var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
17961for (var i = 0, len = code.length; i < len; ++i) {
17962 lookup[i] = code[i]
17963 revLookup[code.charCodeAt(i)] = i
17964}
17965
17966revLookup['-'.charCodeAt(0)] = 62
17967revLookup['_'.charCodeAt(0)] = 63
17968
17969function placeHoldersCount (b64) {
17970 var len = b64.length
17971 if (len % 4 > 0) {
17972 throw new Error('Invalid string. Length must be a multiple of 4')
17973 }
17974
17975 // the number of equal signs (place holders)
17976 // if there are two placeholders, than the two characters before it
17977 // represent one byte
17978 // if there is only one, then the three characters before it represent 2 bytes
17979 // this is just a cheap hack to not do indexOf twice
17980 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
17981}
17982
17983function byteLength (b64) {
17984 // base64 is 4/3 + up to two characters of the original data
17985 return b64.length * 3 / 4 - placeHoldersCount(b64)
17986}
17987
17988function toByteArray (b64) {
17989 var i, j, l, tmp, placeHolders, arr
17990 var len = b64.length
17991 placeHolders = placeHoldersCount(b64)
17992
17993 arr = new Arr(len * 3 / 4 - placeHolders)
17994
17995 // if there are placeholders, only get up to the last complete 4 chars
17996 l = placeHolders > 0 ? len - 4 : len
17997
17998 var L = 0
17999
18000 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18001 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18002 arr[L++] = (tmp >> 16) & 0xFF
18003 arr[L++] = (tmp >> 8) & 0xFF
18004 arr[L++] = tmp & 0xFF
18005 }
18006
18007 if (placeHolders === 2) {
18008 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18009 arr[L++] = tmp & 0xFF
18010 } else if (placeHolders === 1) {
18011 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18012 arr[L++] = (tmp >> 8) & 0xFF
18013 arr[L++] = tmp & 0xFF
18014 }
18015
18016 return arr
18017}
18018
18019function tripletToBase64 (num) {
18020 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
18021}
18022
18023function encodeChunk (uint8, start, end) {
18024 var tmp
18025 var output = []
18026 for (var i = start; i < end; i += 3) {
18027 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18028 output.push(tripletToBase64(tmp))
18029 }
18030 return output.join('')
18031}
18032
18033function fromByteArray (uint8) {
18034 var tmp
18035 var len = uint8.length
18036 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18037 var output = ''
18038 var parts = []
18039 var maxChunkLength = 16383 // must be multiple of 3
18040
18041 // go through the array every three bytes, we'll deal with trailing stuff later
18042 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18043 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18044 }
18045
18046 // pad the end with zeros, but make sure to not forget the extra bytes
18047 if (extraBytes === 1) {
18048 tmp = uint8[len - 1]
18049 output += lookup[tmp >> 2]
18050 output += lookup[(tmp << 4) & 0x3F]
18051 output += '=='
18052 } else if (extraBytes === 2) {
18053 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18054 output += lookup[tmp >> 10]
18055 output += lookup[(tmp >> 4) & 0x3F]
18056 output += lookup[(tmp << 2) & 0x3F]
18057 output += '='
18058 }
18059
18060 parts.push(output)
18061
18062 return parts.join('')
18063}
18064
18065},{}],3:[function(require,module,exports){
18066
18067},{}],4:[function(require,module,exports){
18068(function (global){
18069'use strict';
18070
18071var buffer = require('buffer');
18072var Buffer = buffer.Buffer;
18073var SlowBuffer = buffer.SlowBuffer;
18074var MAX_LEN = buffer.kMaxLength || 2147483647;
18075exports.alloc = function alloc(size, fill, encoding) {
18076 if (typeof Buffer.alloc === 'function') {
18077 return Buffer.alloc(size, fill, encoding);
18078 }
18079 if (typeof encoding === 'number') {
18080 throw new TypeError('encoding must not be number');
18081 }
18082 if (typeof size !== 'number') {
18083 throw new TypeError('size must be a number');
18084 }
18085 if (size > MAX_LEN) {
18086 throw new RangeError('size is too large');
18087 }
18088 var enc = encoding;
18089 var _fill = fill;
18090 if (_fill === undefined) {
18091 enc = undefined;
18092 _fill = 0;
18093 }
18094 var buf = new Buffer(size);
18095 if (typeof _fill === 'string') {
18096 var fillBuf = new Buffer(_fill, enc);
18097 var flen = fillBuf.length;
18098 var i = -1;
18099 while (++i < size) {
18100 buf[i] = fillBuf[i % flen];
18101 }
18102 } else {
18103 buf.fill(_fill);
18104 }
18105 return buf;
18106}
18107exports.allocUnsafe = function allocUnsafe(size) {
18108 if (typeof Buffer.allocUnsafe === 'function') {
18109 return Buffer.allocUnsafe(size);
18110 }
18111 if (typeof size !== 'number') {
18112 throw new TypeError('size must be a number');
18113 }
18114 if (size > MAX_LEN) {
18115 throw new RangeError('size is too large');
18116 }
18117 return new Buffer(size);
18118}
18119exports.from = function from(value, encodingOrOffset, length) {
18120 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18121 return Buffer.from(value, encodingOrOffset, length);
18122 }
18123 if (typeof value === 'number') {
18124 throw new TypeError('"value" argument must not be a number');
18125 }
18126 if (typeof value === 'string') {
18127 return new Buffer(value, encodingOrOffset);
18128 }
18129 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18130 var offset = encodingOrOffset;
18131 if (arguments.length === 1) {
18132 return new Buffer(value);
18133 }
18134 if (typeof offset === 'undefined') {
18135 offset = 0;
18136 }
18137 var len = length;
18138 if (typeof len === 'undefined') {
18139 len = value.byteLength - offset;
18140 }
18141 if (offset >= value.byteLength) {
18142 throw new RangeError('\'offset\' is out of bounds');
18143 }
18144 if (len > value.byteLength - offset) {
18145 throw new RangeError('\'length\' is out of bounds');
18146 }
18147 return new Buffer(value.slice(offset, offset + len));
18148 }
18149 if (Buffer.isBuffer(value)) {
18150 var out = new Buffer(value.length);
18151 value.copy(out, 0, 0, value.length);
18152 return out;
18153 }
18154 if (value) {
18155 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18156 return new Buffer(value);
18157 }
18158 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18159 return new Buffer(value.data);
18160 }
18161 }
18162
18163 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
18164}
18165exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18166 if (typeof Buffer.allocUnsafeSlow === 'function') {
18167 return Buffer.allocUnsafeSlow(size);
18168 }
18169 if (typeof size !== 'number') {
18170 throw new TypeError('size must be a number');
18171 }
18172 if (size >= MAX_LEN) {
18173 throw new RangeError('size is too large');
18174 }
18175 return new SlowBuffer(size);
18176}
18177
18178}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18179},{"buffer":5}],5:[function(require,module,exports){
18180/*!
18181 * The buffer module from node.js, for the browser.
18182 *
18183 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18184 * @license MIT
18185 */
18186/* eslint-disable no-proto */
18187
18188'use strict'
18189
18190var base64 = require('base64-js')
18191var ieee754 = require('ieee754')
18192
18193exports.Buffer = Buffer
18194exports.SlowBuffer = SlowBuffer
18195exports.INSPECT_MAX_BYTES = 50
18196
18197var K_MAX_LENGTH = 0x7fffffff
18198exports.kMaxLength = K_MAX_LENGTH
18199
18200/**
18201 * If `Buffer.TYPED_ARRAY_SUPPORT`:
18202 * === true Use Uint8Array implementation (fastest)
18203 * === false Print warning and recommend using `buffer` v4.x which has an Object
18204 * implementation (most compatible, even IE6)
18205 *
18206 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
18207 * Opera 11.6+, iOS 4.2+.
18208 *
18209 * We report that the browser does not support typed arrays if the are not subclassable
18210 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
18211 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
18212 * for __proto__ and has a buggy typed array implementation.
18213 */
18214Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
18215
18216if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
18217 typeof console.error === 'function') {
18218 console.error(
18219 'This browser lacks typed array (Uint8Array) support which is required by ' +
18220 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
18221 )
18222}
18223
18224function typedArraySupport () {
18225 // Can typed array instances can be augmented?
18226 try {
18227 var arr = new Uint8Array(1)
18228 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
18229 return arr.foo() === 42
18230 } catch (e) {
18231 return false
18232 }
18233}
18234
18235function createBuffer (length) {
18236 if (length > K_MAX_LENGTH) {
18237 throw new RangeError('Invalid typed array length')
18238 }
18239 // Return an augmented `Uint8Array` instance
18240 var buf = new Uint8Array(length)
18241 buf.__proto__ = Buffer.prototype
18242 return buf
18243}
18244
18245/**
18246 * The Buffer constructor returns instances of `Uint8Array` that have their
18247 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
18248 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
18249 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
18250 * returns a single octet.
18251 *
18252 * The `Uint8Array` prototype remains unmodified.
18253 */
18254
18255function Buffer (arg, encodingOrOffset, length) {
18256 // Common case.
18257 if (typeof arg === 'number') {
18258 if (typeof encodingOrOffset === 'string') {
18259 throw new Error(
18260 'If encoding is specified then the first argument must be a string'
18261 )
18262 }
18263 return allocUnsafe(arg)
18264 }
18265 return from(arg, encodingOrOffset, length)
18266}
18267
18268// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
18269if (typeof Symbol !== 'undefined' && Symbol.species &&
18270 Buffer[Symbol.species] === Buffer) {
18271 Object.defineProperty(Buffer, Symbol.species, {
18272 value: null,
18273 configurable: true,
18274 enumerable: false,
18275 writable: false
18276 })
18277}
18278
18279Buffer.poolSize = 8192 // not used by this implementation
18280
18281function from (value, encodingOrOffset, length) {
18282 if (typeof value === 'number') {
18283 throw new TypeError('"value" argument must not be a number')
18284 }
18285
18286 if (value instanceof ArrayBuffer) {
18287 return fromArrayBuffer(value, encodingOrOffset, length)
18288 }
18289
18290 if (typeof value === 'string') {
18291 return fromString(value, encodingOrOffset)
18292 }
18293
18294 return fromObject(value)
18295}
18296
18297/**
18298 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
18299 * if value is a number.
18300 * Buffer.from(str[, encoding])
18301 * Buffer.from(array)
18302 * Buffer.from(buffer)
18303 * Buffer.from(arrayBuffer[, byteOffset[, length]])
18304 **/
18305Buffer.from = function (value, encodingOrOffset, length) {
18306 return from(value, encodingOrOffset, length)
18307}
18308
18309// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
18310// https://github.com/feross/buffer/pull/148
18311Buffer.prototype.__proto__ = Uint8Array.prototype
18312Buffer.__proto__ = Uint8Array
18313
18314function assertSize (size) {
18315 if (typeof size !== 'number') {
18316 throw new TypeError('"size" argument must be a number')
18317 } else if (size < 0) {
18318 throw new RangeError('"size" argument must not be negative')
18319 }
18320}
18321
18322function alloc (size, fill, encoding) {
18323 assertSize(size)
18324 if (size <= 0) {
18325 return createBuffer(size)
18326 }
18327 if (fill !== undefined) {
18328 // Only pay attention to encoding if it's a string. This
18329 // prevents accidentally sending in a number that would
18330 // be interpretted as a start offset.
18331 return typeof encoding === 'string'
18332 ? createBuffer(size).fill(fill, encoding)
18333 : createBuffer(size).fill(fill)
18334 }
18335 return createBuffer(size)
18336}
18337
18338/**
18339 * Creates a new filled Buffer instance.
18340 * alloc(size[, fill[, encoding]])
18341 **/
18342Buffer.alloc = function (size, fill, encoding) {
18343 return alloc(size, fill, encoding)
18344}
18345
18346function allocUnsafe (size) {
18347 assertSize(size)
18348 return createBuffer(size < 0 ? 0 : checked(size) | 0)
18349}
18350
18351/**
18352 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
18353 * */
18354Buffer.allocUnsafe = function (size) {
18355 return allocUnsafe(size)
18356}
18357/**
18358 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
18359 */
18360Buffer.allocUnsafeSlow = function (size) {
18361 return allocUnsafe(size)
18362}
18363
18364function fromString (string, encoding) {
18365 if (typeof encoding !== 'string' || encoding === '') {
18366 encoding = 'utf8'
18367 }
18368
18369 if (!Buffer.isEncoding(encoding)) {
18370 throw new TypeError('"encoding" must be a valid string encoding')
18371 }
18372
18373 var length = byteLength(string, encoding) | 0
18374 var buf = createBuffer(length)
18375
18376 var actual = buf.write(string, encoding)
18377
18378 if (actual !== length) {
18379 // Writing a hex string, for example, that contains invalid characters will
18380 // cause everything after the first invalid character to be ignored. (e.g.
18381 // 'abxxcd' will be treated as 'ab')
18382 buf = buf.slice(0, actual)
18383 }
18384
18385 return buf
18386}
18387
18388function fromArrayLike (array) {
18389 var length = array.length < 0 ? 0 : checked(array.length) | 0
18390 var buf = createBuffer(length)
18391 for (var i = 0; i < length; i += 1) {
18392 buf[i] = array[i] & 255
18393 }
18394 return buf
18395}
18396
18397function fromArrayBuffer (array, byteOffset, length) {
18398 if (byteOffset < 0 || array.byteLength < byteOffset) {
18399 throw new RangeError('\'offset\' is out of bounds')
18400 }
18401
18402 if (array.byteLength < byteOffset + (length || 0)) {
18403 throw new RangeError('\'length\' is out of bounds')
18404 }
18405
18406 var buf
18407 if (byteOffset === undefined && length === undefined) {
18408 buf = new Uint8Array(array)
18409 } else if (length === undefined) {
18410 buf = new Uint8Array(array, byteOffset)
18411 } else {
18412 buf = new Uint8Array(array, byteOffset, length)
18413 }
18414
18415 // Return an augmented `Uint8Array` instance
18416 buf.__proto__ = Buffer.prototype
18417 return buf
18418}
18419
18420function fromObject (obj) {
18421 if (Buffer.isBuffer(obj)) {
18422 var len = checked(obj.length) | 0
18423 var buf = createBuffer(len)
18424
18425 if (buf.length === 0) {
18426 return buf
18427 }
18428
18429 obj.copy(buf, 0, 0, len)
18430 return buf
18431 }
18432
18433 if (obj) {
18434 if (ArrayBuffer.isView(obj) || 'length' in obj) {
18435 if (typeof obj.length !== 'number' || isnan(obj.length)) {
18436 return createBuffer(0)
18437 }
18438 return fromArrayLike(obj)
18439 }
18440
18441 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
18442 return fromArrayLike(obj.data)
18443 }
18444 }
18445
18446 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
18447}
18448
18449function checked (length) {
18450 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
18451 // length is NaN (which is otherwise coerced to zero.)
18452 if (length >= K_MAX_LENGTH) {
18453 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
18454 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
18455 }
18456 return length | 0
18457}
18458
18459function SlowBuffer (length) {
18460 if (+length != length) { // eslint-disable-line eqeqeq
18461 length = 0
18462 }
18463 return Buffer.alloc(+length)
18464}
18465
18466Buffer.isBuffer = function isBuffer (b) {
18467 return b != null && b._isBuffer === true
18468}
18469
18470Buffer.compare = function compare (a, b) {
18471 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
18472 throw new TypeError('Arguments must be Buffers')
18473 }
18474
18475 if (a === b) return 0
18476
18477 var x = a.length
18478 var y = b.length
18479
18480 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18481 if (a[i] !== b[i]) {
18482 x = a[i]
18483 y = b[i]
18484 break
18485 }
18486 }
18487
18488 if (x < y) return -1
18489 if (y < x) return 1
18490 return 0
18491}
18492
18493Buffer.isEncoding = function isEncoding (encoding) {
18494 switch (String(encoding).toLowerCase()) {
18495 case 'hex':
18496 case 'utf8':
18497 case 'utf-8':
18498 case 'ascii':
18499 case 'latin1':
18500 case 'binary':
18501 case 'base64':
18502 case 'ucs2':
18503 case 'ucs-2':
18504 case 'utf16le':
18505 case 'utf-16le':
18506 return true
18507 default:
18508 return false
18509 }
18510}
18511
18512Buffer.concat = function concat (list, length) {
18513 if (!Array.isArray(list)) {
18514 throw new TypeError('"list" argument must be an Array of Buffers')
18515 }
18516
18517 if (list.length === 0) {
18518 return Buffer.alloc(0)
18519 }
18520
18521 var i
18522 if (length === undefined) {
18523 length = 0
18524 for (i = 0; i < list.length; ++i) {
18525 length += list[i].length
18526 }
18527 }
18528
18529 var buffer = Buffer.allocUnsafe(length)
18530 var pos = 0
18531 for (i = 0; i < list.length; ++i) {
18532 var buf = list[i]
18533 if (!Buffer.isBuffer(buf)) {
18534 throw new TypeError('"list" argument must be an Array of Buffers')
18535 }
18536 buf.copy(buffer, pos)
18537 pos += buf.length
18538 }
18539 return buffer
18540}
18541
18542function byteLength (string, encoding) {
18543 if (Buffer.isBuffer(string)) {
18544 return string.length
18545 }
18546 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
18547 return string.byteLength
18548 }
18549 if (typeof string !== 'string') {
18550 string = '' + string
18551 }
18552
18553 var len = string.length
18554 if (len === 0) return 0
18555
18556 // Use a for loop to avoid recursion
18557 var loweredCase = false
18558 for (;;) {
18559 switch (encoding) {
18560 case 'ascii':
18561 case 'latin1':
18562 case 'binary':
18563 return len
18564 case 'utf8':
18565 case 'utf-8':
18566 case undefined:
18567 return utf8ToBytes(string).length
18568 case 'ucs2':
18569 case 'ucs-2':
18570 case 'utf16le':
18571 case 'utf-16le':
18572 return len * 2
18573 case 'hex':
18574 return len >>> 1
18575 case 'base64':
18576 return base64ToBytes(string).length
18577 default:
18578 if (loweredCase) return utf8ToBytes(string).length // assume utf8
18579 encoding = ('' + encoding).toLowerCase()
18580 loweredCase = true
18581 }
18582 }
18583}
18584Buffer.byteLength = byteLength
18585
18586function slowToString (encoding, start, end) {
18587 var loweredCase = false
18588
18589 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
18590 // property of a typed array.
18591
18592 // This behaves neither like String nor Uint8Array in that we set start/end
18593 // to their upper/lower bounds if the value passed is out of range.
18594 // undefined is handled specially as per ECMA-262 6th Edition,
18595 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
18596 if (start === undefined || start < 0) {
18597 start = 0
18598 }
18599 // Return early if start > this.length. Done here to prevent potential uint32
18600 // coercion fail below.
18601 if (start > this.length) {
18602 return ''
18603 }
18604
18605 if (end === undefined || end > this.length) {
18606 end = this.length
18607 }
18608
18609 if (end <= 0) {
18610 return ''
18611 }
18612
18613 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
18614 end >>>= 0
18615 start >>>= 0
18616
18617 if (end <= start) {
18618 return ''
18619 }
18620
18621 if (!encoding) encoding = 'utf8'
18622
18623 while (true) {
18624 switch (encoding) {
18625 case 'hex':
18626 return hexSlice(this, start, end)
18627
18628 case 'utf8':
18629 case 'utf-8':
18630 return utf8Slice(this, start, end)
18631
18632 case 'ascii':
18633 return asciiSlice(this, start, end)
18634
18635 case 'latin1':
18636 case 'binary':
18637 return latin1Slice(this, start, end)
18638
18639 case 'base64':
18640 return base64Slice(this, start, end)
18641
18642 case 'ucs2':
18643 case 'ucs-2':
18644 case 'utf16le':
18645 case 'utf-16le':
18646 return utf16leSlice(this, start, end)
18647
18648 default:
18649 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
18650 encoding = (encoding + '').toLowerCase()
18651 loweredCase = true
18652 }
18653 }
18654}
18655
18656// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
18657// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
18658// reliably in a browserify context because there could be multiple different
18659// copies of the 'buffer' package in use. This method works even for Buffer
18660// instances that were created from another copy of the `buffer` package.
18661// See: https://github.com/feross/buffer/issues/154
18662Buffer.prototype._isBuffer = true
18663
18664function swap (b, n, m) {
18665 var i = b[n]
18666 b[n] = b[m]
18667 b[m] = i
18668}
18669
18670Buffer.prototype.swap16 = function swap16 () {
18671 var len = this.length
18672 if (len % 2 !== 0) {
18673 throw new RangeError('Buffer size must be a multiple of 16-bits')
18674 }
18675 for (var i = 0; i < len; i += 2) {
18676 swap(this, i, i + 1)
18677 }
18678 return this
18679}
18680
18681Buffer.prototype.swap32 = function swap32 () {
18682 var len = this.length
18683 if (len % 4 !== 0) {
18684 throw new RangeError('Buffer size must be a multiple of 32-bits')
18685 }
18686 for (var i = 0; i < len; i += 4) {
18687 swap(this, i, i + 3)
18688 swap(this, i + 1, i + 2)
18689 }
18690 return this
18691}
18692
18693Buffer.prototype.swap64 = function swap64 () {
18694 var len = this.length
18695 if (len % 8 !== 0) {
18696 throw new RangeError('Buffer size must be a multiple of 64-bits')
18697 }
18698 for (var i = 0; i < len; i += 8) {
18699 swap(this, i, i + 7)
18700 swap(this, i + 1, i + 6)
18701 swap(this, i + 2, i + 5)
18702 swap(this, i + 3, i + 4)
18703 }
18704 return this
18705}
18706
18707Buffer.prototype.toString = function toString () {
18708 var length = this.length
18709 if (length === 0) return ''
18710 if (arguments.length === 0) return utf8Slice(this, 0, length)
18711 return slowToString.apply(this, arguments)
18712}
18713
18714Buffer.prototype.equals = function equals (b) {
18715 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
18716 if (this === b) return true
18717 return Buffer.compare(this, b) === 0
18718}
18719
18720Buffer.prototype.inspect = function inspect () {
18721 var str = ''
18722 var max = exports.INSPECT_MAX_BYTES
18723 if (this.length > 0) {
18724 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
18725 if (this.length > max) str += ' ... '
18726 }
18727 return '<Buffer ' + str + '>'
18728}
18729
18730Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
18731 if (!Buffer.isBuffer(target)) {
18732 throw new TypeError('Argument must be a Buffer')
18733 }
18734
18735 if (start === undefined) {
18736 start = 0
18737 }
18738 if (end === undefined) {
18739 end = target ? target.length : 0
18740 }
18741 if (thisStart === undefined) {
18742 thisStart = 0
18743 }
18744 if (thisEnd === undefined) {
18745 thisEnd = this.length
18746 }
18747
18748 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
18749 throw new RangeError('out of range index')
18750 }
18751
18752 if (thisStart >= thisEnd && start >= end) {
18753 return 0
18754 }
18755 if (thisStart >= thisEnd) {
18756 return -1
18757 }
18758 if (start >= end) {
18759 return 1
18760 }
18761
18762 start >>>= 0
18763 end >>>= 0
18764 thisStart >>>= 0
18765 thisEnd >>>= 0
18766
18767 if (this === target) return 0
18768
18769 var x = thisEnd - thisStart
18770 var y = end - start
18771 var len = Math.min(x, y)
18772
18773 var thisCopy = this.slice(thisStart, thisEnd)
18774 var targetCopy = target.slice(start, end)
18775
18776 for (var i = 0; i < len; ++i) {
18777 if (thisCopy[i] !== targetCopy[i]) {
18778 x = thisCopy[i]
18779 y = targetCopy[i]
18780 break
18781 }
18782 }
18783
18784 if (x < y) return -1
18785 if (y < x) return 1
18786 return 0
18787}
18788
18789// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
18790// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
18791//
18792// Arguments:
18793// - buffer - a Buffer to search
18794// - val - a string, Buffer, or number
18795// - byteOffset - an index into `buffer`; will be clamped to an int32
18796// - encoding - an optional encoding, relevant is val is a string
18797// - dir - true for indexOf, false for lastIndexOf
18798function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
18799 // Empty buffer means no match
18800 if (buffer.length === 0) return -1
18801
18802 // Normalize byteOffset
18803 if (typeof byteOffset === 'string') {
18804 encoding = byteOffset
18805 byteOffset = 0
18806 } else if (byteOffset > 0x7fffffff) {
18807 byteOffset = 0x7fffffff
18808 } else if (byteOffset < -0x80000000) {
18809 byteOffset = -0x80000000
18810 }
18811 byteOffset = +byteOffset // Coerce to Number.
18812 if (isNaN(byteOffset)) {
18813 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
18814 byteOffset = dir ? 0 : (buffer.length - 1)
18815 }
18816
18817 // Normalize byteOffset: negative offsets start from the end of the buffer
18818 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
18819 if (byteOffset >= buffer.length) {
18820 if (dir) return -1
18821 else byteOffset = buffer.length - 1
18822 } else if (byteOffset < 0) {
18823 if (dir) byteOffset = 0
18824 else return -1
18825 }
18826
18827 // Normalize val
18828 if (typeof val === 'string') {
18829 val = Buffer.from(val, encoding)
18830 }
18831
18832 // Finally, search either indexOf (if dir is true) or lastIndexOf
18833 if (Buffer.isBuffer(val)) {
18834 // Special case: looking for empty string/buffer always fails
18835 if (val.length === 0) {
18836 return -1
18837 }
18838 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
18839 } else if (typeof val === 'number') {
18840 val = val & 0xFF // Search for a byte value [0-255]
18841 if (typeof Uint8Array.prototype.indexOf === 'function') {
18842 if (dir) {
18843 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
18844 } else {
18845 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
18846 }
18847 }
18848 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
18849 }
18850
18851 throw new TypeError('val must be string, number or Buffer')
18852}
18853
18854function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
18855 var indexSize = 1
18856 var arrLength = arr.length
18857 var valLength = val.length
18858
18859 if (encoding !== undefined) {
18860 encoding = String(encoding).toLowerCase()
18861 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
18862 encoding === 'utf16le' || encoding === 'utf-16le') {
18863 if (arr.length < 2 || val.length < 2) {
18864 return -1
18865 }
18866 indexSize = 2
18867 arrLength /= 2
18868 valLength /= 2
18869 byteOffset /= 2
18870 }
18871 }
18872
18873 function read (buf, i) {
18874 if (indexSize === 1) {
18875 return buf[i]
18876 } else {
18877 return buf.readUInt16BE(i * indexSize)
18878 }
18879 }
18880
18881 var i
18882 if (dir) {
18883 var foundIndex = -1
18884 for (i = byteOffset; i < arrLength; i++) {
18885 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
18886 if (foundIndex === -1) foundIndex = i
18887 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
18888 } else {
18889 if (foundIndex !== -1) i -= i - foundIndex
18890 foundIndex = -1
18891 }
18892 }
18893 } else {
18894 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
18895 for (i = byteOffset; i >= 0; i--) {
18896 var found = true
18897 for (var j = 0; j < valLength; j++) {
18898 if (read(arr, i + j) !== read(val, j)) {
18899 found = false
18900 break
18901 }
18902 }
18903 if (found) return i
18904 }
18905 }
18906
18907 return -1
18908}
18909
18910Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
18911 return this.indexOf(val, byteOffset, encoding) !== -1
18912}
18913
18914Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
18915 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
18916}
18917
18918Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
18919 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
18920}
18921
18922function hexWrite (buf, string, offset, length) {
18923 offset = Number(offset) || 0
18924 var remaining = buf.length - offset
18925 if (!length) {
18926 length = remaining
18927 } else {
18928 length = Number(length)
18929 if (length > remaining) {
18930 length = remaining
18931 }
18932 }
18933
18934 // must be an even number of digits
18935 var strLen = string.length
18936 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
18937
18938 if (length > strLen / 2) {
18939 length = strLen / 2
18940 }
18941 for (var i = 0; i < length; ++i) {
18942 var parsed = parseInt(string.substr(i * 2, 2), 16)
18943 if (isNaN(parsed)) return i
18944 buf[offset + i] = parsed
18945 }
18946 return i
18947}
18948
18949function utf8Write (buf, string, offset, length) {
18950 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
18951}
18952
18953function asciiWrite (buf, string, offset, length) {
18954 return blitBuffer(asciiToBytes(string), buf, offset, length)
18955}
18956
18957function latin1Write (buf, string, offset, length) {
18958 return asciiWrite(buf, string, offset, length)
18959}
18960
18961function base64Write (buf, string, offset, length) {
18962 return blitBuffer(base64ToBytes(string), buf, offset, length)
18963}
18964
18965function ucs2Write (buf, string, offset, length) {
18966 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
18967}
18968
18969Buffer.prototype.write = function write (string, offset, length, encoding) {
18970 // Buffer#write(string)
18971 if (offset === undefined) {
18972 encoding = 'utf8'
18973 length = this.length
18974 offset = 0
18975 // Buffer#write(string, encoding)
18976 } else if (length === undefined && typeof offset === 'string') {
18977 encoding = offset
18978 length = this.length
18979 offset = 0
18980 // Buffer#write(string, offset[, length][, encoding])
18981 } else if (isFinite(offset)) {
18982 offset = offset >>> 0
18983 if (isFinite(length)) {
18984 length = length >>> 0
18985 if (encoding === undefined) encoding = 'utf8'
18986 } else {
18987 encoding = length
18988 length = undefined
18989 }
18990 } else {
18991 throw new Error(
18992 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
18993 )
18994 }
18995
18996 var remaining = this.length - offset
18997 if (length === undefined || length > remaining) length = remaining
18998
18999 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19000 throw new RangeError('Attempt to write outside buffer bounds')
19001 }
19002
19003 if (!encoding) encoding = 'utf8'
19004
19005 var loweredCase = false
19006 for (;;) {
19007 switch (encoding) {
19008 case 'hex':
19009 return hexWrite(this, string, offset, length)
19010
19011 case 'utf8':
19012 case 'utf-8':
19013 return utf8Write(this, string, offset, length)
19014
19015 case 'ascii':
19016 return asciiWrite(this, string, offset, length)
19017
19018 case 'latin1':
19019 case 'binary':
19020 return latin1Write(this, string, offset, length)
19021
19022 case 'base64':
19023 // Warning: maxLength not taken into account in base64Write
19024 return base64Write(this, string, offset, length)
19025
19026 case 'ucs2':
19027 case 'ucs-2':
19028 case 'utf16le':
19029 case 'utf-16le':
19030 return ucs2Write(this, string, offset, length)
19031
19032 default:
19033 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19034 encoding = ('' + encoding).toLowerCase()
19035 loweredCase = true
19036 }
19037 }
19038}
19039
19040Buffer.prototype.toJSON = function toJSON () {
19041 return {
19042 type: 'Buffer',
19043 data: Array.prototype.slice.call(this._arr || this, 0)
19044 }
19045}
19046
19047function base64Slice (buf, start, end) {
19048 if (start === 0 && end === buf.length) {
19049 return base64.fromByteArray(buf)
19050 } else {
19051 return base64.fromByteArray(buf.slice(start, end))
19052 }
19053}
19054
19055function utf8Slice (buf, start, end) {
19056 end = Math.min(buf.length, end)
19057 var res = []
19058
19059 var i = start
19060 while (i < end) {
19061 var firstByte = buf[i]
19062 var codePoint = null
19063 var bytesPerSequence = (firstByte > 0xEF) ? 4
19064 : (firstByte > 0xDF) ? 3
19065 : (firstByte > 0xBF) ? 2
19066 : 1
19067
19068 if (i + bytesPerSequence <= end) {
19069 var secondByte, thirdByte, fourthByte, tempCodePoint
19070
19071 switch (bytesPerSequence) {
19072 case 1:
19073 if (firstByte < 0x80) {
19074 codePoint = firstByte
19075 }
19076 break
19077 case 2:
19078 secondByte = buf[i + 1]
19079 if ((secondByte & 0xC0) === 0x80) {
19080 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19081 if (tempCodePoint > 0x7F) {
19082 codePoint = tempCodePoint
19083 }
19084 }
19085 break
19086 case 3:
19087 secondByte = buf[i + 1]
19088 thirdByte = buf[i + 2]
19089 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19090 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19091 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19092 codePoint = tempCodePoint
19093 }
19094 }
19095 break
19096 case 4:
19097 secondByte = buf[i + 1]
19098 thirdByte = buf[i + 2]
19099 fourthByte = buf[i + 3]
19100 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19101 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19102 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19103 codePoint = tempCodePoint
19104 }
19105 }
19106 }
19107 }
19108
19109 if (codePoint === null) {
19110 // we did not generate a valid codePoint so insert a
19111 // replacement char (U+FFFD) and advance only 1 byte
19112 codePoint = 0xFFFD
19113 bytesPerSequence = 1
19114 } else if (codePoint > 0xFFFF) {
19115 // encode to utf16 (surrogate pair dance)
19116 codePoint -= 0x10000
19117 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19118 codePoint = 0xDC00 | codePoint & 0x3FF
19119 }
19120
19121 res.push(codePoint)
19122 i += bytesPerSequence
19123 }
19124
19125 return decodeCodePointsArray(res)
19126}
19127
19128// Based on http://stackoverflow.com/a/22747272/680742, the browser with
19129// the lowest limit is Chrome, with 0x10000 args.
19130// We go 1 magnitude less, for safety
19131var MAX_ARGUMENTS_LENGTH = 0x1000
19132
19133function decodeCodePointsArray (codePoints) {
19134 var len = codePoints.length
19135 if (len <= MAX_ARGUMENTS_LENGTH) {
19136 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
19137 }
19138
19139 // Decode in chunks to avoid "call stack size exceeded".
19140 var res = ''
19141 var i = 0
19142 while (i < len) {
19143 res += String.fromCharCode.apply(
19144 String,
19145 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19146 )
19147 }
19148 return res
19149}
19150
19151function asciiSlice (buf, start, end) {
19152 var ret = ''
19153 end = Math.min(buf.length, end)
19154
19155 for (var i = start; i < end; ++i) {
19156 ret += String.fromCharCode(buf[i] & 0x7F)
19157 }
19158 return ret
19159}
19160
19161function latin1Slice (buf, start, end) {
19162 var ret = ''
19163 end = Math.min(buf.length, end)
19164
19165 for (var i = start; i < end; ++i) {
19166 ret += String.fromCharCode(buf[i])
19167 }
19168 return ret
19169}
19170
19171function hexSlice (buf, start, end) {
19172 var len = buf.length
19173
19174 if (!start || start < 0) start = 0
19175 if (!end || end < 0 || end > len) end = len
19176
19177 var out = ''
19178 for (var i = start; i < end; ++i) {
19179 out += toHex(buf[i])
19180 }
19181 return out
19182}
19183
19184function utf16leSlice (buf, start, end) {
19185 var bytes = buf.slice(start, end)
19186 var res = ''
19187 for (var i = 0; i < bytes.length; i += 2) {
19188 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
19189 }
19190 return res
19191}
19192
19193Buffer.prototype.slice = function slice (start, end) {
19194 var len = this.length
19195 start = ~~start
19196 end = end === undefined ? len : ~~end
19197
19198 if (start < 0) {
19199 start += len
19200 if (start < 0) start = 0
19201 } else if (start > len) {
19202 start = len
19203 }
19204
19205 if (end < 0) {
19206 end += len
19207 if (end < 0) end = 0
19208 } else if (end > len) {
19209 end = len
19210 }
19211
19212 if (end < start) end = start
19213
19214 var newBuf = this.subarray(start, end)
19215 // Return an augmented `Uint8Array` instance
19216 newBuf.__proto__ = Buffer.prototype
19217 return newBuf
19218}
19219
19220/*
19221 * Need to make sure that buffer isn't trying to write out of bounds.
19222 */
19223function checkOffset (offset, ext, length) {
19224 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
19225 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
19226}
19227
19228Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
19229 offset = offset >>> 0
19230 byteLength = byteLength >>> 0
19231 if (!noAssert) checkOffset(offset, byteLength, this.length)
19232
19233 var val = this[offset]
19234 var mul = 1
19235 var i = 0
19236 while (++i < byteLength && (mul *= 0x100)) {
19237 val += this[offset + i] * mul
19238 }
19239
19240 return val
19241}
19242
19243Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
19244 offset = offset >>> 0
19245 byteLength = byteLength >>> 0
19246 if (!noAssert) {
19247 checkOffset(offset, byteLength, this.length)
19248 }
19249
19250 var val = this[offset + --byteLength]
19251 var mul = 1
19252 while (byteLength > 0 && (mul *= 0x100)) {
19253 val += this[offset + --byteLength] * mul
19254 }
19255
19256 return val
19257}
19258
19259Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
19260 offset = offset >>> 0
19261 if (!noAssert) checkOffset(offset, 1, this.length)
19262 return this[offset]
19263}
19264
19265Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
19266 offset = offset >>> 0
19267 if (!noAssert) checkOffset(offset, 2, this.length)
19268 return this[offset] | (this[offset + 1] << 8)
19269}
19270
19271Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
19272 offset = offset >>> 0
19273 if (!noAssert) checkOffset(offset, 2, this.length)
19274 return (this[offset] << 8) | this[offset + 1]
19275}
19276
19277Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
19278 offset = offset >>> 0
19279 if (!noAssert) checkOffset(offset, 4, this.length)
19280
19281 return ((this[offset]) |
19282 (this[offset + 1] << 8) |
19283 (this[offset + 2] << 16)) +
19284 (this[offset + 3] * 0x1000000)
19285}
19286
19287Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
19288 offset = offset >>> 0
19289 if (!noAssert) checkOffset(offset, 4, this.length)
19290
19291 return (this[offset] * 0x1000000) +
19292 ((this[offset + 1] << 16) |
19293 (this[offset + 2] << 8) |
19294 this[offset + 3])
19295}
19296
19297Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
19298 offset = offset >>> 0
19299 byteLength = byteLength >>> 0
19300 if (!noAssert) checkOffset(offset, byteLength, this.length)
19301
19302 var val = this[offset]
19303 var mul = 1
19304 var i = 0
19305 while (++i < byteLength && (mul *= 0x100)) {
19306 val += this[offset + i] * mul
19307 }
19308 mul *= 0x80
19309
19310 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19311
19312 return val
19313}
19314
19315Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
19316 offset = offset >>> 0
19317 byteLength = byteLength >>> 0
19318 if (!noAssert) checkOffset(offset, byteLength, this.length)
19319
19320 var i = byteLength
19321 var mul = 1
19322 var val = this[offset + --i]
19323 while (i > 0 && (mul *= 0x100)) {
19324 val += this[offset + --i] * mul
19325 }
19326 mul *= 0x80
19327
19328 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19329
19330 return val
19331}
19332
19333Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
19334 offset = offset >>> 0
19335 if (!noAssert) checkOffset(offset, 1, this.length)
19336 if (!(this[offset] & 0x80)) return (this[offset])
19337 return ((0xff - this[offset] + 1) * -1)
19338}
19339
19340Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
19341 offset = offset >>> 0
19342 if (!noAssert) checkOffset(offset, 2, this.length)
19343 var val = this[offset] | (this[offset + 1] << 8)
19344 return (val & 0x8000) ? val | 0xFFFF0000 : val
19345}
19346
19347Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
19348 offset = offset >>> 0
19349 if (!noAssert) checkOffset(offset, 2, this.length)
19350 var val = this[offset + 1] | (this[offset] << 8)
19351 return (val & 0x8000) ? val | 0xFFFF0000 : val
19352}
19353
19354Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
19355 offset = offset >>> 0
19356 if (!noAssert) checkOffset(offset, 4, this.length)
19357
19358 return (this[offset]) |
19359 (this[offset + 1] << 8) |
19360 (this[offset + 2] << 16) |
19361 (this[offset + 3] << 24)
19362}
19363
19364Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
19365 offset = offset >>> 0
19366 if (!noAssert) checkOffset(offset, 4, this.length)
19367
19368 return (this[offset] << 24) |
19369 (this[offset + 1] << 16) |
19370 (this[offset + 2] << 8) |
19371 (this[offset + 3])
19372}
19373
19374Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
19375 offset = offset >>> 0
19376 if (!noAssert) checkOffset(offset, 4, this.length)
19377 return ieee754.read(this, offset, true, 23, 4)
19378}
19379
19380Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
19381 offset = offset >>> 0
19382 if (!noAssert) checkOffset(offset, 4, this.length)
19383 return ieee754.read(this, offset, false, 23, 4)
19384}
19385
19386Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
19387 offset = offset >>> 0
19388 if (!noAssert) checkOffset(offset, 8, this.length)
19389 return ieee754.read(this, offset, true, 52, 8)
19390}
19391
19392Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
19393 offset = offset >>> 0
19394 if (!noAssert) checkOffset(offset, 8, this.length)
19395 return ieee754.read(this, offset, false, 52, 8)
19396}
19397
19398function checkInt (buf, value, offset, ext, max, min) {
19399 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
19400 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
19401 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19402}
19403
19404Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
19405 value = +value
19406 offset = offset >>> 0
19407 byteLength = byteLength >>> 0
19408 if (!noAssert) {
19409 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19410 checkInt(this, value, offset, byteLength, maxBytes, 0)
19411 }
19412
19413 var mul = 1
19414 var i = 0
19415 this[offset] = value & 0xFF
19416 while (++i < byteLength && (mul *= 0x100)) {
19417 this[offset + i] = (value / mul) & 0xFF
19418 }
19419
19420 return offset + byteLength
19421}
19422
19423Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
19424 value = +value
19425 offset = offset >>> 0
19426 byteLength = byteLength >>> 0
19427 if (!noAssert) {
19428 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19429 checkInt(this, value, offset, byteLength, maxBytes, 0)
19430 }
19431
19432 var i = byteLength - 1
19433 var mul = 1
19434 this[offset + i] = value & 0xFF
19435 while (--i >= 0 && (mul *= 0x100)) {
19436 this[offset + i] = (value / mul) & 0xFF
19437 }
19438
19439 return offset + byteLength
19440}
19441
19442Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
19443 value = +value
19444 offset = offset >>> 0
19445 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
19446 this[offset] = (value & 0xff)
19447 return offset + 1
19448}
19449
19450Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
19451 value = +value
19452 offset = offset >>> 0
19453 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19454 this[offset] = (value & 0xff)
19455 this[offset + 1] = (value >>> 8)
19456 return offset + 2
19457}
19458
19459Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
19460 value = +value
19461 offset = offset >>> 0
19462 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19463 this[offset] = (value >>> 8)
19464 this[offset + 1] = (value & 0xff)
19465 return offset + 2
19466}
19467
19468Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
19469 value = +value
19470 offset = offset >>> 0
19471 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19472 this[offset + 3] = (value >>> 24)
19473 this[offset + 2] = (value >>> 16)
19474 this[offset + 1] = (value >>> 8)
19475 this[offset] = (value & 0xff)
19476 return offset + 4
19477}
19478
19479Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
19480 value = +value
19481 offset = offset >>> 0
19482 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19483 this[offset] = (value >>> 24)
19484 this[offset + 1] = (value >>> 16)
19485 this[offset + 2] = (value >>> 8)
19486 this[offset + 3] = (value & 0xff)
19487 return offset + 4
19488}
19489
19490Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
19491 value = +value
19492 offset = offset >>> 0
19493 if (!noAssert) {
19494 var limit = Math.pow(2, (8 * byteLength) - 1)
19495
19496 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19497 }
19498
19499 var i = 0
19500 var mul = 1
19501 var sub = 0
19502 this[offset] = value & 0xFF
19503 while (++i < byteLength && (mul *= 0x100)) {
19504 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
19505 sub = 1
19506 }
19507 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19508 }
19509
19510 return offset + byteLength
19511}
19512
19513Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
19514 value = +value
19515 offset = offset >>> 0
19516 if (!noAssert) {
19517 var limit = Math.pow(2, (8 * byteLength) - 1)
19518
19519 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19520 }
19521
19522 var i = byteLength - 1
19523 var mul = 1
19524 var sub = 0
19525 this[offset + i] = value & 0xFF
19526 while (--i >= 0 && (mul *= 0x100)) {
19527 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
19528 sub = 1
19529 }
19530 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19531 }
19532
19533 return offset + byteLength
19534}
19535
19536Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
19537 value = +value
19538 offset = offset >>> 0
19539 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
19540 if (value < 0) value = 0xff + value + 1
19541 this[offset] = (value & 0xff)
19542 return offset + 1
19543}
19544
19545Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
19546 value = +value
19547 offset = offset >>> 0
19548 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19549 this[offset] = (value & 0xff)
19550 this[offset + 1] = (value >>> 8)
19551 return offset + 2
19552}
19553
19554Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
19555 value = +value
19556 offset = offset >>> 0
19557 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19558 this[offset] = (value >>> 8)
19559 this[offset + 1] = (value & 0xff)
19560 return offset + 2
19561}
19562
19563Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
19564 value = +value
19565 offset = offset >>> 0
19566 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19567 this[offset] = (value & 0xff)
19568 this[offset + 1] = (value >>> 8)
19569 this[offset + 2] = (value >>> 16)
19570 this[offset + 3] = (value >>> 24)
19571 return offset + 4
19572}
19573
19574Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
19575 value = +value
19576 offset = offset >>> 0
19577 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19578 if (value < 0) value = 0xffffffff + value + 1
19579 this[offset] = (value >>> 24)
19580 this[offset + 1] = (value >>> 16)
19581 this[offset + 2] = (value >>> 8)
19582 this[offset + 3] = (value & 0xff)
19583 return offset + 4
19584}
19585
19586function checkIEEE754 (buf, value, offset, ext, max, min) {
19587 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19588 if (offset < 0) throw new RangeError('Index out of range')
19589}
19590
19591function writeFloat (buf, value, offset, littleEndian, noAssert) {
19592 value = +value
19593 offset = offset >>> 0
19594 if (!noAssert) {
19595 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
19596 }
19597 ieee754.write(buf, value, offset, littleEndian, 23, 4)
19598 return offset + 4
19599}
19600
19601Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
19602 return writeFloat(this, value, offset, true, noAssert)
19603}
19604
19605Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
19606 return writeFloat(this, value, offset, false, noAssert)
19607}
19608
19609function writeDouble (buf, value, offset, littleEndian, noAssert) {
19610 value = +value
19611 offset = offset >>> 0
19612 if (!noAssert) {
19613 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
19614 }
19615 ieee754.write(buf, value, offset, littleEndian, 52, 8)
19616 return offset + 8
19617}
19618
19619Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
19620 return writeDouble(this, value, offset, true, noAssert)
19621}
19622
19623Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
19624 return writeDouble(this, value, offset, false, noAssert)
19625}
19626
19627// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
19628Buffer.prototype.copy = function copy (target, targetStart, start, end) {
19629 if (!start) start = 0
19630 if (!end && end !== 0) end = this.length
19631 if (targetStart >= target.length) targetStart = target.length
19632 if (!targetStart) targetStart = 0
19633 if (end > 0 && end < start) end = start
19634
19635 // Copy 0 bytes; we're done
19636 if (end === start) return 0
19637 if (target.length === 0 || this.length === 0) return 0
19638
19639 // Fatal error conditions
19640 if (targetStart < 0) {
19641 throw new RangeError('targetStart out of bounds')
19642 }
19643 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
19644 if (end < 0) throw new RangeError('sourceEnd out of bounds')
19645
19646 // Are we oob?
19647 if (end > this.length) end = this.length
19648 if (target.length - targetStart < end - start) {
19649 end = target.length - targetStart + start
19650 }
19651
19652 var len = end - start
19653 var i
19654
19655 if (this === target && start < targetStart && targetStart < end) {
19656 // descending copy from end
19657 for (i = len - 1; i >= 0; --i) {
19658 target[i + targetStart] = this[i + start]
19659 }
19660 } else if (len < 1000) {
19661 // ascending copy from start
19662 for (i = 0; i < len; ++i) {
19663 target[i + targetStart] = this[i + start]
19664 }
19665 } else {
19666 Uint8Array.prototype.set.call(
19667 target,
19668 this.subarray(start, start + len),
19669 targetStart
19670 )
19671 }
19672
19673 return len
19674}
19675
19676// Usage:
19677// buffer.fill(number[, offset[, end]])
19678// buffer.fill(buffer[, offset[, end]])
19679// buffer.fill(string[, offset[, end]][, encoding])
19680Buffer.prototype.fill = function fill (val, start, end, encoding) {
19681 // Handle string cases:
19682 if (typeof val === 'string') {
19683 if (typeof start === 'string') {
19684 encoding = start
19685 start = 0
19686 end = this.length
19687 } else if (typeof end === 'string') {
19688 encoding = end
19689 end = this.length
19690 }
19691 if (val.length === 1) {
19692 var code = val.charCodeAt(0)
19693 if (code < 256) {
19694 val = code
19695 }
19696 }
19697 if (encoding !== undefined && typeof encoding !== 'string') {
19698 throw new TypeError('encoding must be a string')
19699 }
19700 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
19701 throw new TypeError('Unknown encoding: ' + encoding)
19702 }
19703 } else if (typeof val === 'number') {
19704 val = val & 255
19705 }
19706
19707 // Invalid ranges are not set to a default, so can range check early.
19708 if (start < 0 || this.length < start || this.length < end) {
19709 throw new RangeError('Out of range index')
19710 }
19711
19712 if (end <= start) {
19713 return this
19714 }
19715
19716 start = start >>> 0
19717 end = end === undefined ? this.length : end >>> 0
19718
19719 if (!val) val = 0
19720
19721 var i
19722 if (typeof val === 'number') {
19723 for (i = start; i < end; ++i) {
19724 this[i] = val
19725 }
19726 } else {
19727 var bytes = Buffer.isBuffer(val)
19728 ? val
19729 : new Buffer(val, encoding)
19730 var len = bytes.length
19731 for (i = 0; i < end - start; ++i) {
19732 this[i + start] = bytes[i % len]
19733 }
19734 }
19735
19736 return this
19737}
19738
19739// HELPER FUNCTIONS
19740// ================
19741
19742var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
19743
19744function base64clean (str) {
19745 // Node strips out invalid characters like \n and \t from the string, base64-js does not
19746 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
19747 // Node converts strings with length < 2 to ''
19748 if (str.length < 2) return ''
19749 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
19750 while (str.length % 4 !== 0) {
19751 str = str + '='
19752 }
19753 return str
19754}
19755
19756function stringtrim (str) {
19757 if (str.trim) return str.trim()
19758 return str.replace(/^\s+|\s+$/g, '')
19759}
19760
19761function toHex (n) {
19762 if (n < 16) return '0' + n.toString(16)
19763 return n.toString(16)
19764}
19765
19766function utf8ToBytes (string, units) {
19767 units = units || Infinity
19768 var codePoint
19769 var length = string.length
19770 var leadSurrogate = null
19771 var bytes = []
19772
19773 for (var i = 0; i < length; ++i) {
19774 codePoint = string.charCodeAt(i)
19775
19776 // is surrogate component
19777 if (codePoint > 0xD7FF && codePoint < 0xE000) {
19778 // last char was a lead
19779 if (!leadSurrogate) {
19780 // no lead yet
19781 if (codePoint > 0xDBFF) {
19782 // unexpected trail
19783 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19784 continue
19785 } else if (i + 1 === length) {
19786 // unpaired lead
19787 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19788 continue
19789 }
19790
19791 // valid lead
19792 leadSurrogate = codePoint
19793
19794 continue
19795 }
19796
19797 // 2 leads in a row
19798 if (codePoint < 0xDC00) {
19799 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19800 leadSurrogate = codePoint
19801 continue
19802 }
19803
19804 // valid surrogate pair
19805 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
19806 } else if (leadSurrogate) {
19807 // valid bmp char, but last char was a lead
19808 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19809 }
19810
19811 leadSurrogate = null
19812
19813 // encode utf8
19814 if (codePoint < 0x80) {
19815 if ((units -= 1) < 0) break
19816 bytes.push(codePoint)
19817 } else if (codePoint < 0x800) {
19818 if ((units -= 2) < 0) break
19819 bytes.push(
19820 codePoint >> 0x6 | 0xC0,
19821 codePoint & 0x3F | 0x80
19822 )
19823 } else if (codePoint < 0x10000) {
19824 if ((units -= 3) < 0) break
19825 bytes.push(
19826 codePoint >> 0xC | 0xE0,
19827 codePoint >> 0x6 & 0x3F | 0x80,
19828 codePoint & 0x3F | 0x80
19829 )
19830 } else if (codePoint < 0x110000) {
19831 if ((units -= 4) < 0) break
19832 bytes.push(
19833 codePoint >> 0x12 | 0xF0,
19834 codePoint >> 0xC & 0x3F | 0x80,
19835 codePoint >> 0x6 & 0x3F | 0x80,
19836 codePoint & 0x3F | 0x80
19837 )
19838 } else {
19839 throw new Error('Invalid code point')
19840 }
19841 }
19842
19843 return bytes
19844}
19845
19846function asciiToBytes (str) {
19847 var byteArray = []
19848 for (var i = 0; i < str.length; ++i) {
19849 // Node's code seems to be doing this and not & 0x7F..
19850 byteArray.push(str.charCodeAt(i) & 0xFF)
19851 }
19852 return byteArray
19853}
19854
19855function utf16leToBytes (str, units) {
19856 var c, hi, lo
19857 var byteArray = []
19858 for (var i = 0; i < str.length; ++i) {
19859 if ((units -= 2) < 0) break
19860
19861 c = str.charCodeAt(i)
19862 hi = c >> 8
19863 lo = c % 256
19864 byteArray.push(lo)
19865 byteArray.push(hi)
19866 }
19867
19868 return byteArray
19869}
19870
19871function base64ToBytes (str) {
19872 return base64.toByteArray(base64clean(str))
19873}
19874
19875function blitBuffer (src, dst, offset, length) {
19876 for (var i = 0; i < length; ++i) {
19877 if ((i + offset >= dst.length) || (i >= src.length)) break
19878 dst[i + offset] = src[i]
19879 }
19880 return i
19881}
19882
19883function isnan (val) {
19884 return val !== val // eslint-disable-line no-self-compare
19885}
19886
19887},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
19888(function (Buffer){
19889// Copyright Joyent, Inc. and other Node contributors.
19890//
19891// Permission is hereby granted, free of charge, to any person obtaining a
19892// copy of this software and associated documentation files (the
19893// "Software"), to deal in the Software without restriction, including
19894// without limitation the rights to use, copy, modify, merge, publish,
19895// distribute, sublicense, and/or sell copies of the Software, and to permit
19896// persons to whom the Software is furnished to do so, subject to the
19897// following conditions:
19898//
19899// The above copyright notice and this permission notice shall be included
19900// in all copies or substantial portions of the Software.
19901//
19902// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19903// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19904// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19905// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19906// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19907// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19908// USE OR OTHER DEALINGS IN THE SOFTWARE.
19909
19910// NOTE: These type checking functions intentionally don't use `instanceof`
19911// because it is fragile and can be easily faked with `Object.create()`.
19912
19913function isArray(arg) {
19914 if (Array.isArray) {
19915 return Array.isArray(arg);
19916 }
19917 return objectToString(arg) === '[object Array]';
19918}
19919exports.isArray = isArray;
19920
19921function isBoolean(arg) {
19922 return typeof arg === 'boolean';
19923}
19924exports.isBoolean = isBoolean;
19925
19926function isNull(arg) {
19927 return arg === null;
19928}
19929exports.isNull = isNull;
19930
19931function isNullOrUndefined(arg) {
19932 return arg == null;
19933}
19934exports.isNullOrUndefined = isNullOrUndefined;
19935
19936function isNumber(arg) {
19937 return typeof arg === 'number';
19938}
19939exports.isNumber = isNumber;
19940
19941function isString(arg) {
19942 return typeof arg === 'string';
19943}
19944exports.isString = isString;
19945
19946function isSymbol(arg) {
19947 return typeof arg === 'symbol';
19948}
19949exports.isSymbol = isSymbol;
19950
19951function isUndefined(arg) {
19952 return arg === void 0;
19953}
19954exports.isUndefined = isUndefined;
19955
19956function isRegExp(re) {
19957 return objectToString(re) === '[object RegExp]';
19958}
19959exports.isRegExp = isRegExp;
19960
19961function isObject(arg) {
19962 return typeof arg === 'object' && arg !== null;
19963}
19964exports.isObject = isObject;
19965
19966function isDate(d) {
19967 return objectToString(d) === '[object Date]';
19968}
19969exports.isDate = isDate;
19970
19971function isError(e) {
19972 return (objectToString(e) === '[object Error]' || e instanceof Error);
19973}
19974exports.isError = isError;
19975
19976function isFunction(arg) {
19977 return typeof arg === 'function';
19978}
19979exports.isFunction = isFunction;
19980
19981function isPrimitive(arg) {
19982 return arg === null ||
19983 typeof arg === 'boolean' ||
19984 typeof arg === 'number' ||
19985 typeof arg === 'string' ||
19986 typeof arg === 'symbol' || // ES6 symbol
19987 typeof arg === 'undefined';
19988}
19989exports.isPrimitive = isPrimitive;
19990
19991exports.isBuffer = Buffer.isBuffer;
19992
19993function objectToString(o) {
19994 return Object.prototype.toString.call(o);
19995}
19996
19997}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
19998},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
19999// Copyright Joyent, Inc. and other Node contributors.
20000//
20001// Permission is hereby granted, free of charge, to any person obtaining a
20002// copy of this software and associated documentation files (the
20003// "Software"), to deal in the Software without restriction, including
20004// without limitation the rights to use, copy, modify, merge, publish,
20005// distribute, sublicense, and/or sell copies of the Software, and to permit
20006// persons to whom the Software is furnished to do so, subject to the
20007// following conditions:
20008//
20009// The above copyright notice and this permission notice shall be included
20010// in all copies or substantial portions of the Software.
20011//
20012// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20013// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20014// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20015// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20016// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20017// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20018// USE OR OTHER DEALINGS IN THE SOFTWARE.
20019
20020function EventEmitter() {
20021 this._events = this._events || {};
20022 this._maxListeners = this._maxListeners || undefined;
20023}
20024module.exports = EventEmitter;
20025
20026// Backwards-compat with node 0.10.x
20027EventEmitter.EventEmitter = EventEmitter;
20028
20029EventEmitter.prototype._events = undefined;
20030EventEmitter.prototype._maxListeners = undefined;
20031
20032// By default EventEmitters will print a warning if more than 10 listeners are
20033// added to it. This is a useful default which helps finding memory leaks.
20034EventEmitter.defaultMaxListeners = 10;
20035
20036// Obviously not all Emitters should be limited to 10. This function allows
20037// that to be increased. Set to zero for unlimited.
20038EventEmitter.prototype.setMaxListeners = function(n) {
20039 if (!isNumber(n) || n < 0 || isNaN(n))
20040 throw TypeError('n must be a positive number');
20041 this._maxListeners = n;
20042 return this;
20043};
20044
20045EventEmitter.prototype.emit = function(type) {
20046 var er, handler, len, args, i, listeners;
20047
20048 if (!this._events)
20049 this._events = {};
20050
20051 // If there is no 'error' event listener then throw.
20052 if (type === 'error') {
20053 if (!this._events.error ||
20054 (isObject(this._events.error) && !this._events.error.length)) {
20055 er = arguments[1];
20056 if (er instanceof Error) {
20057 throw er; // Unhandled 'error' event
20058 } else {
20059 // At least give some kind of context to the user
20060 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20061 err.context = er;
20062 throw err;
20063 }
20064 }
20065 }
20066
20067 handler = this._events[type];
20068
20069 if (isUndefined(handler))
20070 return false;
20071
20072 if (isFunction(handler)) {
20073 switch (arguments.length) {
20074 // fast cases
20075 case 1:
20076 handler.call(this);
20077 break;
20078 case 2:
20079 handler.call(this, arguments[1]);
20080 break;
20081 case 3:
20082 handler.call(this, arguments[1], arguments[2]);
20083 break;
20084 // slower
20085 default:
20086 args = Array.prototype.slice.call(arguments, 1);
20087 handler.apply(this, args);
20088 }
20089 } else if (isObject(handler)) {
20090 args = Array.prototype.slice.call(arguments, 1);
20091 listeners = handler.slice();
20092 len = listeners.length;
20093 for (i = 0; i < len; i++)
20094 listeners[i].apply(this, args);
20095 }
20096
20097 return true;
20098};
20099
20100EventEmitter.prototype.addListener = function(type, listener) {
20101 var m;
20102
20103 if (!isFunction(listener))
20104 throw TypeError('listener must be a function');
20105
20106 if (!this._events)
20107 this._events = {};
20108
20109 // To avoid recursion in the case that type === "newListener"! Before
20110 // adding it to the listeners, first emit "newListener".
20111 if (this._events.newListener)
20112 this.emit('newListener', type,
20113 isFunction(listener.listener) ?
20114 listener.listener : listener);
20115
20116 if (!this._events[type])
20117 // Optimize the case of one listener. Don't need the extra array object.
20118 this._events[type] = listener;
20119 else if (isObject(this._events[type]))
20120 // If we've already got an array, just append.
20121 this._events[type].push(listener);
20122 else
20123 // Adding the second element, need to change to array.
20124 this._events[type] = [this._events[type], listener];
20125
20126 // Check for listener leak
20127 if (isObject(this._events[type]) && !this._events[type].warned) {
20128 if (!isUndefined(this._maxListeners)) {
20129 m = this._maxListeners;
20130 } else {
20131 m = EventEmitter.defaultMaxListeners;
20132 }
20133
20134 if (m && m > 0 && this._events[type].length > m) {
20135 this._events[type].warned = true;
20136 console.error('(node) warning: possible EventEmitter memory ' +
20137 'leak detected. %d listeners added. ' +
20138 'Use emitter.setMaxListeners() to increase limit.',
20139 this._events[type].length);
20140 if (typeof console.trace === 'function') {
20141 // not supported in IE 10
20142 console.trace();
20143 }
20144 }
20145 }
20146
20147 return this;
20148};
20149
20150EventEmitter.prototype.on = EventEmitter.prototype.addListener;
20151
20152EventEmitter.prototype.once = function(type, listener) {
20153 if (!isFunction(listener))
20154 throw TypeError('listener must be a function');
20155
20156 var fired = false;
20157
20158 function g() {
20159 this.removeListener(type, g);
20160
20161 if (!fired) {
20162 fired = true;
20163 listener.apply(this, arguments);
20164 }
20165 }
20166
20167 g.listener = listener;
20168 this.on(type, g);
20169
20170 return this;
20171};
20172
20173// emits a 'removeListener' event iff the listener was removed
20174EventEmitter.prototype.removeListener = function(type, listener) {
20175 var list, position, length, i;
20176
20177 if (!isFunction(listener))
20178 throw TypeError('listener must be a function');
20179
20180 if (!this._events || !this._events[type])
20181 return this;
20182
20183 list = this._events[type];
20184 length = list.length;
20185 position = -1;
20186
20187 if (list === listener ||
20188 (isFunction(list.listener) && list.listener === listener)) {
20189 delete this._events[type];
20190 if (this._events.removeListener)
20191 this.emit('removeListener', type, listener);
20192
20193 } else if (isObject(list)) {
20194 for (i = length; i-- > 0;) {
20195 if (list[i] === listener ||
20196 (list[i].listener && list[i].listener === listener)) {
20197 position = i;
20198 break;
20199 }
20200 }
20201
20202 if (position < 0)
20203 return this;
20204
20205 if (list.length === 1) {
20206 list.length = 0;
20207 delete this._events[type];
20208 } else {
20209 list.splice(position, 1);
20210 }
20211
20212 if (this._events.removeListener)
20213 this.emit('removeListener', type, listener);
20214 }
20215
20216 return this;
20217};
20218
20219EventEmitter.prototype.removeAllListeners = function(type) {
20220 var key, listeners;
20221
20222 if (!this._events)
20223 return this;
20224
20225 // not listening for removeListener, no need to emit
20226 if (!this._events.removeListener) {
20227 if (arguments.length === 0)
20228 this._events = {};
20229 else if (this._events[type])
20230 delete this._events[type];
20231 return this;
20232 }
20233
20234 // emit removeListener for all listeners on all events
20235 if (arguments.length === 0) {
20236 for (key in this._events) {
20237 if (key === 'removeListener') continue;
20238 this.removeAllListeners(key);
20239 }
20240 this.removeAllListeners('removeListener');
20241 this._events = {};
20242 return this;
20243 }
20244
20245 listeners = this._events[type];
20246
20247 if (isFunction(listeners)) {
20248 this.removeListener(type, listeners);
20249 } else if (listeners) {
20250 // LIFO order
20251 while (listeners.length)
20252 this.removeListener(type, listeners[listeners.length - 1]);
20253 }
20254 delete this._events[type];
20255
20256 return this;
20257};
20258
20259EventEmitter.prototype.listeners = function(type) {
20260 var ret;
20261 if (!this._events || !this._events[type])
20262 ret = [];
20263 else if (isFunction(this._events[type]))
20264 ret = [this._events[type]];
20265 else
20266 ret = this._events[type].slice();
20267 return ret;
20268};
20269
20270EventEmitter.prototype.listenerCount = function(type) {
20271 if (this._events) {
20272 var evlistener = this._events[type];
20273
20274 if (isFunction(evlistener))
20275 return 1;
20276 else if (evlistener)
20277 return evlistener.length;
20278 }
20279 return 0;
20280};
20281
20282EventEmitter.listenerCount = function(emitter, type) {
20283 return emitter.listenerCount(type);
20284};
20285
20286function isFunction(arg) {
20287 return typeof arg === 'function';
20288}
20289
20290function isNumber(arg) {
20291 return typeof arg === 'number';
20292}
20293
20294function isObject(arg) {
20295 return typeof arg === 'object' && arg !== null;
20296}
20297
20298function isUndefined(arg) {
20299 return arg === void 0;
20300}
20301
20302},{}],8:[function(require,module,exports){
20303exports.read = function (buffer, offset, isLE, mLen, nBytes) {
20304 var e, m
20305 var eLen = nBytes * 8 - mLen - 1
20306 var eMax = (1 << eLen) - 1
20307 var eBias = eMax >> 1
20308 var nBits = -7
20309 var i = isLE ? (nBytes - 1) : 0
20310 var d = isLE ? -1 : 1
20311 var s = buffer[offset + i]
20312
20313 i += d
20314
20315 e = s & ((1 << (-nBits)) - 1)
20316 s >>= (-nBits)
20317 nBits += eLen
20318 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
20319
20320 m = e & ((1 << (-nBits)) - 1)
20321 e >>= (-nBits)
20322 nBits += mLen
20323 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
20324
20325 if (e === 0) {
20326 e = 1 - eBias
20327 } else if (e === eMax) {
20328 return m ? NaN : ((s ? -1 : 1) * Infinity)
20329 } else {
20330 m = m + Math.pow(2, mLen)
20331 e = e - eBias
20332 }
20333 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
20334}
20335
20336exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20337 var e, m, c
20338 var eLen = nBytes * 8 - mLen - 1
20339 var eMax = (1 << eLen) - 1
20340 var eBias = eMax >> 1
20341 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
20342 var i = isLE ? 0 : (nBytes - 1)
20343 var d = isLE ? 1 : -1
20344 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
20345
20346 value = Math.abs(value)
20347
20348 if (isNaN(value) || value === Infinity) {
20349 m = isNaN(value) ? 1 : 0
20350 e = eMax
20351 } else {
20352 e = Math.floor(Math.log(value) / Math.LN2)
20353 if (value * (c = Math.pow(2, -e)) < 1) {
20354 e--
20355 c *= 2
20356 }
20357 if (e + eBias >= 1) {
20358 value += rt / c
20359 } else {
20360 value += rt * Math.pow(2, 1 - eBias)
20361 }
20362 if (value * c >= 2) {
20363 e++
20364 c /= 2
20365 }
20366
20367 if (e + eBias >= eMax) {
20368 m = 0
20369 e = eMax
20370 } else if (e + eBias >= 1) {
20371 m = (value * c - 1) * Math.pow(2, mLen)
20372 e = e + eBias
20373 } else {
20374 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
20375 e = 0
20376 }
20377 }
20378
20379 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
20380
20381 e = (e << mLen) | m
20382 eLen += mLen
20383 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
20384
20385 buffer[offset + i - d] |= s * 128
20386}
20387
20388},{}],9:[function(require,module,exports){
20389if (typeof Object.create === 'function') {
20390 // implementation from standard node.js 'util' module
20391 module.exports = function inherits(ctor, superCtor) {
20392 ctor.super_ = superCtor
20393 ctor.prototype = Object.create(superCtor.prototype, {
20394 constructor: {
20395 value: ctor,
20396 enumerable: false,
20397 writable: true,
20398 configurable: true
20399 }
20400 });
20401 };
20402} else {
20403 // old school shim for old browsers
20404 module.exports = function inherits(ctor, superCtor) {
20405 ctor.super_ = superCtor
20406 var TempCtor = function () {}
20407 TempCtor.prototype = superCtor.prototype
20408 ctor.prototype = new TempCtor()
20409 ctor.prototype.constructor = ctor
20410 }
20411}
20412
20413},{}],10:[function(require,module,exports){
20414/*!
20415 * Determine if an object is a Buffer
20416 *
20417 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20418 * @license MIT
20419 */
20420
20421// The _isBuffer check is for Safari 5-7 support, because it's missing
20422// Object.prototype.constructor. Remove this eventually
20423module.exports = function (obj) {
20424 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
20425}
20426
20427function isBuffer (obj) {
20428 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
20429}
20430
20431// For Node v0.10 support. Remove this eventually.
20432function isSlowBuffer (obj) {
20433 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
20434}
20435
20436},{}],11:[function(require,module,exports){
20437var toString = {}.toString;
20438
20439module.exports = Array.isArray || function (arr) {
20440 return toString.call(arr) == '[object Array]';
20441};
20442
20443},{}],12:[function(require,module,exports){
20444(function (process){
20445'use strict';
20446
20447if (!process.version ||
20448 process.version.indexOf('v0.') === 0 ||
20449 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
20450 module.exports = nextTick;
20451} else {
20452 module.exports = process.nextTick;
20453}
20454
20455function nextTick(fn, arg1, arg2, arg3) {
20456 if (typeof fn !== 'function') {
20457 throw new TypeError('"callback" argument must be a function');
20458 }
20459 var len = arguments.length;
20460 var args, i;
20461 switch (len) {
20462 case 0:
20463 case 1:
20464 return process.nextTick(fn);
20465 case 2:
20466 return process.nextTick(function afterTickOne() {
20467 fn.call(null, arg1);
20468 });
20469 case 3:
20470 return process.nextTick(function afterTickTwo() {
20471 fn.call(null, arg1, arg2);
20472 });
20473 case 4:
20474 return process.nextTick(function afterTickThree() {
20475 fn.call(null, arg1, arg2, arg3);
20476 });
20477 default:
20478 args = new Array(len - 1);
20479 i = 0;
20480 while (i < args.length) {
20481 args[i++] = arguments[i];
20482 }
20483 return process.nextTick(function afterTick() {
20484 fn.apply(null, args);
20485 });
20486 }
20487}
20488
20489}).call(this,require('_process'))
20490},{"_process":13}],13:[function(require,module,exports){
20491// shim for using process in browser
20492var process = module.exports = {};
20493
20494// cached from whatever global is present so that test runners that stub it
20495// don't break things. But we need to wrap it in a try catch in case it is
20496// wrapped in strict mode code which doesn't define any globals. It's inside a
20497// function because try/catches deoptimize in certain engines.
20498
20499var cachedSetTimeout;
20500var cachedClearTimeout;
20501
20502function defaultSetTimout() {
20503 throw new Error('setTimeout has not been defined');
20504}
20505function defaultClearTimeout () {
20506 throw new Error('clearTimeout has not been defined');
20507}
20508(function () {
20509 try {
20510 if (typeof setTimeout === 'function') {
20511 cachedSetTimeout = setTimeout;
20512 } else {
20513 cachedSetTimeout = defaultSetTimout;
20514 }
20515 } catch (e) {
20516 cachedSetTimeout = defaultSetTimout;
20517 }
20518 try {
20519 if (typeof clearTimeout === 'function') {
20520 cachedClearTimeout = clearTimeout;
20521 } else {
20522 cachedClearTimeout = defaultClearTimeout;
20523 }
20524 } catch (e) {
20525 cachedClearTimeout = defaultClearTimeout;
20526 }
20527} ())
20528function runTimeout(fun) {
20529 if (cachedSetTimeout === setTimeout) {
20530 //normal enviroments in sane situations
20531 return setTimeout(fun, 0);
20532 }
20533 // if setTimeout wasn't available but was latter defined
20534 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
20535 cachedSetTimeout = setTimeout;
20536 return setTimeout(fun, 0);
20537 }
20538 try {
20539 // when when somebody has screwed with setTimeout but no I.E. maddness
20540 return cachedSetTimeout(fun, 0);
20541 } catch(e){
20542 try {
20543 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
20544 return cachedSetTimeout.call(null, fun, 0);
20545 } catch(e){
20546 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
20547 return cachedSetTimeout.call(this, fun, 0);
20548 }
20549 }
20550
20551
20552}
20553function runClearTimeout(marker) {
20554 if (cachedClearTimeout === clearTimeout) {
20555 //normal enviroments in sane situations
20556 return clearTimeout(marker);
20557 }
20558 // if clearTimeout wasn't available but was latter defined
20559 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
20560 cachedClearTimeout = clearTimeout;
20561 return clearTimeout(marker);
20562 }
20563 try {
20564 // when when somebody has screwed with setTimeout but no I.E. maddness
20565 return cachedClearTimeout(marker);
20566 } catch (e){
20567 try {
20568 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
20569 return cachedClearTimeout.call(null, marker);
20570 } catch (e){
20571 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
20572 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
20573 return cachedClearTimeout.call(this, marker);
20574 }
20575 }
20576
20577
20578
20579}
20580var queue = [];
20581var draining = false;
20582var currentQueue;
20583var queueIndex = -1;
20584
20585function cleanUpNextTick() {
20586 if (!draining || !currentQueue) {
20587 return;
20588 }
20589 draining = false;
20590 if (currentQueue.length) {
20591 queue = currentQueue.concat(queue);
20592 } else {
20593 queueIndex = -1;
20594 }
20595 if (queue.length) {
20596 drainQueue();
20597 }
20598}
20599
20600function drainQueue() {
20601 if (draining) {
20602 return;
20603 }
20604 var timeout = runTimeout(cleanUpNextTick);
20605 draining = true;
20606
20607 var len = queue.length;
20608 while(len) {
20609 currentQueue = queue;
20610 queue = [];
20611 while (++queueIndex < len) {
20612 if (currentQueue) {
20613 currentQueue[queueIndex].run();
20614 }
20615 }
20616 queueIndex = -1;
20617 len = queue.length;
20618 }
20619 currentQueue = null;
20620 draining = false;
20621 runClearTimeout(timeout);
20622}
20623
20624process.nextTick = function (fun) {
20625 var args = new Array(arguments.length - 1);
20626 if (arguments.length > 1) {
20627 for (var i = 1; i < arguments.length; i++) {
20628 args[i - 1] = arguments[i];
20629 }
20630 }
20631 queue.push(new Item(fun, args));
20632 if (queue.length === 1 && !draining) {
20633 runTimeout(drainQueue);
20634 }
20635};
20636
20637// v8 likes predictible objects
20638function Item(fun, array) {
20639 this.fun = fun;
20640 this.array = array;
20641}
20642Item.prototype.run = function () {
20643 this.fun.apply(null, this.array);
20644};
20645process.title = 'browser';
20646process.browser = true;
20647process.env = {};
20648process.argv = [];
20649process.version = ''; // empty string to avoid regexp issues
20650process.versions = {};
20651
20652function noop() {}
20653
20654process.on = noop;
20655process.addListener = noop;
20656process.once = noop;
20657process.off = noop;
20658process.removeListener = noop;
20659process.removeAllListeners = noop;
20660process.emit = noop;
20661
20662process.binding = function (name) {
20663 throw new Error('process.binding is not supported');
20664};
20665
20666process.cwd = function () { return '/' };
20667process.chdir = function (dir) {
20668 throw new Error('process.chdir is not supported');
20669};
20670process.umask = function() { return 0; };
20671
20672},{}],14:[function(require,module,exports){
20673module.exports = require("./lib/_stream_duplex.js")
20674
20675},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
20676// a duplex stream is just a stream that is both readable and writable.
20677// Since JS doesn't have multiple prototypal inheritance, this class
20678// prototypally inherits from Readable, and then parasitically from
20679// Writable.
20680
20681'use strict';
20682
20683/*<replacement>*/
20684
20685var objectKeys = Object.keys || function (obj) {
20686 var keys = [];
20687 for (var key in obj) {
20688 keys.push(key);
20689 }return keys;
20690};
20691/*</replacement>*/
20692
20693module.exports = Duplex;
20694
20695/*<replacement>*/
20696var processNextTick = require('process-nextick-args');
20697/*</replacement>*/
20698
20699/*<replacement>*/
20700var util = require('core-util-is');
20701util.inherits = require('inherits');
20702/*</replacement>*/
20703
20704var Readable = require('./_stream_readable');
20705var Writable = require('./_stream_writable');
20706
20707util.inherits(Duplex, Readable);
20708
20709var keys = objectKeys(Writable.prototype);
20710for (var v = 0; v < keys.length; v++) {
20711 var method = keys[v];
20712 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
20713}
20714
20715function Duplex(options) {
20716 if (!(this instanceof Duplex)) return new Duplex(options);
20717
20718 Readable.call(this, options);
20719 Writable.call(this, options);
20720
20721 if (options && options.readable === false) this.readable = false;
20722
20723 if (options && options.writable === false) this.writable = false;
20724
20725 this.allowHalfOpen = true;
20726 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
20727
20728 this.once('end', onend);
20729}
20730
20731// the no-half-open enforcer
20732function onend() {
20733 // if we allow half-open state, or if the writable side ended,
20734 // then we're ok.
20735 if (this.allowHalfOpen || this._writableState.ended) return;
20736
20737 // no more data can be written.
20738 // But allow more writes to happen in this tick.
20739 processNextTick(onEndNT, this);
20740}
20741
20742function onEndNT(self) {
20743 self.end();
20744}
20745
20746function forEach(xs, f) {
20747 for (var i = 0, l = xs.length; i < l; i++) {
20748 f(xs[i], i);
20749 }
20750}
20751},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
20752// a passthrough stream.
20753// basically just the most minimal sort of Transform stream.
20754// Every written chunk gets output as-is.
20755
20756'use strict';
20757
20758module.exports = PassThrough;
20759
20760var Transform = require('./_stream_transform');
20761
20762/*<replacement>*/
20763var util = require('core-util-is');
20764util.inherits = require('inherits');
20765/*</replacement>*/
20766
20767util.inherits(PassThrough, Transform);
20768
20769function PassThrough(options) {
20770 if (!(this instanceof PassThrough)) return new PassThrough(options);
20771
20772 Transform.call(this, options);
20773}
20774
20775PassThrough.prototype._transform = function (chunk, encoding, cb) {
20776 cb(null, chunk);
20777};
20778},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
20779(function (process){
20780'use strict';
20781
20782module.exports = Readable;
20783
20784/*<replacement>*/
20785var processNextTick = require('process-nextick-args');
20786/*</replacement>*/
20787
20788/*<replacement>*/
20789var isArray = require('isarray');
20790/*</replacement>*/
20791
20792/*<replacement>*/
20793var Duplex;
20794/*</replacement>*/
20795
20796Readable.ReadableState = ReadableState;
20797
20798/*<replacement>*/
20799var EE = require('events').EventEmitter;
20800
20801var EElistenerCount = function (emitter, type) {
20802 return emitter.listeners(type).length;
20803};
20804/*</replacement>*/
20805
20806/*<replacement>*/
20807var Stream;
20808(function () {
20809 try {
20810 Stream = require('st' + 'ream');
20811 } catch (_) {} finally {
20812 if (!Stream) Stream = require('events').EventEmitter;
20813 }
20814})();
20815/*</replacement>*/
20816
20817var Buffer = require('buffer').Buffer;
20818/*<replacement>*/
20819var bufferShim = require('buffer-shims');
20820/*</replacement>*/
20821
20822/*<replacement>*/
20823var util = require('core-util-is');
20824util.inherits = require('inherits');
20825/*</replacement>*/
20826
20827/*<replacement>*/
20828var debugUtil = require('util');
20829var debug = void 0;
20830if (debugUtil && debugUtil.debuglog) {
20831 debug = debugUtil.debuglog('stream');
20832} else {
20833 debug = function () {};
20834}
20835/*</replacement>*/
20836
20837var BufferList = require('./internal/streams/BufferList');
20838var StringDecoder;
20839
20840util.inherits(Readable, Stream);
20841
20842function prependListener(emitter, event, fn) {
20843 // Sadly this is not cacheable as some libraries bundle their own
20844 // event emitter implementation with them.
20845 if (typeof emitter.prependListener === 'function') {
20846 return emitter.prependListener(event, fn);
20847 } else {
20848 // This is a hack to make sure that our error handler is attached before any
20849 // userland ones. NEVER DO THIS. This is here only because this code needs
20850 // to continue to work with older versions of Node.js that do not include
20851 // the prependListener() method. The goal is to eventually remove this hack.
20852 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
20853 }
20854}
20855
20856function ReadableState(options, stream) {
20857 Duplex = Duplex || require('./_stream_duplex');
20858
20859 options = options || {};
20860
20861 // object stream flag. Used to make read(n) ignore n and to
20862 // make all the buffer merging and length checks go away
20863 this.objectMode = !!options.objectMode;
20864
20865 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
20866
20867 // the point at which it stops calling _read() to fill the buffer
20868 // Note: 0 is a valid value, means "don't call _read preemptively ever"
20869 var hwm = options.highWaterMark;
20870 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
20871 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
20872
20873 // cast to ints.
20874 this.highWaterMark = ~ ~this.highWaterMark;
20875
20876 // A linked list is used to store data chunks instead of an array because the
20877 // linked list can remove elements from the beginning faster than
20878 // array.shift()
20879 this.buffer = new BufferList();
20880 this.length = 0;
20881 this.pipes = null;
20882 this.pipesCount = 0;
20883 this.flowing = null;
20884 this.ended = false;
20885 this.endEmitted = false;
20886 this.reading = false;
20887
20888 // a flag to be able to tell if the onwrite cb is called immediately,
20889 // or on a later tick. We set this to true at first, because any
20890 // actions that shouldn't happen until "later" should generally also
20891 // not happen before the first write call.
20892 this.sync = true;
20893
20894 // whenever we return null, then we set a flag to say
20895 // that we're awaiting a 'readable' event emission.
20896 this.needReadable = false;
20897 this.emittedReadable = false;
20898 this.readableListening = false;
20899 this.resumeScheduled = false;
20900
20901 // Crypto is kind of old and crusty. Historically, its default string
20902 // encoding is 'binary' so we have to make this configurable.
20903 // Everything else in the universe uses 'utf8', though.
20904 this.defaultEncoding = options.defaultEncoding || 'utf8';
20905
20906 // when piping, we only care about 'readable' events that happen
20907 // after read()ing all the bytes and not getting any pushback.
20908 this.ranOut = false;
20909
20910 // the number of writers that are awaiting a drain event in .pipe()s
20911 this.awaitDrain = 0;
20912
20913 // if true, a maybeReadMore has been scheduled
20914 this.readingMore = false;
20915
20916 this.decoder = null;
20917 this.encoding = null;
20918 if (options.encoding) {
20919 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
20920 this.decoder = new StringDecoder(options.encoding);
20921 this.encoding = options.encoding;
20922 }
20923}
20924
20925function Readable(options) {
20926 Duplex = Duplex || require('./_stream_duplex');
20927
20928 if (!(this instanceof Readable)) return new Readable(options);
20929
20930 this._readableState = new ReadableState(options, this);
20931
20932 // legacy
20933 this.readable = true;
20934
20935 if (options && typeof options.read === 'function') this._read = options.read;
20936
20937 Stream.call(this);
20938}
20939
20940// Manually shove something into the read() buffer.
20941// This returns true if the highWaterMark has not been hit yet,
20942// similar to how Writable.write() returns true if you should
20943// write() some more.
20944Readable.prototype.push = function (chunk, encoding) {
20945 var state = this._readableState;
20946
20947 if (!state.objectMode && typeof chunk === 'string') {
20948 encoding = encoding || state.defaultEncoding;
20949 if (encoding !== state.encoding) {
20950 chunk = bufferShim.from(chunk, encoding);
20951 encoding = '';
20952 }
20953 }
20954
20955 return readableAddChunk(this, state, chunk, encoding, false);
20956};
20957
20958// Unshift should *always* be something directly out of read()
20959Readable.prototype.unshift = function (chunk) {
20960 var state = this._readableState;
20961 return readableAddChunk(this, state, chunk, '', true);
20962};
20963
20964Readable.prototype.isPaused = function () {
20965 return this._readableState.flowing === false;
20966};
20967
20968function readableAddChunk(stream, state, chunk, encoding, addToFront) {
20969 var er = chunkInvalid(state, chunk);
20970 if (er) {
20971 stream.emit('error', er);
20972 } else if (chunk === null) {
20973 state.reading = false;
20974 onEofChunk(stream, state);
20975 } else if (state.objectMode || chunk && chunk.length > 0) {
20976 if (state.ended && !addToFront) {
20977 var e = new Error('stream.push() after EOF');
20978 stream.emit('error', e);
20979 } else if (state.endEmitted && addToFront) {
20980 var _e = new Error('stream.unshift() after end event');
20981 stream.emit('error', _e);
20982 } else {
20983 var skipAdd;
20984 if (state.decoder && !addToFront && !encoding) {
20985 chunk = state.decoder.write(chunk);
20986 skipAdd = !state.objectMode && chunk.length === 0;
20987 }
20988
20989 if (!addToFront) state.reading = false;
20990
20991 // Don't add to the buffer if we've decoded to an empty string chunk and
20992 // we're not in object mode
20993 if (!skipAdd) {
20994 // if we want the data now, just emit it.
20995 if (state.flowing && state.length === 0 && !state.sync) {
20996 stream.emit('data', chunk);
20997 stream.read(0);
20998 } else {
20999 // update the buffer info.
21000 state.length += state.objectMode ? 1 : chunk.length;
21001 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
21002
21003 if (state.needReadable) emitReadable(stream);
21004 }
21005 }
21006
21007 maybeReadMore(stream, state);
21008 }
21009 } else if (!addToFront) {
21010 state.reading = false;
21011 }
21012
21013 return needMoreData(state);
21014}
21015
21016// if it's past the high water mark, we can push in some more.
21017// Also, if we have no data yet, we can stand some
21018// more bytes. This is to work around cases where hwm=0,
21019// such as the repl. Also, if the push() triggered a
21020// readable event, and the user called read(largeNumber) such that
21021// needReadable was set, then we ought to push more, so that another
21022// 'readable' event will be triggered.
21023function needMoreData(state) {
21024 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21025}
21026
21027// backwards compatibility.
21028Readable.prototype.setEncoding = function (enc) {
21029 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21030 this._readableState.decoder = new StringDecoder(enc);
21031 this._readableState.encoding = enc;
21032 return this;
21033};
21034
21035// Don't raise the hwm > 8MB
21036var MAX_HWM = 0x800000;
21037function computeNewHighWaterMark(n) {
21038 if (n >= MAX_HWM) {
21039 n = MAX_HWM;
21040 } else {
21041 // Get the next highest power of 2 to prevent increasing hwm excessively in
21042 // tiny amounts
21043 n--;
21044 n |= n >>> 1;
21045 n |= n >>> 2;
21046 n |= n >>> 4;
21047 n |= n >>> 8;
21048 n |= n >>> 16;
21049 n++;
21050 }
21051 return n;
21052}
21053
21054// This function is designed to be inlinable, so please take care when making
21055// changes to the function body.
21056function howMuchToRead(n, state) {
21057 if (n <= 0 || state.length === 0 && state.ended) return 0;
21058 if (state.objectMode) return 1;
21059 if (n !== n) {
21060 // Only flow one buffer at a time
21061 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21062 }
21063 // If we're asking for more than the current hwm, then raise the hwm.
21064 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21065 if (n <= state.length) return n;
21066 // Don't have enough
21067 if (!state.ended) {
21068 state.needReadable = true;
21069 return 0;
21070 }
21071 return state.length;
21072}
21073
21074// you can override either this method, or the async _read(n) below.
21075Readable.prototype.read = function (n) {
21076 debug('read', n);
21077 n = parseInt(n, 10);
21078 var state = this._readableState;
21079 var nOrig = n;
21080
21081 if (n !== 0) state.emittedReadable = false;
21082
21083 // if we're doing read(0) to trigger a readable event, but we
21084 // already have a bunch of data in the buffer, then just trigger
21085 // the 'readable' event and move on.
21086 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21087 debug('read: emitReadable', state.length, state.ended);
21088 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21089 return null;
21090 }
21091
21092 n = howMuchToRead(n, state);
21093
21094 // if we've ended, and we're now clear, then finish it up.
21095 if (n === 0 && state.ended) {
21096 if (state.length === 0) endReadable(this);
21097 return null;
21098 }
21099
21100 // All the actual chunk generation logic needs to be
21101 // *below* the call to _read. The reason is that in certain
21102 // synthetic stream cases, such as passthrough streams, _read
21103 // may be a completely synchronous operation which may change
21104 // the state of the read buffer, providing enough data when
21105 // before there was *not* enough.
21106 //
21107 // So, the steps are:
21108 // 1. Figure out what the state of things will be after we do
21109 // a read from the buffer.
21110 //
21111 // 2. If that resulting state will trigger a _read, then call _read.
21112 // Note that this may be asynchronous, or synchronous. Yes, it is
21113 // deeply ugly to write APIs this way, but that still doesn't mean
21114 // that the Readable class should behave improperly, as streams are
21115 // designed to be sync/async agnostic.
21116 // Take note if the _read call is sync or async (ie, if the read call
21117 // has returned yet), so that we know whether or not it's safe to emit
21118 // 'readable' etc.
21119 //
21120 // 3. Actually pull the requested chunks out of the buffer and return.
21121
21122 // if we need a readable event, then we need to do some reading.
21123 var doRead = state.needReadable;
21124 debug('need readable', doRead);
21125
21126 // if we currently have less than the highWaterMark, then also read some
21127 if (state.length === 0 || state.length - n < state.highWaterMark) {
21128 doRead = true;
21129 debug('length less than watermark', doRead);
21130 }
21131
21132 // however, if we've ended, then there's no point, and if we're already
21133 // reading, then it's unnecessary.
21134 if (state.ended || state.reading) {
21135 doRead = false;
21136 debug('reading or ended', doRead);
21137 } else if (doRead) {
21138 debug('do read');
21139 state.reading = true;
21140 state.sync = true;
21141 // if the length is currently zero, then we *need* a readable event.
21142 if (state.length === 0) state.needReadable = true;
21143 // call internal read method
21144 this._read(state.highWaterMark);
21145 state.sync = false;
21146 // If _read pushed data synchronously, then `reading` will be false,
21147 // and we need to re-evaluate how much data we can return to the user.
21148 if (!state.reading) n = howMuchToRead(nOrig, state);
21149 }
21150
21151 var ret;
21152 if (n > 0) ret = fromList(n, state);else ret = null;
21153
21154 if (ret === null) {
21155 state.needReadable = true;
21156 n = 0;
21157 } else {
21158 state.length -= n;
21159 }
21160
21161 if (state.length === 0) {
21162 // If we have nothing in the buffer, then we want to know
21163 // as soon as we *do* get something into the buffer.
21164 if (!state.ended) state.needReadable = true;
21165
21166 // If we tried to read() past the EOF, then emit end on the next tick.
21167 if (nOrig !== n && state.ended) endReadable(this);
21168 }
21169
21170 if (ret !== null) this.emit('data', ret);
21171
21172 return ret;
21173};
21174
21175function chunkInvalid(state, chunk) {
21176 var er = null;
21177 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21178 er = new TypeError('Invalid non-string/buffer chunk');
21179 }
21180 return er;
21181}
21182
21183function onEofChunk(stream, state) {
21184 if (state.ended) return;
21185 if (state.decoder) {
21186 var chunk = state.decoder.end();
21187 if (chunk && chunk.length) {
21188 state.buffer.push(chunk);
21189 state.length += state.objectMode ? 1 : chunk.length;
21190 }
21191 }
21192 state.ended = true;
21193
21194 // emit 'readable' now to make sure it gets picked up.
21195 emitReadable(stream);
21196}
21197
21198// Don't emit readable right away in sync mode, because this can trigger
21199// another read() call => stack overflow. This way, it might trigger
21200// a nextTick recursion warning, but that's not so bad.
21201function emitReadable(stream) {
21202 var state = stream._readableState;
21203 state.needReadable = false;
21204 if (!state.emittedReadable) {
21205 debug('emitReadable', state.flowing);
21206 state.emittedReadable = true;
21207 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
21208 }
21209}
21210
21211function emitReadable_(stream) {
21212 debug('emit readable');
21213 stream.emit('readable');
21214 flow(stream);
21215}
21216
21217// at this point, the user has presumably seen the 'readable' event,
21218// and called read() to consume some data. that may have triggered
21219// in turn another _read(n) call, in which case reading = true if
21220// it's in progress.
21221// However, if we're not ended, or reading, and the length < hwm,
21222// then go ahead and try to read some more preemptively.
21223function maybeReadMore(stream, state) {
21224 if (!state.readingMore) {
21225 state.readingMore = true;
21226 processNextTick(maybeReadMore_, stream, state);
21227 }
21228}
21229
21230function maybeReadMore_(stream, state) {
21231 var len = state.length;
21232 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
21233 debug('maybeReadMore read 0');
21234 stream.read(0);
21235 if (len === state.length)
21236 // didn't get any data, stop spinning.
21237 break;else len = state.length;
21238 }
21239 state.readingMore = false;
21240}
21241
21242// abstract method. to be overridden in specific implementation classes.
21243// call cb(er, data) where data is <= n in length.
21244// for virtual (non-string, non-buffer) streams, "length" is somewhat
21245// arbitrary, and perhaps not very meaningful.
21246Readable.prototype._read = function (n) {
21247 this.emit('error', new Error('_read() is not implemented'));
21248};
21249
21250Readable.prototype.pipe = function (dest, pipeOpts) {
21251 var src = this;
21252 var state = this._readableState;
21253
21254 switch (state.pipesCount) {
21255 case 0:
21256 state.pipes = dest;
21257 break;
21258 case 1:
21259 state.pipes = [state.pipes, dest];
21260 break;
21261 default:
21262 state.pipes.push(dest);
21263 break;
21264 }
21265 state.pipesCount += 1;
21266 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
21267
21268 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
21269
21270 var endFn = doEnd ? onend : cleanup;
21271 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
21272
21273 dest.on('unpipe', onunpipe);
21274 function onunpipe(readable) {
21275 debug('onunpipe');
21276 if (readable === src) {
21277 cleanup();
21278 }
21279 }
21280
21281 function onend() {
21282 debug('onend');
21283 dest.end();
21284 }
21285
21286 // when the dest drains, it reduces the awaitDrain counter
21287 // on the source. This would be more elegant with a .once()
21288 // handler in flow(), but adding and removing repeatedly is
21289 // too slow.
21290 var ondrain = pipeOnDrain(src);
21291 dest.on('drain', ondrain);
21292
21293 var cleanedUp = false;
21294 function cleanup() {
21295 debug('cleanup');
21296 // cleanup event handlers once the pipe is broken
21297 dest.removeListener('close', onclose);
21298 dest.removeListener('finish', onfinish);
21299 dest.removeListener('drain', ondrain);
21300 dest.removeListener('error', onerror);
21301 dest.removeListener('unpipe', onunpipe);
21302 src.removeListener('end', onend);
21303 src.removeListener('end', cleanup);
21304 src.removeListener('data', ondata);
21305
21306 cleanedUp = true;
21307
21308 // if the reader is waiting for a drain event from this
21309 // specific writer, then it would cause it to never start
21310 // flowing again.
21311 // So, if this is awaiting a drain, then we just call it now.
21312 // If we don't know, then assume that we are waiting for one.
21313 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
21314 }
21315
21316 // If the user pushes more data while we're writing to dest then we'll end up
21317 // in ondata again. However, we only want to increase awaitDrain once because
21318 // dest will only emit one 'drain' event for the multiple writes.
21319 // => Introduce a guard on increasing awaitDrain.
21320 var increasedAwaitDrain = false;
21321 src.on('data', ondata);
21322 function ondata(chunk) {
21323 debug('ondata');
21324 increasedAwaitDrain = false;
21325 var ret = dest.write(chunk);
21326 if (false === ret && !increasedAwaitDrain) {
21327 // If the user unpiped during `dest.write()`, it is possible
21328 // to get stuck in a permanently paused state if that write
21329 // also returned false.
21330 // => Check whether `dest` is still a piping destination.
21331 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
21332 debug('false write response, pause', src._readableState.awaitDrain);
21333 src._readableState.awaitDrain++;
21334 increasedAwaitDrain = true;
21335 }
21336 src.pause();
21337 }
21338 }
21339
21340 // if the dest has an error, then stop piping into it.
21341 // however, don't suppress the throwing behavior for this.
21342 function onerror(er) {
21343 debug('onerror', er);
21344 unpipe();
21345 dest.removeListener('error', onerror);
21346 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
21347 }
21348
21349 // Make sure our error handler is attached before userland ones.
21350 prependListener(dest, 'error', onerror);
21351
21352 // Both close and finish should trigger unpipe, but only once.
21353 function onclose() {
21354 dest.removeListener('finish', onfinish);
21355 unpipe();
21356 }
21357 dest.once('close', onclose);
21358 function onfinish() {
21359 debug('onfinish');
21360 dest.removeListener('close', onclose);
21361 unpipe();
21362 }
21363 dest.once('finish', onfinish);
21364
21365 function unpipe() {
21366 debug('unpipe');
21367 src.unpipe(dest);
21368 }
21369
21370 // tell the dest that it's being piped to
21371 dest.emit('pipe', src);
21372
21373 // start the flow if it hasn't been started already.
21374 if (!state.flowing) {
21375 debug('pipe resume');
21376 src.resume();
21377 }
21378
21379 return dest;
21380};
21381
21382function pipeOnDrain(src) {
21383 return function () {
21384 var state = src._readableState;
21385 debug('pipeOnDrain', state.awaitDrain);
21386 if (state.awaitDrain) state.awaitDrain--;
21387 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
21388 state.flowing = true;
21389 flow(src);
21390 }
21391 };
21392}
21393
21394Readable.prototype.unpipe = function (dest) {
21395 var state = this._readableState;
21396
21397 // if we're not piping anywhere, then do nothing.
21398 if (state.pipesCount === 0) return this;
21399
21400 // just one destination. most common case.
21401 if (state.pipesCount === 1) {
21402 // passed in one, but it's not the right one.
21403 if (dest && dest !== state.pipes) return this;
21404
21405 if (!dest) dest = state.pipes;
21406
21407 // got a match.
21408 state.pipes = null;
21409 state.pipesCount = 0;
21410 state.flowing = false;
21411 if (dest) dest.emit('unpipe', this);
21412 return this;
21413 }
21414
21415 // slow case. multiple pipe destinations.
21416
21417 if (!dest) {
21418 // remove all.
21419 var dests = state.pipes;
21420 var len = state.pipesCount;
21421 state.pipes = null;
21422 state.pipesCount = 0;
21423 state.flowing = false;
21424
21425 for (var i = 0; i < len; i++) {
21426 dests[i].emit('unpipe', this);
21427 }return this;
21428 }
21429
21430 // try to find the right one.
21431 var index = indexOf(state.pipes, dest);
21432 if (index === -1) return this;
21433
21434 state.pipes.splice(index, 1);
21435 state.pipesCount -= 1;
21436 if (state.pipesCount === 1) state.pipes = state.pipes[0];
21437
21438 dest.emit('unpipe', this);
21439
21440 return this;
21441};
21442
21443// set up data events if they are asked for
21444// Ensure readable listeners eventually get something
21445Readable.prototype.on = function (ev, fn) {
21446 var res = Stream.prototype.on.call(this, ev, fn);
21447
21448 if (ev === 'data') {
21449 // Start flowing on next tick if stream isn't explicitly paused
21450 if (this._readableState.flowing !== false) this.resume();
21451 } else if (ev === 'readable') {
21452 var state = this._readableState;
21453 if (!state.endEmitted && !state.readableListening) {
21454 state.readableListening = state.needReadable = true;
21455 state.emittedReadable = false;
21456 if (!state.reading) {
21457 processNextTick(nReadingNextTick, this);
21458 } else if (state.length) {
21459 emitReadable(this, state);
21460 }
21461 }
21462 }
21463
21464 return res;
21465};
21466Readable.prototype.addListener = Readable.prototype.on;
21467
21468function nReadingNextTick(self) {
21469 debug('readable nexttick read 0');
21470 self.read(0);
21471}
21472
21473// pause() and resume() are remnants of the legacy readable stream API
21474// If the user uses them, then switch into old mode.
21475Readable.prototype.resume = function () {
21476 var state = this._readableState;
21477 if (!state.flowing) {
21478 debug('resume');
21479 state.flowing = true;
21480 resume(this, state);
21481 }
21482 return this;
21483};
21484
21485function resume(stream, state) {
21486 if (!state.resumeScheduled) {
21487 state.resumeScheduled = true;
21488 processNextTick(resume_, stream, state);
21489 }
21490}
21491
21492function resume_(stream, state) {
21493 if (!state.reading) {
21494 debug('resume read 0');
21495 stream.read(0);
21496 }
21497
21498 state.resumeScheduled = false;
21499 state.awaitDrain = 0;
21500 stream.emit('resume');
21501 flow(stream);
21502 if (state.flowing && !state.reading) stream.read(0);
21503}
21504
21505Readable.prototype.pause = function () {
21506 debug('call pause flowing=%j', this._readableState.flowing);
21507 if (false !== this._readableState.flowing) {
21508 debug('pause');
21509 this._readableState.flowing = false;
21510 this.emit('pause');
21511 }
21512 return this;
21513};
21514
21515function flow(stream) {
21516 var state = stream._readableState;
21517 debug('flow', state.flowing);
21518 while (state.flowing && stream.read() !== null) {}
21519}
21520
21521// wrap an old-style stream as the async data source.
21522// This is *not* part of the readable stream interface.
21523// It is an ugly unfortunate mess of history.
21524Readable.prototype.wrap = function (stream) {
21525 var state = this._readableState;
21526 var paused = false;
21527
21528 var self = this;
21529 stream.on('end', function () {
21530 debug('wrapped end');
21531 if (state.decoder && !state.ended) {
21532 var chunk = state.decoder.end();
21533 if (chunk && chunk.length) self.push(chunk);
21534 }
21535
21536 self.push(null);
21537 });
21538
21539 stream.on('data', function (chunk) {
21540 debug('wrapped data');
21541 if (state.decoder) chunk = state.decoder.write(chunk);
21542
21543 // don't skip over falsy values in objectMode
21544 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
21545
21546 var ret = self.push(chunk);
21547 if (!ret) {
21548 paused = true;
21549 stream.pause();
21550 }
21551 });
21552
21553 // proxy all the other methods.
21554 // important when wrapping filters and duplexes.
21555 for (var i in stream) {
21556 if (this[i] === undefined && typeof stream[i] === 'function') {
21557 this[i] = function (method) {
21558 return function () {
21559 return stream[method].apply(stream, arguments);
21560 };
21561 }(i);
21562 }
21563 }
21564
21565 // proxy certain important events.
21566 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
21567 forEach(events, function (ev) {
21568 stream.on(ev, self.emit.bind(self, ev));
21569 });
21570
21571 // when we try to consume some more bytes, simply unpause the
21572 // underlying stream.
21573 self._read = function (n) {
21574 debug('wrapped _read', n);
21575 if (paused) {
21576 paused = false;
21577 stream.resume();
21578 }
21579 };
21580
21581 return self;
21582};
21583
21584// exposed for testing purposes only.
21585Readable._fromList = fromList;
21586
21587// Pluck off n bytes from an array of buffers.
21588// Length is the combined lengths of all the buffers in the list.
21589// This function is designed to be inlinable, so please take care when making
21590// changes to the function body.
21591function fromList(n, state) {
21592 // nothing buffered
21593 if (state.length === 0) return null;
21594
21595 var ret;
21596 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
21597 // read it all, truncate the list
21598 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
21599 state.buffer.clear();
21600 } else {
21601 // read part of list
21602 ret = fromListPartial(n, state.buffer, state.decoder);
21603 }
21604
21605 return ret;
21606}
21607
21608// Extracts only enough buffered data to satisfy the amount requested.
21609// This function is designed to be inlinable, so please take care when making
21610// changes to the function body.
21611function fromListPartial(n, list, hasStrings) {
21612 var ret;
21613 if (n < list.head.data.length) {
21614 // slice is the same for buffers and strings
21615 ret = list.head.data.slice(0, n);
21616 list.head.data = list.head.data.slice(n);
21617 } else if (n === list.head.data.length) {
21618 // first chunk is a perfect match
21619 ret = list.shift();
21620 } else {
21621 // result spans more than one buffer
21622 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
21623 }
21624 return ret;
21625}
21626
21627// Copies a specified amount of characters from the list of buffered data
21628// chunks.
21629// This function is designed to be inlinable, so please take care when making
21630// changes to the function body.
21631function copyFromBufferString(n, list) {
21632 var p = list.head;
21633 var c = 1;
21634 var ret = p.data;
21635 n -= ret.length;
21636 while (p = p.next) {
21637 var str = p.data;
21638 var nb = n > str.length ? str.length : n;
21639 if (nb === str.length) ret += str;else ret += str.slice(0, n);
21640 n -= nb;
21641 if (n === 0) {
21642 if (nb === str.length) {
21643 ++c;
21644 if (p.next) list.head = p.next;else list.head = list.tail = null;
21645 } else {
21646 list.head = p;
21647 p.data = str.slice(nb);
21648 }
21649 break;
21650 }
21651 ++c;
21652 }
21653 list.length -= c;
21654 return ret;
21655}
21656
21657// Copies a specified amount of bytes from the list of buffered data chunks.
21658// This function is designed to be inlinable, so please take care when making
21659// changes to the function body.
21660function copyFromBuffer(n, list) {
21661 var ret = bufferShim.allocUnsafe(n);
21662 var p = list.head;
21663 var c = 1;
21664 p.data.copy(ret);
21665 n -= p.data.length;
21666 while (p = p.next) {
21667 var buf = p.data;
21668 var nb = n > buf.length ? buf.length : n;
21669 buf.copy(ret, ret.length - n, 0, nb);
21670 n -= nb;
21671 if (n === 0) {
21672 if (nb === buf.length) {
21673 ++c;
21674 if (p.next) list.head = p.next;else list.head = list.tail = null;
21675 } else {
21676 list.head = p;
21677 p.data = buf.slice(nb);
21678 }
21679 break;
21680 }
21681 ++c;
21682 }
21683 list.length -= c;
21684 return ret;
21685}
21686
21687function endReadable(stream) {
21688 var state = stream._readableState;
21689
21690 // If we get here before consuming all the bytes, then that is a
21691 // bug in node. Should never happen.
21692 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
21693
21694 if (!state.endEmitted) {
21695 state.ended = true;
21696 processNextTick(endReadableNT, state, stream);
21697 }
21698}
21699
21700function endReadableNT(state, stream) {
21701 // Check that we didn't get one last unshift.
21702 if (!state.endEmitted && state.length === 0) {
21703 state.endEmitted = true;
21704 stream.readable = false;
21705 stream.emit('end');
21706 }
21707}
21708
21709function forEach(xs, f) {
21710 for (var i = 0, l = xs.length; i < l; i++) {
21711 f(xs[i], i);
21712 }
21713}
21714
21715function indexOf(xs, x) {
21716 for (var i = 0, l = xs.length; i < l; i++) {
21717 if (xs[i] === x) return i;
21718 }
21719 return -1;
21720}
21721}).call(this,require('_process'))
21722},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
21723// a transform stream is a readable/writable stream where you do
21724// something with the data. Sometimes it's called a "filter",
21725// but that's not a great name for it, since that implies a thing where
21726// some bits pass through, and others are simply ignored. (That would
21727// be a valid example of a transform, of course.)
21728//
21729// While the output is causally related to the input, it's not a
21730// necessarily symmetric or synchronous transformation. For example,
21731// a zlib stream might take multiple plain-text writes(), and then
21732// emit a single compressed chunk some time in the future.
21733//
21734// Here's how this works:
21735//
21736// The Transform stream has all the aspects of the readable and writable
21737// stream classes. When you write(chunk), that calls _write(chunk,cb)
21738// internally, and returns false if there's a lot of pending writes
21739// buffered up. When you call read(), that calls _read(n) until
21740// there's enough pending readable data buffered up.
21741//
21742// In a transform stream, the written data is placed in a buffer. When
21743// _read(n) is called, it transforms the queued up data, calling the
21744// buffered _write cb's as it consumes chunks. If consuming a single
21745// written chunk would result in multiple output chunks, then the first
21746// outputted bit calls the readcb, and subsequent chunks just go into
21747// the read buffer, and will cause it to emit 'readable' if necessary.
21748//
21749// This way, back-pressure is actually determined by the reading side,
21750// since _read has to be called to start processing a new chunk. However,
21751// a pathological inflate type of transform can cause excessive buffering
21752// here. For example, imagine a stream where every byte of input is
21753// interpreted as an integer from 0-255, and then results in that many
21754// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
21755// 1kb of data being output. In this case, you could write a very small
21756// amount of input, and end up with a very large amount of output. In
21757// such a pathological inflating mechanism, there'd be no way to tell
21758// the system to stop doing the transform. A single 4MB write could
21759// cause the system to run out of memory.
21760//
21761// However, even in such a pathological case, only a single written chunk
21762// would be consumed, and then the rest would wait (un-transformed) until
21763// the results of the previous transformed chunk were consumed.
21764
21765'use strict';
21766
21767module.exports = Transform;
21768
21769var Duplex = require('./_stream_duplex');
21770
21771/*<replacement>*/
21772var util = require('core-util-is');
21773util.inherits = require('inherits');
21774/*</replacement>*/
21775
21776util.inherits(Transform, Duplex);
21777
21778function TransformState(stream) {
21779 this.afterTransform = function (er, data) {
21780 return afterTransform(stream, er, data);
21781 };
21782
21783 this.needTransform = false;
21784 this.transforming = false;
21785 this.writecb = null;
21786 this.writechunk = null;
21787 this.writeencoding = null;
21788}
21789
21790function afterTransform(stream, er, data) {
21791 var ts = stream._transformState;
21792 ts.transforming = false;
21793
21794 var cb = ts.writecb;
21795
21796 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
21797
21798 ts.writechunk = null;
21799 ts.writecb = null;
21800
21801 if (data !== null && data !== undefined) stream.push(data);
21802
21803 cb(er);
21804
21805 var rs = stream._readableState;
21806 rs.reading = false;
21807 if (rs.needReadable || rs.length < rs.highWaterMark) {
21808 stream._read(rs.highWaterMark);
21809 }
21810}
21811
21812function Transform(options) {
21813 if (!(this instanceof Transform)) return new Transform(options);
21814
21815 Duplex.call(this, options);
21816
21817 this._transformState = new TransformState(this);
21818
21819 var stream = this;
21820
21821 // start out asking for a readable event once data is transformed.
21822 this._readableState.needReadable = true;
21823
21824 // we have implemented the _read method, and done the other things
21825 // that Readable wants before the first _read call, so unset the
21826 // sync guard flag.
21827 this._readableState.sync = false;
21828
21829 if (options) {
21830 if (typeof options.transform === 'function') this._transform = options.transform;
21831
21832 if (typeof options.flush === 'function') this._flush = options.flush;
21833 }
21834
21835 // When the writable side finishes, then flush out anything remaining.
21836 this.once('prefinish', function () {
21837 if (typeof this._flush === 'function') this._flush(function (er, data) {
21838 done(stream, er, data);
21839 });else done(stream);
21840 });
21841}
21842
21843Transform.prototype.push = function (chunk, encoding) {
21844 this._transformState.needTransform = false;
21845 return Duplex.prototype.push.call(this, chunk, encoding);
21846};
21847
21848// This is the part where you do stuff!
21849// override this function in implementation classes.
21850// 'chunk' is an input chunk.
21851//
21852// Call `push(newChunk)` to pass along transformed output
21853// to the readable side. You may call 'push' zero or more times.
21854//
21855// Call `cb(err)` when you are done with this chunk. If you pass
21856// an error, then that'll put the hurt on the whole operation. If you
21857// never call cb(), then you'll never get another chunk.
21858Transform.prototype._transform = function (chunk, encoding, cb) {
21859 throw new Error('_transform() is not implemented');
21860};
21861
21862Transform.prototype._write = function (chunk, encoding, cb) {
21863 var ts = this._transformState;
21864 ts.writecb = cb;
21865 ts.writechunk = chunk;
21866 ts.writeencoding = encoding;
21867 if (!ts.transforming) {
21868 var rs = this._readableState;
21869 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
21870 }
21871};
21872
21873// Doesn't matter what the args are here.
21874// _transform does all the work.
21875// That we got here means that the readable side wants more data.
21876Transform.prototype._read = function (n) {
21877 var ts = this._transformState;
21878
21879 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
21880 ts.transforming = true;
21881 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
21882 } else {
21883 // mark that we need a transform, so that any data that comes in
21884 // will get processed, now that we've asked for it.
21885 ts.needTransform = true;
21886 }
21887};
21888
21889function done(stream, er, data) {
21890 if (er) return stream.emit('error', er);
21891
21892 if (data !== null && data !== undefined) stream.push(data);
21893
21894 // if there's nothing in the write buffer, then that means
21895 // that nothing more will ever be provided
21896 var ws = stream._writableState;
21897 var ts = stream._transformState;
21898
21899 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
21900
21901 if (ts.transforming) throw new Error('Calling transform done when still transforming');
21902
21903 return stream.push(null);
21904}
21905},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
21906(function (process){
21907// A bit simpler than readable streams.
21908// Implement an async ._write(chunk, encoding, cb), and it'll handle all
21909// the drain event emission and buffering.
21910
21911'use strict';
21912
21913module.exports = Writable;
21914
21915/*<replacement>*/
21916var processNextTick = require('process-nextick-args');
21917/*</replacement>*/
21918
21919/*<replacement>*/
21920var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
21921/*</replacement>*/
21922
21923/*<replacement>*/
21924var Duplex;
21925/*</replacement>*/
21926
21927Writable.WritableState = WritableState;
21928
21929/*<replacement>*/
21930var util = require('core-util-is');
21931util.inherits = require('inherits');
21932/*</replacement>*/
21933
21934/*<replacement>*/
21935var internalUtil = {
21936 deprecate: require('util-deprecate')
21937};
21938/*</replacement>*/
21939
21940/*<replacement>*/
21941var Stream;
21942(function () {
21943 try {
21944 Stream = require('st' + 'ream');
21945 } catch (_) {} finally {
21946 if (!Stream) Stream = require('events').EventEmitter;
21947 }
21948})();
21949/*</replacement>*/
21950
21951var Buffer = require('buffer').Buffer;
21952/*<replacement>*/
21953var bufferShim = require('buffer-shims');
21954/*</replacement>*/
21955
21956util.inherits(Writable, Stream);
21957
21958function nop() {}
21959
21960function WriteReq(chunk, encoding, cb) {
21961 this.chunk = chunk;
21962 this.encoding = encoding;
21963 this.callback = cb;
21964 this.next = null;
21965}
21966
21967function WritableState(options, stream) {
21968 Duplex = Duplex || require('./_stream_duplex');
21969
21970 options = options || {};
21971
21972 // object stream flag to indicate whether or not this stream
21973 // contains buffers or objects.
21974 this.objectMode = !!options.objectMode;
21975
21976 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
21977
21978 // the point at which write() starts returning false
21979 // Note: 0 is a valid value, means that we always return false if
21980 // the entire buffer is not flushed immediately on write()
21981 var hwm = options.highWaterMark;
21982 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
21983 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
21984
21985 // cast to ints.
21986 this.highWaterMark = ~ ~this.highWaterMark;
21987
21988 // drain event flag.
21989 this.needDrain = false;
21990 // at the start of calling end()
21991 this.ending = false;
21992 // when end() has been called, and returned
21993 this.ended = false;
21994 // when 'finish' is emitted
21995 this.finished = false;
21996
21997 // should we decode strings into buffers before passing to _write?
21998 // this is here so that some node-core streams can optimize string
21999 // handling at a lower level.
22000 var noDecode = options.decodeStrings === false;
22001 this.decodeStrings = !noDecode;
22002
22003 // Crypto is kind of old and crusty. Historically, its default string
22004 // encoding is 'binary' so we have to make this configurable.
22005 // Everything else in the universe uses 'utf8', though.
22006 this.defaultEncoding = options.defaultEncoding || 'utf8';
22007
22008 // not an actual buffer we keep track of, but a measurement
22009 // of how much we're waiting to get pushed to some underlying
22010 // socket or file.
22011 this.length = 0;
22012
22013 // a flag to see when we're in the middle of a write.
22014 this.writing = false;
22015
22016 // when true all writes will be buffered until .uncork() call
22017 this.corked = 0;
22018
22019 // a flag to be able to tell if the onwrite cb is called immediately,
22020 // or on a later tick. We set this to true at first, because any
22021 // actions that shouldn't happen until "later" should generally also
22022 // not happen before the first write call.
22023 this.sync = true;
22024
22025 // a flag to know if we're processing previously buffered items, which
22026 // may call the _write() callback in the same tick, so that we don't
22027 // end up in an overlapped onwrite situation.
22028 this.bufferProcessing = false;
22029
22030 // the callback that's passed to _write(chunk,cb)
22031 this.onwrite = function (er) {
22032 onwrite(stream, er);
22033 };
22034
22035 // the callback that the user supplies to write(chunk,encoding,cb)
22036 this.writecb = null;
22037
22038 // the amount that is being written when _write is called.
22039 this.writelen = 0;
22040
22041 this.bufferedRequest = null;
22042 this.lastBufferedRequest = null;
22043
22044 // number of pending user-supplied write callbacks
22045 // this must be 0 before 'finish' can be emitted
22046 this.pendingcb = 0;
22047
22048 // emit prefinish if the only thing we're waiting for is _write cbs
22049 // This is relevant for synchronous Transform streams
22050 this.prefinished = false;
22051
22052 // True if the error was already emitted and should not be thrown again
22053 this.errorEmitted = false;
22054
22055 // count buffered requests
22056 this.bufferedRequestCount = 0;
22057
22058 // allocate the first CorkedRequest, there is always
22059 // one allocated and free to use, and we maintain at most two
22060 this.corkedRequestsFree = new CorkedRequest(this);
22061}
22062
22063WritableState.prototype.getBuffer = function getBuffer() {
22064 var current = this.bufferedRequest;
22065 var out = [];
22066 while (current) {
22067 out.push(current);
22068 current = current.next;
22069 }
22070 return out;
22071};
22072
22073(function () {
22074 try {
22075 Object.defineProperty(WritableState.prototype, 'buffer', {
22076 get: internalUtil.deprecate(function () {
22077 return this.getBuffer();
22078 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22079 });
22080 } catch (_) {}
22081})();
22082
22083// Test _writableState for inheritance to account for Duplex streams,
22084// whose prototype chain only points to Readable.
22085var realHasInstance;
22086if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22087 realHasInstance = Function.prototype[Symbol.hasInstance];
22088 Object.defineProperty(Writable, Symbol.hasInstance, {
22089 value: function (object) {
22090 if (realHasInstance.call(this, object)) return true;
22091
22092 return object && object._writableState instanceof WritableState;
22093 }
22094 });
22095} else {
22096 realHasInstance = function (object) {
22097 return object instanceof this;
22098 };
22099}
22100
22101function Writable(options) {
22102 Duplex = Duplex || require('./_stream_duplex');
22103
22104 // Writable ctor is applied to Duplexes, too.
22105 // `realHasInstance` is necessary because using plain `instanceof`
22106 // would return false, as no `_writableState` property is attached.
22107
22108 // Trying to use the custom `instanceof` for Writable here will also break the
22109 // Node.js LazyTransform implementation, which has a non-trivial getter for
22110 // `_writableState` that would lead to infinite recursion.
22111 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22112 return new Writable(options);
22113 }
22114
22115 this._writableState = new WritableState(options, this);
22116
22117 // legacy.
22118 this.writable = true;
22119
22120 if (options) {
22121 if (typeof options.write === 'function') this._write = options.write;
22122
22123 if (typeof options.writev === 'function') this._writev = options.writev;
22124 }
22125
22126 Stream.call(this);
22127}
22128
22129// Otherwise people can pipe Writable streams, which is just wrong.
22130Writable.prototype.pipe = function () {
22131 this.emit('error', new Error('Cannot pipe, not readable'));
22132};
22133
22134function writeAfterEnd(stream, cb) {
22135 var er = new Error('write after end');
22136 // TODO: defer error events consistently everywhere, not just the cb
22137 stream.emit('error', er);
22138 processNextTick(cb, er);
22139}
22140
22141// If we get something that is not a buffer, string, null, or undefined,
22142// and we're not in objectMode, then that's an error.
22143// Otherwise stream chunks are all considered to be of length=1, and the
22144// watermarks determine how many objects to keep in the buffer, rather than
22145// how many bytes or characters.
22146function validChunk(stream, state, chunk, cb) {
22147 var valid = true;
22148 var er = false;
22149 // Always throw error if a null is written
22150 // if we are not in object mode then throw
22151 // if it is not a buffer, string, or undefined.
22152 if (chunk === null) {
22153 er = new TypeError('May not write null values to stream');
22154 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22155 er = new TypeError('Invalid non-string/buffer chunk');
22156 }
22157 if (er) {
22158 stream.emit('error', er);
22159 processNextTick(cb, er);
22160 valid = false;
22161 }
22162 return valid;
22163}
22164
22165Writable.prototype.write = function (chunk, encoding, cb) {
22166 var state = this._writableState;
22167 var ret = false;
22168
22169 if (typeof encoding === 'function') {
22170 cb = encoding;
22171 encoding = null;
22172 }
22173
22174 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
22175
22176 if (typeof cb !== 'function') cb = nop;
22177
22178 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22179 state.pendingcb++;
22180 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22181 }
22182
22183 return ret;
22184};
22185
22186Writable.prototype.cork = function () {
22187 var state = this._writableState;
22188
22189 state.corked++;
22190};
22191
22192Writable.prototype.uncork = function () {
22193 var state = this._writableState;
22194
22195 if (state.corked) {
22196 state.corked--;
22197
22198 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
22199 }
22200};
22201
22202Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
22203 // node::ParseEncoding() requires lower case.
22204 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
22205 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
22206 this._writableState.defaultEncoding = encoding;
22207 return this;
22208};
22209
22210function decodeChunk(state, chunk, encoding) {
22211 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
22212 chunk = bufferShim.from(chunk, encoding);
22213 }
22214 return chunk;
22215}
22216
22217// if we're already writing something, then just put this
22218// in the queue, and wait our turn. Otherwise, call _write
22219// If we return false, then we need a drain event, so set that flag.
22220function writeOrBuffer(stream, state, chunk, encoding, cb) {
22221 chunk = decodeChunk(state, chunk, encoding);
22222
22223 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
22224 var len = state.objectMode ? 1 : chunk.length;
22225
22226 state.length += len;
22227
22228 var ret = state.length < state.highWaterMark;
22229 // we must ensure that previous needDrain will not be reset to false.
22230 if (!ret) state.needDrain = true;
22231
22232 if (state.writing || state.corked) {
22233 var last = state.lastBufferedRequest;
22234 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
22235 if (last) {
22236 last.next = state.lastBufferedRequest;
22237 } else {
22238 state.bufferedRequest = state.lastBufferedRequest;
22239 }
22240 state.bufferedRequestCount += 1;
22241 } else {
22242 doWrite(stream, state, false, len, chunk, encoding, cb);
22243 }
22244
22245 return ret;
22246}
22247
22248function doWrite(stream, state, writev, len, chunk, encoding, cb) {
22249 state.writelen = len;
22250 state.writecb = cb;
22251 state.writing = true;
22252 state.sync = true;
22253 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
22254 state.sync = false;
22255}
22256
22257function onwriteError(stream, state, sync, er, cb) {
22258 --state.pendingcb;
22259 if (sync) processNextTick(cb, er);else cb(er);
22260
22261 stream._writableState.errorEmitted = true;
22262 stream.emit('error', er);
22263}
22264
22265function onwriteStateUpdate(state) {
22266 state.writing = false;
22267 state.writecb = null;
22268 state.length -= state.writelen;
22269 state.writelen = 0;
22270}
22271
22272function onwrite(stream, er) {
22273 var state = stream._writableState;
22274 var sync = state.sync;
22275 var cb = state.writecb;
22276
22277 onwriteStateUpdate(state);
22278
22279 if (er) onwriteError(stream, state, sync, er, cb);else {
22280 // Check if we're actually ready to finish, but don't emit yet
22281 var finished = needFinish(state);
22282
22283 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
22284 clearBuffer(stream, state);
22285 }
22286
22287 if (sync) {
22288 /*<replacement>*/
22289 asyncWrite(afterWrite, stream, state, finished, cb);
22290 /*</replacement>*/
22291 } else {
22292 afterWrite(stream, state, finished, cb);
22293 }
22294 }
22295}
22296
22297function afterWrite(stream, state, finished, cb) {
22298 if (!finished) onwriteDrain(stream, state);
22299 state.pendingcb--;
22300 cb();
22301 finishMaybe(stream, state);
22302}
22303
22304// Must force callback to be called on nextTick, so that we don't
22305// emit 'drain' before the write() consumer gets the 'false' return
22306// value, and has a chance to attach a 'drain' listener.
22307function onwriteDrain(stream, state) {
22308 if (state.length === 0 && state.needDrain) {
22309 state.needDrain = false;
22310 stream.emit('drain');
22311 }
22312}
22313
22314// if there's something in the buffer waiting, then process it
22315function clearBuffer(stream, state) {
22316 state.bufferProcessing = true;
22317 var entry = state.bufferedRequest;
22318
22319 if (stream._writev && entry && entry.next) {
22320 // Fast case, write everything using _writev()
22321 var l = state.bufferedRequestCount;
22322 var buffer = new Array(l);
22323 var holder = state.corkedRequestsFree;
22324 holder.entry = entry;
22325
22326 var count = 0;
22327 while (entry) {
22328 buffer[count] = entry;
22329 entry = entry.next;
22330 count += 1;
22331 }
22332
22333 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
22334
22335 // doWrite is almost always async, defer these to save a bit of time
22336 // as the hot path ends with doWrite
22337 state.pendingcb++;
22338 state.lastBufferedRequest = null;
22339 if (holder.next) {
22340 state.corkedRequestsFree = holder.next;
22341 holder.next = null;
22342 } else {
22343 state.corkedRequestsFree = new CorkedRequest(state);
22344 }
22345 } else {
22346 // Slow case, write chunks one-by-one
22347 while (entry) {
22348 var chunk = entry.chunk;
22349 var encoding = entry.encoding;
22350 var cb = entry.callback;
22351 var len = state.objectMode ? 1 : chunk.length;
22352
22353 doWrite(stream, state, false, len, chunk, encoding, cb);
22354 entry = entry.next;
22355 // if we didn't call the onwrite immediately, then
22356 // it means that we need to wait until it does.
22357 // also, that means that the chunk and cb are currently
22358 // being processed, so move the buffer counter past them.
22359 if (state.writing) {
22360 break;
22361 }
22362 }
22363
22364 if (entry === null) state.lastBufferedRequest = null;
22365 }
22366
22367 state.bufferedRequestCount = 0;
22368 state.bufferedRequest = entry;
22369 state.bufferProcessing = false;
22370}
22371
22372Writable.prototype._write = function (chunk, encoding, cb) {
22373 cb(new Error('_write() is not implemented'));
22374};
22375
22376Writable.prototype._writev = null;
22377
22378Writable.prototype.end = function (chunk, encoding, cb) {
22379 var state = this._writableState;
22380
22381 if (typeof chunk === 'function') {
22382 cb = chunk;
22383 chunk = null;
22384 encoding = null;
22385 } else if (typeof encoding === 'function') {
22386 cb = encoding;
22387 encoding = null;
22388 }
22389
22390 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
22391
22392 // .end() fully uncorks
22393 if (state.corked) {
22394 state.corked = 1;
22395 this.uncork();
22396 }
22397
22398 // ignore unnecessary end() calls.
22399 if (!state.ending && !state.finished) endWritable(this, state, cb);
22400};
22401
22402function needFinish(state) {
22403 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
22404}
22405
22406function prefinish(stream, state) {
22407 if (!state.prefinished) {
22408 state.prefinished = true;
22409 stream.emit('prefinish');
22410 }
22411}
22412
22413function finishMaybe(stream, state) {
22414 var need = needFinish(state);
22415 if (need) {
22416 if (state.pendingcb === 0) {
22417 prefinish(stream, state);
22418 state.finished = true;
22419 stream.emit('finish');
22420 } else {
22421 prefinish(stream, state);
22422 }
22423 }
22424 return need;
22425}
22426
22427function endWritable(stream, state, cb) {
22428 state.ending = true;
22429 finishMaybe(stream, state);
22430 if (cb) {
22431 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
22432 }
22433 state.ended = true;
22434 stream.writable = false;
22435}
22436
22437// It seems a linked list but it is not
22438// there will be only 2 of these for each stream
22439function CorkedRequest(state) {
22440 var _this = this;
22441
22442 this.next = null;
22443 this.entry = null;
22444
22445 this.finish = function (err) {
22446 var entry = _this.entry;
22447 _this.entry = null;
22448 while (entry) {
22449 var cb = entry.callback;
22450 state.pendingcb--;
22451 cb(err);
22452 entry = entry.next;
22453 }
22454 if (state.corkedRequestsFree) {
22455 state.corkedRequestsFree.next = _this;
22456 } else {
22457 state.corkedRequestsFree = _this;
22458 }
22459 };
22460}
22461}).call(this,require('_process'))
22462},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
22463'use strict';
22464
22465var Buffer = require('buffer').Buffer;
22466/*<replacement>*/
22467var bufferShim = require('buffer-shims');
22468/*</replacement>*/
22469
22470module.exports = BufferList;
22471
22472function BufferList() {
22473 this.head = null;
22474 this.tail = null;
22475 this.length = 0;
22476}
22477
22478BufferList.prototype.push = function (v) {
22479 var entry = { data: v, next: null };
22480 if (this.length > 0) this.tail.next = entry;else this.head = entry;
22481 this.tail = entry;
22482 ++this.length;
22483};
22484
22485BufferList.prototype.unshift = function (v) {
22486 var entry = { data: v, next: this.head };
22487 if (this.length === 0) this.tail = entry;
22488 this.head = entry;
22489 ++this.length;
22490};
22491
22492BufferList.prototype.shift = function () {
22493 if (this.length === 0) return;
22494 var ret = this.head.data;
22495 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
22496 --this.length;
22497 return ret;
22498};
22499
22500BufferList.prototype.clear = function () {
22501 this.head = this.tail = null;
22502 this.length = 0;
22503};
22504
22505BufferList.prototype.join = function (s) {
22506 if (this.length === 0) return '';
22507 var p = this.head;
22508 var ret = '' + p.data;
22509 while (p = p.next) {
22510 ret += s + p.data;
22511 }return ret;
22512};
22513
22514BufferList.prototype.concat = function (n) {
22515 if (this.length === 0) return bufferShim.alloc(0);
22516 if (this.length === 1) return this.head.data;
22517 var ret = bufferShim.allocUnsafe(n >>> 0);
22518 var p = this.head;
22519 var i = 0;
22520 while (p) {
22521 p.data.copy(ret, i);
22522 i += p.data.length;
22523 p = p.next;
22524 }
22525 return ret;
22526};
22527},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
22528module.exports = require("./lib/_stream_passthrough.js")
22529
22530},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
22531(function (process){
22532var Stream = (function (){
22533 try {
22534 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
22535 } catch(_){}
22536}());
22537exports = module.exports = require('./lib/_stream_readable.js');
22538exports.Stream = Stream || exports;
22539exports.Readable = exports;
22540exports.Writable = require('./lib/_stream_writable.js');
22541exports.Duplex = require('./lib/_stream_duplex.js');
22542exports.Transform = require('./lib/_stream_transform.js');
22543exports.PassThrough = require('./lib/_stream_passthrough.js');
22544
22545if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
22546 module.exports = Stream;
22547}
22548
22549}).call(this,require('_process'))
22550},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
22551module.exports = require("./lib/_stream_transform.js")
22552
22553},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
22554module.exports = require("./lib/_stream_writable.js")
22555
22556},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
22557// Copyright Joyent, Inc. and other Node contributors.
22558//
22559// Permission is hereby granted, free of charge, to any person obtaining a
22560// copy of this software and associated documentation files (the
22561// "Software"), to deal in the Software without restriction, including
22562// without limitation the rights to use, copy, modify, merge, publish,
22563// distribute, sublicense, and/or sell copies of the Software, and to permit
22564// persons to whom the Software is furnished to do so, subject to the
22565// following conditions:
22566//
22567// The above copyright notice and this permission notice shall be included
22568// in all copies or substantial portions of the Software.
22569//
22570// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22571// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22572// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22573// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22574// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22575// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22576// USE OR OTHER DEALINGS IN THE SOFTWARE.
22577
22578module.exports = Stream;
22579
22580var EE = require('events').EventEmitter;
22581var inherits = require('inherits');
22582
22583inherits(Stream, EE);
22584Stream.Readable = require('readable-stream/readable.js');
22585Stream.Writable = require('readable-stream/writable.js');
22586Stream.Duplex = require('readable-stream/duplex.js');
22587Stream.Transform = require('readable-stream/transform.js');
22588Stream.PassThrough = require('readable-stream/passthrough.js');
22589
22590// Backwards-compat with node 0.4.x
22591Stream.Stream = Stream;
22592
22593
22594
22595// old-style streams. Note that the pipe method (the only relevant
22596// part of this class) is overridden in the Readable class.
22597
22598function Stream() {
22599 EE.call(this);
22600}
22601
22602Stream.prototype.pipe = function(dest, options) {
22603 var source = this;
22604
22605 function ondata(chunk) {
22606 if (dest.writable) {
22607 if (false === dest.write(chunk) && source.pause) {
22608 source.pause();
22609 }
22610 }
22611 }
22612
22613 source.on('data', ondata);
22614
22615 function ondrain() {
22616 if (source.readable && source.resume) {
22617 source.resume();
22618 }
22619 }
22620
22621 dest.on('drain', ondrain);
22622
22623 // If the 'end' option is not supplied, dest.end() will be called when
22624 // source gets the 'end' or 'close' events. Only dest.end() once.
22625 if (!dest._isStdio && (!options || options.end !== false)) {
22626 source.on('end', onend);
22627 source.on('close', onclose);
22628 }
22629
22630 var didOnEnd = false;
22631 function onend() {
22632 if (didOnEnd) return;
22633 didOnEnd = true;
22634
22635 dest.end();
22636 }
22637
22638
22639 function onclose() {
22640 if (didOnEnd) return;
22641 didOnEnd = true;
22642
22643 if (typeof dest.destroy === 'function') dest.destroy();
22644 }
22645
22646 // don't leave dangling pipes when there are errors.
22647 function onerror(er) {
22648 cleanup();
22649 if (EE.listenerCount(this, 'error') === 0) {
22650 throw er; // Unhandled stream error in pipe.
22651 }
22652 }
22653
22654 source.on('error', onerror);
22655 dest.on('error', onerror);
22656
22657 // remove all the event listeners that were added.
22658 function cleanup() {
22659 source.removeListener('data', ondata);
22660 dest.removeListener('drain', ondrain);
22661
22662 source.removeListener('end', onend);
22663 source.removeListener('close', onclose);
22664
22665 source.removeListener('error', onerror);
22666 dest.removeListener('error', onerror);
22667
22668 source.removeListener('end', cleanup);
22669 source.removeListener('close', cleanup);
22670
22671 dest.removeListener('close', cleanup);
22672 }
22673
22674 source.on('end', cleanup);
22675 source.on('close', cleanup);
22676
22677 dest.on('close', cleanup);
22678
22679 dest.emit('pipe', source);
22680
22681 // Allow for unix-like usage: A.pipe(B).pipe(C)
22682 return dest;
22683};
22684
22685},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
22686// Copyright Joyent, Inc. and other Node contributors.
22687//
22688// Permission is hereby granted, free of charge, to any person obtaining a
22689// copy of this software and associated documentation files (the
22690// "Software"), to deal in the Software without restriction, including
22691// without limitation the rights to use, copy, modify, merge, publish,
22692// distribute, sublicense, and/or sell copies of the Software, and to permit
22693// persons to whom the Software is furnished to do so, subject to the
22694// following conditions:
22695//
22696// The above copyright notice and this permission notice shall be included
22697// in all copies or substantial portions of the Software.
22698//
22699// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22700// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22701// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22702// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22703// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22704// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22705// USE OR OTHER DEALINGS IN THE SOFTWARE.
22706
22707var Buffer = require('buffer').Buffer;
22708
22709var isBufferEncoding = Buffer.isEncoding
22710 || function(encoding) {
22711 switch (encoding && encoding.toLowerCase()) {
22712 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
22713 default: return false;
22714 }
22715 }
22716
22717
22718function assertEncoding(encoding) {
22719 if (encoding && !isBufferEncoding(encoding)) {
22720 throw new Error('Unknown encoding: ' + encoding);
22721 }
22722}
22723
22724// StringDecoder provides an interface for efficiently splitting a series of
22725// buffers into a series of JS strings without breaking apart multi-byte
22726// characters. CESU-8 is handled as part of the UTF-8 encoding.
22727//
22728// @TODO Handling all encodings inside a single object makes it very difficult
22729// to reason about this code, so it should be split up in the future.
22730// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
22731// points as used by CESU-8.
22732var StringDecoder = exports.StringDecoder = function(encoding) {
22733 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
22734 assertEncoding(encoding);
22735 switch (this.encoding) {
22736 case 'utf8':
22737 // CESU-8 represents each of Surrogate Pair by 3-bytes
22738 this.surrogateSize = 3;
22739 break;
22740 case 'ucs2':
22741 case 'utf16le':
22742 // UTF-16 represents each of Surrogate Pair by 2-bytes
22743 this.surrogateSize = 2;
22744 this.detectIncompleteChar = utf16DetectIncompleteChar;
22745 break;
22746 case 'base64':
22747 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
22748 this.surrogateSize = 3;
22749 this.detectIncompleteChar = base64DetectIncompleteChar;
22750 break;
22751 default:
22752 this.write = passThroughWrite;
22753 return;
22754 }
22755
22756 // Enough space to store all bytes of a single character. UTF-8 needs 4
22757 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
22758 this.charBuffer = new Buffer(6);
22759 // Number of bytes received for the current incomplete multi-byte character.
22760 this.charReceived = 0;
22761 // Number of bytes expected for the current incomplete multi-byte character.
22762 this.charLength = 0;
22763};
22764
22765
22766// write decodes the given buffer and returns it as JS string that is
22767// guaranteed to not contain any partial multi-byte characters. Any partial
22768// character found at the end of the buffer is buffered up, and will be
22769// returned when calling write again with the remaining bytes.
22770//
22771// Note: Converting a Buffer containing an orphan surrogate to a String
22772// currently works, but converting a String to a Buffer (via `new Buffer`, or
22773// Buffer#write) will replace incomplete surrogates with the unicode
22774// replacement character. See https://codereview.chromium.org/121173009/ .
22775StringDecoder.prototype.write = function(buffer) {
22776 var charStr = '';
22777 // if our last write ended with an incomplete multibyte character
22778 while (this.charLength) {
22779 // determine how many remaining bytes this buffer has to offer for this char
22780 var available = (buffer.length >= this.charLength - this.charReceived) ?
22781 this.charLength - this.charReceived :
22782 buffer.length;
22783
22784 // add the new bytes to the char buffer
22785 buffer.copy(this.charBuffer, this.charReceived, 0, available);
22786 this.charReceived += available;
22787
22788 if (this.charReceived < this.charLength) {
22789 // still not enough chars in this buffer? wait for more ...
22790 return '';
22791 }
22792
22793 // remove bytes belonging to the current character from the buffer
22794 buffer = buffer.slice(available, buffer.length);
22795
22796 // get the character that was split
22797 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
22798
22799 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
22800 var charCode = charStr.charCodeAt(charStr.length - 1);
22801 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
22802 this.charLength += this.surrogateSize;
22803 charStr = '';
22804 continue;
22805 }
22806 this.charReceived = this.charLength = 0;
22807
22808 // if there are no more bytes in this buffer, just emit our char
22809 if (buffer.length === 0) {
22810 return charStr;
22811 }
22812 break;
22813 }
22814
22815 // determine and set charLength / charReceived
22816 this.detectIncompleteChar(buffer);
22817
22818 var end = buffer.length;
22819 if (this.charLength) {
22820 // buffer the incomplete character bytes we got
22821 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
22822 end -= this.charReceived;
22823 }
22824
22825 charStr += buffer.toString(this.encoding, 0, end);
22826
22827 var end = charStr.length - 1;
22828 var charCode = charStr.charCodeAt(end);
22829 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
22830 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
22831 var size = this.surrogateSize;
22832 this.charLength += size;
22833 this.charReceived += size;
22834 this.charBuffer.copy(this.charBuffer, size, 0, size);
22835 buffer.copy(this.charBuffer, 0, 0, size);
22836 return charStr.substring(0, end);
22837 }
22838
22839 // or just emit the charStr
22840 return charStr;
22841};
22842
22843// detectIncompleteChar determines if there is an incomplete UTF-8 character at
22844// the end of the given buffer. If so, it sets this.charLength to the byte
22845// length that character, and sets this.charReceived to the number of bytes
22846// that are available for this character.
22847StringDecoder.prototype.detectIncompleteChar = function(buffer) {
22848 // determine how many bytes we have to check at the end of this buffer
22849 var i = (buffer.length >= 3) ? 3 : buffer.length;
22850
22851 // Figure out if one of the last i bytes of our buffer announces an
22852 // incomplete char.
22853 for (; i > 0; i--) {
22854 var c = buffer[buffer.length - i];
22855
22856 // See http://en.wikipedia.org/wiki/UTF-8#Description
22857
22858 // 110XXXXX
22859 if (i == 1 && c >> 5 == 0x06) {
22860 this.charLength = 2;
22861 break;
22862 }
22863
22864 // 1110XXXX
22865 if (i <= 2 && c >> 4 == 0x0E) {
22866 this.charLength = 3;
22867 break;
22868 }
22869
22870 // 11110XXX
22871 if (i <= 3 && c >> 3 == 0x1E) {
22872 this.charLength = 4;
22873 break;
22874 }
22875 }
22876 this.charReceived = i;
22877};
22878
22879StringDecoder.prototype.end = function(buffer) {
22880 var res = '';
22881 if (buffer && buffer.length)
22882 res = this.write(buffer);
22883
22884 if (this.charReceived) {
22885 var cr = this.charReceived;
22886 var buf = this.charBuffer;
22887 var enc = this.encoding;
22888 res += buf.slice(0, cr).toString(enc);
22889 }
22890
22891 return res;
22892};
22893
22894function passThroughWrite(buffer) {
22895 return buffer.toString(this.encoding);
22896}
22897
22898function utf16DetectIncompleteChar(buffer) {
22899 this.charReceived = buffer.length % 2;
22900 this.charLength = this.charReceived ? 2 : 0;
22901}
22902
22903function base64DetectIncompleteChar(buffer) {
22904 this.charReceived = buffer.length % 3;
22905 this.charLength = this.charReceived ? 3 : 0;
22906}
22907
22908},{"buffer":5}],27:[function(require,module,exports){
22909(function (global){
22910
22911/**
22912 * Module exports.
22913 */
22914
22915module.exports = deprecate;
22916
22917/**
22918 * Mark that a method should not be used.
22919 * Returns a modified function which warns once by default.
22920 *
22921 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
22922 *
22923 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
22924 * will throw an Error when invoked.
22925 *
22926 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
22927 * will invoke `console.trace()` instead of `console.error()`.
22928 *
22929 * @param {Function} fn - the function to deprecate
22930 * @param {String} msg - the string to print to the console when `fn` is invoked
22931 * @returns {Function} a new "deprecated" version of `fn`
22932 * @api public
22933 */
22934
22935function deprecate (fn, msg) {
22936 if (config('noDeprecation')) {
22937 return fn;
22938 }
22939
22940 var warned = false;
22941 function deprecated() {
22942 if (!warned) {
22943 if (config('throwDeprecation')) {
22944 throw new Error(msg);
22945 } else if (config('traceDeprecation')) {
22946 console.trace(msg);
22947 } else {
22948 console.warn(msg);
22949 }
22950 warned = true;
22951 }
22952 return fn.apply(this, arguments);
22953 }
22954
22955 return deprecated;
22956}
22957
22958/**
22959 * Checks `localStorage` for boolean values for the given `name`.
22960 *
22961 * @param {String} name
22962 * @returns {Boolean}
22963 * @api private
22964 */
22965
22966function config (name) {
22967 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
22968 try {
22969 if (!global.localStorage) return false;
22970 } catch (_) {
22971 return false;
22972 }
22973 var val = global.localStorage[name];
22974 if (null == val) return false;
22975 return String(val).toLowerCase() === 'true';
22976}
22977
22978}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22979},{}],28:[function(require,module,exports){
22980arguments[4][9][0].apply(exports,arguments)
22981},{"dup":9}],29:[function(require,module,exports){
22982module.exports = function isBuffer(arg) {
22983 return arg && typeof arg === 'object'
22984 && typeof arg.copy === 'function'
22985 && typeof arg.fill === 'function'
22986 && typeof arg.readUInt8 === 'function';
22987}
22988},{}],30:[function(require,module,exports){
22989(function (process,global){
22990// Copyright Joyent, Inc. and other Node contributors.
22991//
22992// Permission is hereby granted, free of charge, to any person obtaining a
22993// copy of this software and associated documentation files (the
22994// "Software"), to deal in the Software without restriction, including
22995// without limitation the rights to use, copy, modify, merge, publish,
22996// distribute, sublicense, and/or sell copies of the Software, and to permit
22997// persons to whom the Software is furnished to do so, subject to the
22998// following conditions:
22999//
23000// The above copyright notice and this permission notice shall be included
23001// in all copies or substantial portions of the Software.
23002//
23003// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23004// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23005// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23006// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23007// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23008// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23009// USE OR OTHER DEALINGS IN THE SOFTWARE.
23010
23011var formatRegExp = /%[sdj%]/g;
23012exports.format = function(f) {
23013 if (!isString(f)) {
23014 var objects = [];
23015 for (var i = 0; i < arguments.length; i++) {
23016 objects.push(inspect(arguments[i]));
23017 }
23018 return objects.join(' ');
23019 }
23020
23021 var i = 1;
23022 var args = arguments;
23023 var len = args.length;
23024 var str = String(f).replace(formatRegExp, function(x) {
23025 if (x === '%%') return '%';
23026 if (i >= len) return x;
23027 switch (x) {
23028 case '%s': return String(args[i++]);
23029 case '%d': return Number(args[i++]);
23030 case '%j':
23031 try {
23032 return JSON.stringify(args[i++]);
23033 } catch (_) {
23034 return '[Circular]';
23035 }
23036 default:
23037 return x;
23038 }
23039 });
23040 for (var x = args[i]; i < len; x = args[++i]) {
23041 if (isNull(x) || !isObject(x)) {
23042 str += ' ' + x;
23043 } else {
23044 str += ' ' + inspect(x);
23045 }
23046 }
23047 return str;
23048};
23049
23050
23051// Mark that a method should not be used.
23052// Returns a modified function which warns once by default.
23053// If --no-deprecation is set, then it is a no-op.
23054exports.deprecate = function(fn, msg) {
23055 // Allow for deprecating things in the process of starting up.
23056 if (isUndefined(global.process)) {
23057 return function() {
23058 return exports.deprecate(fn, msg).apply(this, arguments);
23059 };
23060 }
23061
23062 if (process.noDeprecation === true) {
23063 return fn;
23064 }
23065
23066 var warned = false;
23067 function deprecated() {
23068 if (!warned) {
23069 if (process.throwDeprecation) {
23070 throw new Error(msg);
23071 } else if (process.traceDeprecation) {
23072 console.trace(msg);
23073 } else {
23074 console.error(msg);
23075 }
23076 warned = true;
23077 }
23078 return fn.apply(this, arguments);
23079 }
23080
23081 return deprecated;
23082};
23083
23084
23085var debugs = {};
23086var debugEnviron;
23087exports.debuglog = function(set) {
23088 if (isUndefined(debugEnviron))
23089 debugEnviron = process.env.NODE_DEBUG || '';
23090 set = set.toUpperCase();
23091 if (!debugs[set]) {
23092 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23093 var pid = process.pid;
23094 debugs[set] = function() {
23095 var msg = exports.format.apply(exports, arguments);
23096 console.error('%s %d: %s', set, pid, msg);
23097 };
23098 } else {
23099 debugs[set] = function() {};
23100 }
23101 }
23102 return debugs[set];
23103};
23104
23105
23106/**
23107 * Echos the value of a value. Trys to print the value out
23108 * in the best way possible given the different types.
23109 *
23110 * @param {Object} obj The object to print out.
23111 * @param {Object} opts Optional options object that alters the output.
23112 */
23113/* legacy: obj, showHidden, depth, colors*/
23114function inspect(obj, opts) {
23115 // default options
23116 var ctx = {
23117 seen: [],
23118 stylize: stylizeNoColor
23119 };
23120 // legacy...
23121 if (arguments.length >= 3) ctx.depth = arguments[2];
23122 if (arguments.length >= 4) ctx.colors = arguments[3];
23123 if (isBoolean(opts)) {
23124 // legacy...
23125 ctx.showHidden = opts;
23126 } else if (opts) {
23127 // got an "options" object
23128 exports._extend(ctx, opts);
23129 }
23130 // set default options
23131 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23132 if (isUndefined(ctx.depth)) ctx.depth = 2;
23133 if (isUndefined(ctx.colors)) ctx.colors = false;
23134 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23135 if (ctx.colors) ctx.stylize = stylizeWithColor;
23136 return formatValue(ctx, obj, ctx.depth);
23137}
23138exports.inspect = inspect;
23139
23140
23141// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23142inspect.colors = {
23143 'bold' : [1, 22],
23144 'italic' : [3, 23],
23145 'underline' : [4, 24],
23146 'inverse' : [7, 27],
23147 'white' : [37, 39],
23148 'grey' : [90, 39],
23149 'black' : [30, 39],
23150 'blue' : [34, 39],
23151 'cyan' : [36, 39],
23152 'green' : [32, 39],
23153 'magenta' : [35, 39],
23154 'red' : [31, 39],
23155 'yellow' : [33, 39]
23156};
23157
23158// Don't use 'blue' not visible on cmd.exe
23159inspect.styles = {
23160 'special': 'cyan',
23161 'number': 'yellow',
23162 'boolean': 'yellow',
23163 'undefined': 'grey',
23164 'null': 'bold',
23165 'string': 'green',
23166 'date': 'magenta',
23167 // "name": intentionally not styling
23168 'regexp': 'red'
23169};
23170
23171
23172function stylizeWithColor(str, styleType) {
23173 var style = inspect.styles[styleType];
23174
23175 if (style) {
23176 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23177 '\u001b[' + inspect.colors[style][1] + 'm';
23178 } else {
23179 return str;
23180 }
23181}
23182
23183
23184function stylizeNoColor(str, styleType) {
23185 return str;
23186}
23187
23188
23189function arrayToHash(array) {
23190 var hash = {};
23191
23192 array.forEach(function(val, idx) {
23193 hash[val] = true;
23194 });
23195
23196 return hash;
23197}
23198
23199
23200function formatValue(ctx, value, recurseTimes) {
23201 // Provide a hook for user-specified inspect functions.
23202 // Check that value is an object with an inspect function on it
23203 if (ctx.customInspect &&
23204 value &&
23205 isFunction(value.inspect) &&
23206 // Filter out the util module, it's inspect function is special
23207 value.inspect !== exports.inspect &&
23208 // Also filter out any prototype objects using the circular check.
23209 !(value.constructor && value.constructor.prototype === value)) {
23210 var ret = value.inspect(recurseTimes, ctx);
23211 if (!isString(ret)) {
23212 ret = formatValue(ctx, ret, recurseTimes);
23213 }
23214 return ret;
23215 }
23216
23217 // Primitive types cannot have properties
23218 var primitive = formatPrimitive(ctx, value);
23219 if (primitive) {
23220 return primitive;
23221 }
23222
23223 // Look up the keys of the object.
23224 var keys = Object.keys(value);
23225 var visibleKeys = arrayToHash(keys);
23226
23227 if (ctx.showHidden) {
23228 keys = Object.getOwnPropertyNames(value);
23229 }
23230
23231 // IE doesn't make error fields non-enumerable
23232 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
23233 if (isError(value)
23234 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
23235 return formatError(value);
23236 }
23237
23238 // Some type of object without properties can be shortcutted.
23239 if (keys.length === 0) {
23240 if (isFunction(value)) {
23241 var name = value.name ? ': ' + value.name : '';
23242 return ctx.stylize('[Function' + name + ']', 'special');
23243 }
23244 if (isRegExp(value)) {
23245 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23246 }
23247 if (isDate(value)) {
23248 return ctx.stylize(Date.prototype.toString.call(value), 'date');
23249 }
23250 if (isError(value)) {
23251 return formatError(value);
23252 }
23253 }
23254
23255 var base = '', array = false, braces = ['{', '}'];
23256
23257 // Make Array say that they are Array
23258 if (isArray(value)) {
23259 array = true;
23260 braces = ['[', ']'];
23261 }
23262
23263 // Make functions say that they are functions
23264 if (isFunction(value)) {
23265 var n = value.name ? ': ' + value.name : '';
23266 base = ' [Function' + n + ']';
23267 }
23268
23269 // Make RegExps say that they are RegExps
23270 if (isRegExp(value)) {
23271 base = ' ' + RegExp.prototype.toString.call(value);
23272 }
23273
23274 // Make dates with properties first say the date
23275 if (isDate(value)) {
23276 base = ' ' + Date.prototype.toUTCString.call(value);
23277 }
23278
23279 // Make error with message first say the error
23280 if (isError(value)) {
23281 base = ' ' + formatError(value);
23282 }
23283
23284 if (keys.length === 0 && (!array || value.length == 0)) {
23285 return braces[0] + base + braces[1];
23286 }
23287
23288 if (recurseTimes < 0) {
23289 if (isRegExp(value)) {
23290 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23291 } else {
23292 return ctx.stylize('[Object]', 'special');
23293 }
23294 }
23295
23296 ctx.seen.push(value);
23297
23298 var output;
23299 if (array) {
23300 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
23301 } else {
23302 output = keys.map(function(key) {
23303 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
23304 });
23305 }
23306
23307 ctx.seen.pop();
23308
23309 return reduceToSingleString(output, base, braces);
23310}
23311
23312
23313function formatPrimitive(ctx, value) {
23314 if (isUndefined(value))
23315 return ctx.stylize('undefined', 'undefined');
23316 if (isString(value)) {
23317 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
23318 .replace(/'/g, "\\'")
23319 .replace(/\\"/g, '"') + '\'';
23320 return ctx.stylize(simple, 'string');
23321 }
23322 if (isNumber(value))
23323 return ctx.stylize('' + value, 'number');
23324 if (isBoolean(value))
23325 return ctx.stylize('' + value, 'boolean');
23326 // For some reason typeof null is "object", so special case here.
23327 if (isNull(value))
23328 return ctx.stylize('null', 'null');
23329}
23330
23331
23332function formatError(value) {
23333 return '[' + Error.prototype.toString.call(value) + ']';
23334}
23335
23336
23337function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
23338 var output = [];
23339 for (var i = 0, l = value.length; i < l; ++i) {
23340 if (hasOwnProperty(value, String(i))) {
23341 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23342 String(i), true));
23343 } else {
23344 output.push('');
23345 }
23346 }
23347 keys.forEach(function(key) {
23348 if (!key.match(/^\d+$/)) {
23349 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23350 key, true));
23351 }
23352 });
23353 return output;
23354}
23355
23356
23357function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
23358 var name, str, desc;
23359 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
23360 if (desc.get) {
23361 if (desc.set) {
23362 str = ctx.stylize('[Getter/Setter]', 'special');
23363 } else {
23364 str = ctx.stylize('[Getter]', 'special');
23365 }
23366 } else {
23367 if (desc.set) {
23368 str = ctx.stylize('[Setter]', 'special');
23369 }
23370 }
23371 if (!hasOwnProperty(visibleKeys, key)) {
23372 name = '[' + key + ']';
23373 }
23374 if (!str) {
23375 if (ctx.seen.indexOf(desc.value) < 0) {
23376 if (isNull(recurseTimes)) {
23377 str = formatValue(ctx, desc.value, null);
23378 } else {
23379 str = formatValue(ctx, desc.value, recurseTimes - 1);
23380 }
23381 if (str.indexOf('\n') > -1) {
23382 if (array) {
23383 str = str.split('\n').map(function(line) {
23384 return ' ' + line;
23385 }).join('\n').substr(2);
23386 } else {
23387 str = '\n' + str.split('\n').map(function(line) {
23388 return ' ' + line;
23389 }).join('\n');
23390 }
23391 }
23392 } else {
23393 str = ctx.stylize('[Circular]', 'special');
23394 }
23395 }
23396 if (isUndefined(name)) {
23397 if (array && key.match(/^\d+$/)) {
23398 return str;
23399 }
23400 name = JSON.stringify('' + key);
23401 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
23402 name = name.substr(1, name.length - 2);
23403 name = ctx.stylize(name, 'name');
23404 } else {
23405 name = name.replace(/'/g, "\\'")
23406 .replace(/\\"/g, '"')
23407 .replace(/(^"|"$)/g, "'");
23408 name = ctx.stylize(name, 'string');
23409 }
23410 }
23411
23412 return name + ': ' + str;
23413}
23414
23415
23416function reduceToSingleString(output, base, braces) {
23417 var numLinesEst = 0;
23418 var length = output.reduce(function(prev, cur) {
23419 numLinesEst++;
23420 if (cur.indexOf('\n') >= 0) numLinesEst++;
23421 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
23422 }, 0);
23423
23424 if (length > 60) {
23425 return braces[0] +
23426 (base === '' ? '' : base + '\n ') +
23427 ' ' +
23428 output.join(',\n ') +
23429 ' ' +
23430 braces[1];
23431 }
23432
23433 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
23434}
23435
23436
23437// NOTE: These type checking functions intentionally don't use `instanceof`
23438// because it is fragile and can be easily faked with `Object.create()`.
23439function isArray(ar) {
23440 return Array.isArray(ar);
23441}
23442exports.isArray = isArray;
23443
23444function isBoolean(arg) {
23445 return typeof arg === 'boolean';
23446}
23447exports.isBoolean = isBoolean;
23448
23449function isNull(arg) {
23450 return arg === null;
23451}
23452exports.isNull = isNull;
23453
23454function isNullOrUndefined(arg) {
23455 return arg == null;
23456}
23457exports.isNullOrUndefined = isNullOrUndefined;
23458
23459function isNumber(arg) {
23460 return typeof arg === 'number';
23461}
23462exports.isNumber = isNumber;
23463
23464function isString(arg) {
23465 return typeof arg === 'string';
23466}
23467exports.isString = isString;
23468
23469function isSymbol(arg) {
23470 return typeof arg === 'symbol';
23471}
23472exports.isSymbol = isSymbol;
23473
23474function isUndefined(arg) {
23475 return arg === void 0;
23476}
23477exports.isUndefined = isUndefined;
23478
23479function isRegExp(re) {
23480 return isObject(re) && objectToString(re) === '[object RegExp]';
23481}
23482exports.isRegExp = isRegExp;
23483
23484function isObject(arg) {
23485 return typeof arg === 'object' && arg !== null;
23486}
23487exports.isObject = isObject;
23488
23489function isDate(d) {
23490 return isObject(d) && objectToString(d) === '[object Date]';
23491}
23492exports.isDate = isDate;
23493
23494function isError(e) {
23495 return isObject(e) &&
23496 (objectToString(e) === '[object Error]' || e instanceof Error);
23497}
23498exports.isError = isError;
23499
23500function isFunction(arg) {
23501 return typeof arg === 'function';
23502}
23503exports.isFunction = isFunction;
23504
23505function isPrimitive(arg) {
23506 return arg === null ||
23507 typeof arg === 'boolean' ||
23508 typeof arg === 'number' ||
23509 typeof arg === 'string' ||
23510 typeof arg === 'symbol' || // ES6 symbol
23511 typeof arg === 'undefined';
23512}
23513exports.isPrimitive = isPrimitive;
23514
23515exports.isBuffer = require('./support/isBuffer');
23516
23517function objectToString(o) {
23518 return Object.prototype.toString.call(o);
23519}
23520
23521
23522function pad(n) {
23523 return n < 10 ? '0' + n.toString(10) : n.toString(10);
23524}
23525
23526
23527var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
23528 'Oct', 'Nov', 'Dec'];
23529
23530// 26 Feb 16:19:34
23531function timestamp() {
23532 var d = new Date();
23533 var time = [pad(d.getHours()),
23534 pad(d.getMinutes()),
23535 pad(d.getSeconds())].join(':');
23536 return [d.getDate(), months[d.getMonth()], time].join(' ');
23537}
23538
23539
23540// log is just a thin wrapper to console.log that prepends a timestamp
23541exports.log = function() {
23542 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
23543};
23544
23545
23546/**
23547 * Inherit the prototype methods from one constructor into another.
23548 *
23549 * The Function.prototype.inherits from lang.js rewritten as a standalone
23550 * function (not on Function.prototype). NOTE: If this file is to be loaded
23551 * during bootstrapping this function needs to be rewritten using some native
23552 * functions as prototype setup using normal JavaScript does not work as
23553 * expected during bootstrapping (see mirror.js in r114903).
23554 *
23555 * @param {function} ctor Constructor function which needs to inherit the
23556 * prototype.
23557 * @param {function} superCtor Constructor function to inherit prototype from.
23558 */
23559exports.inherits = require('inherits');
23560
23561exports._extend = function(origin, add) {
23562 // Don't do anything if add isn't an object
23563 if (!add || !isObject(add)) return origin;
23564
23565 var keys = Object.keys(add);
23566 var i = keys.length;
23567 while (i--) {
23568 origin[keys[i]] = add[keys[i]];
23569 }
23570 return origin;
23571};
23572
23573function hasOwnProperty(obj, prop) {
23574 return Object.prototype.hasOwnProperty.call(obj, prop);
23575}
23576
23577}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23578},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
23579(function (Buffer){
23580const createKeccakHash = require('keccak')
23581const secp256k1 = require('secp256k1')
23582const assert = require('assert')
23583const rlp = require('rlp')
23584const BN = require('bn.js')
23585const createHash = require('create-hash')
23586Object.assign(exports, require('ethjs-util'))
23587
23588/**
23589 * the max integer that this VM can handle (a ```BN```)
23590 * @var {BN} MAX_INTEGER
23591 */
23592exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
23593
23594/**
23595 * 2^256 (a ```BN```)
23596 * @var {BN} TWO_POW256
23597 */
23598exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
23599
23600/**
23601 * SHA3-256 hash of null (a ```String```)
23602 * @var {String} SHA3_NULL_S
23603 */
23604exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
23605
23606/**
23607 * SHA3-256 hash of null (a ```Buffer```)
23608 * @var {Buffer} SHA3_NULL
23609 */
23610exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
23611
23612/**
23613 * SHA3-256 of an RLP of an empty array (a ```String```)
23614 * @var {String} SHA3_RLP_ARRAY_S
23615 */
23616exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
23617
23618/**
23619 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
23620 * @var {Buffer} SHA3_RLP_ARRAY
23621 */
23622exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
23623
23624/**
23625 * SHA3-256 hash of the RLP of null (a ```String```)
23626 * @var {String} SHA3_RLP_S
23627 */
23628exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
23629
23630/**
23631 * SHA3-256 hash of the RLP of null (a ```Buffer```)
23632 * @var {Buffer} SHA3_RLP
23633 */
23634exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
23635
23636/**
23637 * [`BN`](https://github.com/indutny/bn.js)
23638 * @var {Function}
23639 */
23640exports.BN = BN
23641
23642/**
23643 * [`rlp`](https://github.com/ethereumjs/rlp)
23644 * @var {Function}
23645 */
23646exports.rlp = rlp
23647
23648/**
23649 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
23650 * @var {Object}
23651 */
23652exports.secp256k1 = secp256k1
23653
23654/**
23655 * Returns a buffer filled with 0s
23656 * @method zeros
23657 * @param {Number} bytes the number of bytes the buffer should be
23658 * @return {Buffer}
23659 */
23660exports.zeros = function (bytes) {
23661 return Buffer.allocUnsafe(bytes).fill(0)
23662}
23663
23664/**
23665 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
23666 * Or it truncates the beginning if it exceeds.
23667 * @method lsetLength
23668 * @param {Buffer|Array} msg the value to pad
23669 * @param {Number} length the number of bytes the output should be
23670 * @param {Boolean} [right=false] whether to start padding form the left or right
23671 * @return {Buffer|Array}
23672 */
23673exports.setLengthLeft = exports.setLength = function (msg, length, right) {
23674 var buf = exports.zeros(length)
23675 msg = exports.toBuffer(msg)
23676 if (right) {
23677 if (msg.length < length) {
23678 msg.copy(buf)
23679 return buf
23680 }
23681 return msg.slice(0, length)
23682 } else {
23683 if (msg.length < length) {
23684 msg.copy(buf, length - msg.length)
23685 return buf
23686 }
23687 return msg.slice(-length)
23688 }
23689}
23690
23691/**
23692 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
23693 * Or it truncates the beginning if it exceeds.
23694 * @param {Buffer|Array} msg the value to pad
23695 * @param {Number} length the number of bytes the output should be
23696 * @return {Buffer|Array}
23697 */
23698exports.setLengthRight = function (msg, length) {
23699 return exports.setLength(msg, length, true)
23700}
23701
23702/**
23703 * Trims leading zeros from a `Buffer` or an `Array`
23704 * @param {Buffer|Array|String} a
23705 * @return {Buffer|Array|String}
23706 */
23707exports.unpad = exports.stripZeros = function (a) {
23708 a = exports.stripHexPrefix(a)
23709 var first = a[0]
23710 while (a.length > 0 && first.toString() === '0') {
23711 a = a.slice(1)
23712 first = a[0]
23713 }
23714 return a
23715}
23716/**
23717 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
23718 * @param {*} v the value
23719 */
23720exports.toBuffer = function (v) {
23721 if (!Buffer.isBuffer(v)) {
23722 if (Array.isArray(v)) {
23723 v = Buffer.from(v)
23724 } else if (typeof v === 'string') {
23725 if (exports.isHexPrefixed(v)) {
23726 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
23727 } else {
23728 v = Buffer.from(v)
23729 }
23730 } else if (typeof v === 'number') {
23731 v = exports.intToBuffer(v)
23732 } else if (v === null || v === undefined) {
23733 v = Buffer.allocUnsafe(0)
23734 } else if (v.toArray) {
23735 // converts a BN to a Buffer
23736 v = Buffer.from(v.toArray())
23737 } else {
23738 throw new Error('invalid type')
23739 }
23740 }
23741 return v
23742}
23743
23744/**
23745 * Converts a `Buffer` to a `Number`
23746 * @param {Buffer} buf
23747 * @return {Number}
23748 * @throws If the input number exceeds 53 bits.
23749 */
23750exports.bufferToInt = function (buf) {
23751 return new BN(exports.toBuffer(buf)).toNumber()
23752}
23753
23754/**
23755 * Converts a `Buffer` into a hex `String`
23756 * @param {Buffer} buf
23757 * @return {String}
23758 */
23759exports.bufferToHex = function (buf) {
23760 buf = exports.toBuffer(buf)
23761 return '0x' + buf.toString('hex')
23762}
23763
23764/**
23765 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
23766 * @param {Buffer} num
23767 * @return {BN}
23768 */
23769exports.fromSigned = function (num) {
23770 return new BN(num).fromTwos(256)
23771}
23772
23773/**
23774 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
23775 * @param {BN} num
23776 * @return {Buffer}
23777 */
23778exports.toUnsigned = function (num) {
23779 return Buffer.from(num.toTwos(256).toArray())
23780}
23781
23782/**
23783 * Creates SHA-3 hash of the input
23784 * @param {Buffer|Array|String|Number} a the input data
23785 * @param {Number} [bits=256] the SHA width
23786 * @return {Buffer}
23787 */
23788exports.sha3 = function (a, bits) {
23789 a = exports.toBuffer(a)
23790 if (!bits) bits = 256
23791
23792 return createKeccakHash('keccak' + bits).update(a).digest()
23793}
23794
23795/**
23796 * Creates SHA256 hash of the input
23797 * @param {Buffer|Array|String|Number} a the input data
23798 * @return {Buffer}
23799 */
23800exports.sha256 = function (a) {
23801 a = exports.toBuffer(a)
23802 return createHash('sha256').update(a).digest()
23803}
23804
23805/**
23806 * Creates RIPEMD160 hash of the input
23807 * @param {Buffer|Array|String|Number} a the input data
23808 * @param {Boolean} padded whether it should be padded to 256 bits or not
23809 * @return {Buffer}
23810 */
23811exports.ripemd160 = function (a, padded) {
23812 a = exports.toBuffer(a)
23813 var hash = createHash('rmd160').update(a).digest()
23814 if (padded === true) {
23815 return exports.setLength(hash, 32)
23816 } else {
23817 return hash
23818 }
23819}
23820
23821/**
23822 * Creates SHA-3 hash of the RLP encoded version of the input
23823 * @param {Buffer|Array|String|Number} a the input data
23824 * @return {Buffer}
23825 */
23826exports.rlphash = function (a) {
23827 return exports.sha3(rlp.encode(a))
23828}
23829
23830/**
23831 * Checks if the private key satisfies the rules of the curve secp256k1.
23832 * @param {Buffer} privateKey
23833 * @return {Boolean}
23834 */
23835exports.isValidPrivate = function (privateKey) {
23836 return secp256k1.privateKeyVerify(privateKey)
23837}
23838
23839/**
23840 * Checks if the public key satisfies the rules of the curve secp256k1
23841 * and the requirements of Ethereum.
23842 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
23843 * @param {Boolean} [sanitize=false] Accept public keys in other formats
23844 * @return {Boolean}
23845 */
23846exports.isValidPublic = function (publicKey, sanitize) {
23847 if (publicKey.length === 64) {
23848 // Convert to SEC1 for secp256k1
23849 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
23850 }
23851
23852 if (!sanitize) {
23853 return false
23854 }
23855
23856 return secp256k1.publicKeyVerify(publicKey)
23857}
23858
23859/**
23860 * Returns the ethereum address of a given public key.
23861 * Accepts "Ethereum public keys" and SEC1 encoded keys.
23862 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
23863 * @param {Boolean} [sanitize=false] Accept public keys in other formats
23864 * @return {Buffer}
23865 */
23866exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
23867 pubKey = exports.toBuffer(pubKey)
23868 if (sanitize && (pubKey.length !== 64)) {
23869 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
23870 }
23871 assert(pubKey.length === 64)
23872 // Only take the lower 160bits of the hash
23873 return exports.sha3(pubKey).slice(-20)
23874}
23875
23876/**
23877 * Returns the ethereum public key of a given private key
23878 * @param {Buffer} privateKey A private key must be 256 bits wide
23879 * @return {Buffer}
23880 */
23881var privateToPublic = exports.privateToPublic = function (privateKey) {
23882 privateKey = exports.toBuffer(privateKey)
23883 // skip the type flag and use the X, Y points
23884 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
23885}
23886
23887/**
23888 * Converts a public key to the Ethereum format.
23889 * @param {Buffer} publicKey
23890 * @return {Buffer}
23891 */
23892exports.importPublic = function (publicKey) {
23893 publicKey = exports.toBuffer(publicKey)
23894 if (publicKey.length !== 64) {
23895 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
23896 }
23897 return publicKey
23898}
23899
23900/**
23901 * ECDSA sign
23902 * @param {Buffer} msgHash
23903 * @param {Buffer} privateKey
23904 * @return {Object}
23905 */
23906exports.ecsign = function (msgHash, privateKey) {
23907 var sig = secp256k1.sign(msgHash, privateKey)
23908
23909 var ret = {}
23910 ret.r = sig.signature.slice(0, 32)
23911 ret.s = sig.signature.slice(32, 64)
23912 ret.v = sig.recovery + 27
23913 return ret
23914}
23915
23916/**
23917 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
23918 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
23919 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
23920 * used to produce the signature.
23921 * @param message
23922 * @returns {Buffer} hash
23923 */
23924exports.hashPersonalMessage = function (message) {
23925 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
23926 return exports.sha3(Buffer.concat([prefix, message]))
23927}
23928
23929/**
23930 * ECDSA public key recovery from signature
23931 * @param {Buffer} msgHash
23932 * @param {Number} v
23933 * @param {Buffer} r
23934 * @param {Buffer} s
23935 * @return {Buffer} publicKey
23936 */
23937exports.ecrecover = function (msgHash, v, r, s) {
23938 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
23939 var recovery = v - 27
23940 if (recovery !== 0 && recovery !== 1) {
23941 throw new Error('Invalid signature v value')
23942 }
23943 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
23944 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
23945}
23946
23947/**
23948 * Convert signature parameters into the format of `eth_sign` RPC method
23949 * @param {Number} v
23950 * @param {Buffer} r
23951 * @param {Buffer} s
23952 * @return {String} sig
23953 */
23954exports.toRpcSig = function (v, r, s) {
23955 // NOTE: with potential introduction of chainId this might need to be updated
23956 if (v !== 27 && v !== 28) {
23957 throw new Error('Invalid recovery id')
23958 }
23959
23960 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
23961 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
23962 return exports.bufferToHex(Buffer.concat([
23963 exports.setLengthLeft(r, 32),
23964 exports.setLengthLeft(s, 32),
23965 exports.toBuffer(v - 27)
23966 ]))
23967}
23968
23969/**
23970 * Convert signature format of the `eth_sign` RPC method to signature parameters
23971 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
23972 * @param {String} sig
23973 * @return {Object}
23974 */
23975exports.fromRpcSig = function (sig) {
23976 sig = exports.toBuffer(sig)
23977
23978 // NOTE: with potential introduction of chainId this might need to be updated
23979 if (sig.length !== 65) {
23980 throw new Error('Invalid signature length')
23981 }
23982
23983 var v = sig[64]
23984 // support both versions of `eth_sign` responses
23985 if (v < 27) {
23986 v += 27
23987 }
23988
23989 return {
23990 v: v,
23991 r: sig.slice(0, 32),
23992 s: sig.slice(32, 64)
23993 }
23994}
23995
23996/**
23997 * Returns the ethereum address of a given private key
23998 * @param {Buffer} privateKey A private key must be 256 bits wide
23999 * @return {Buffer}
24000 */
24001exports.privateToAddress = function (privateKey) {
24002 return exports.publicToAddress(privateToPublic(privateKey))
24003}
24004
24005/**
24006 * Checks if the address is a valid. Accepts checksummed addresses too
24007 * @param {String} address
24008 * @return {Boolean}
24009 */
24010exports.isValidAddress = function (address) {
24011 return /^0x[0-9a-fA-F]{40}$/i.test(address)
24012}
24013
24014/**
24015 * Returns a checksummed address
24016 * @param {String} address
24017 * @return {String}
24018 */
24019exports.toChecksumAddress = function (address) {
24020 address = exports.stripHexPrefix(address).toLowerCase()
24021 var hash = exports.sha3(address).toString('hex')
24022 var ret = '0x'
24023
24024 for (var i = 0; i < address.length; i++) {
24025 if (parseInt(hash[i], 16) >= 8) {
24026 ret += address[i].toUpperCase()
24027 } else {
24028 ret += address[i]
24029 }
24030 }
24031
24032 return ret
24033}
24034
24035/**
24036 * Checks if the address is a valid checksummed address
24037 * @param {Buffer} address
24038 * @return {Boolean}
24039 */
24040exports.isValidChecksumAddress = function (address) {
24041 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
24042}
24043
24044/**
24045 * Generates an address of a newly created contract
24046 * @param {Buffer} from the address which is creating this new address
24047 * @param {Buffer} nonce the nonce of the from account
24048 * @return {Buffer}
24049 */
24050exports.generateAddress = function (from, nonce) {
24051 from = exports.toBuffer(from)
24052 nonce = new BN(nonce)
24053
24054 if (nonce.isZero()) {
24055 // in RLP we want to encode null in the case of zero nonce
24056 // read the RLP documentation for an answer if you dare
24057 nonce = null
24058 } else {
24059 nonce = Buffer.from(nonce.toArray())
24060 }
24061
24062 // Only take the lower 160bits of the hash
24063 return exports.rlphash([from, nonce]).slice(-20)
24064}
24065
24066/**
24067 * Returns true if the supplied address belongs to a precompiled account
24068 * @param {Buffer|String} address
24069 * @return {Boolean}
24070 */
24071exports.isPrecompiled = function (address) {
24072 var a = exports.unpad(address)
24073 return a.length === 1 && a[0] > 0 && a[0] < 5
24074}
24075
24076/**
24077 * Adds "0x" to a given `String` if it does not already start with "0x"
24078 * @param {String} str
24079 * @return {String}
24080 */
24081exports.addHexPrefix = function (str) {
24082 if (typeof str !== 'string') {
24083 return str
24084 }
24085
24086 return exports.isHexPrefixed(str) ? str : '0x' + str
24087}
24088
24089/**
24090 * Validate ECDSA signature
24091 * @method isValidSignature
24092 * @param {Buffer} v
24093 * @param {Buffer} r
24094 * @param {Buffer} s
24095 * @param {Boolean} [homestead=true]
24096 * @return {Boolean}
24097 */
24098
24099exports.isValidSignature = function (v, r, s, homestead) {
24100 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24101 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24102
24103 if (r.length !== 32 || s.length !== 32) {
24104 return false
24105 }
24106
24107 if (v !== 27 && v !== 28) {
24108 return false
24109 }
24110
24111 r = new BN(r)
24112 s = new BN(s)
24113
24114 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24115 return false
24116 }
24117
24118 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24119 return false
24120 }
24121
24122 return true
24123}
24124
24125/**
24126 * Converts a `Buffer` or `Array` to JSON
24127 * @param {Buffer|Array} ba
24128 * @return {Array|String|null}
24129 */
24130exports.baToJSON = function (ba) {
24131 if (Buffer.isBuffer(ba)) {
24132 return '0x' + ba.toString('hex')
24133 } else if (ba instanceof Array) {
24134 var array = []
24135 for (var i = 0; i < ba.length; i++) {
24136 array.push(exports.baToJSON(ba[i]))
24137 }
24138 return array
24139 }
24140}
24141
24142/**
24143 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24144 * @param {Object} self the `Object` to define properties on
24145 * @param {Array} fields an array fields to define. Fields can contain:
24146 * * `name` - the name of the properties
24147 * * `length` - the number of bytes the field can have
24148 * * `allowLess` - if the field can be less than the length
24149 * * `allowEmpty`
24150 * @param {*} data data to be validated against the definitions
24151 */
24152exports.defineProperties = function (self, fields, data) {
24153 self.raw = []
24154 self._fields = []
24155
24156 // attach the `toJSON`
24157 self.toJSON = function (label) {
24158 if (label) {
24159 var obj = {}
24160 self._fields.forEach(function (field) {
24161 obj[field] = '0x' + self[field].toString('hex')
24162 })
24163 return obj
24164 }
24165 return exports.baToJSON(this.raw)
24166 }
24167
24168 self.serialize = function serialize () {
24169 return rlp.encode(self.raw)
24170 }
24171
24172 fields.forEach(function (field, i) {
24173 self._fields.push(field.name)
24174 function getter () {
24175 return self.raw[i]
24176 }
24177 function setter (v) {
24178 v = exports.toBuffer(v)
24179
24180 if (v.toString('hex') === '00' && !field.allowZero) {
24181 v = Buffer.allocUnsafe(0)
24182 }
24183
24184 if (field.allowLess && field.length) {
24185 v = exports.stripZeros(v)
24186 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24187 } else if (!(field.allowZero && v.length === 0) && field.length) {
24188 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
24189 }
24190
24191 self.raw[i] = v
24192 }
24193
24194 Object.defineProperty(self, field.name, {
24195 enumerable: true,
24196 configurable: true,
24197 get: getter,
24198 set: setter
24199 })
24200
24201 if (field.default) {
24202 self[field.name] = field.default
24203 }
24204
24205 // attach alias
24206 if (field.alias) {
24207 Object.defineProperty(self, field.alias, {
24208 enumerable: false,
24209 configurable: true,
24210 set: setter,
24211 get: getter
24212 })
24213 }
24214 })
24215
24216 // if the constuctor is passed data
24217 if (data) {
24218 if (typeof data === 'string') {
24219 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
24220 }
24221
24222 if (Buffer.isBuffer(data)) {
24223 data = rlp.decode(data)
24224 }
24225
24226 if (Array.isArray(data)) {
24227 if (data.length > self._fields.length) {
24228 throw (new Error('wrong number of fields in data'))
24229 }
24230
24231 // make sure all the items are buffers
24232 data.forEach(function (d, i) {
24233 self[self._fields[i]] = exports.toBuffer(d)
24234 })
24235 } else if (typeof data === 'object') {
24236 const keys = Object.keys(data)
24237 fields.forEach(function (field) {
24238 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
24239 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
24240 })
24241 } else {
24242 throw new Error('invalid data')
24243 }
24244 }
24245}
24246
24247}).call(this,require("buffer").Buffer)
24248},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
24249(function (Buffer){
24250// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
24251// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24252// NOTE: SIGHASH byte ignored AND restricted, truncate before use
24253
24254function check (buffer) {
24255 if (buffer.length < 8) return false
24256 if (buffer.length > 72) return false
24257 if (buffer[0] !== 0x30) return false
24258 if (buffer[1] !== buffer.length - 2) return false
24259 if (buffer[2] !== 0x02) return false
24260
24261 var lenR = buffer[3]
24262 if (lenR === 0) return false
24263 if (5 + lenR >= buffer.length) return false
24264 if (buffer[4 + lenR] !== 0x02) return false
24265
24266 var lenS = buffer[5 + lenR]
24267 if (lenS === 0) return false
24268 if ((6 + lenR + lenS) !== buffer.length) return false
24269
24270 if (buffer[4] & 0x80) return false
24271 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
24272
24273 if (buffer[lenR + 6] & 0x80) return false
24274 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
24275 return true
24276}
24277
24278function decode (buffer) {
24279 if (buffer.length < 8) throw new Error('DER sequence length is too short')
24280 if (buffer.length > 72) throw new Error('DER sequence length is too long')
24281 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
24282 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
24283 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
24284
24285 var lenR = buffer[3]
24286 if (lenR === 0) throw new Error('R length is zero')
24287 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
24288 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
24289
24290 var lenS = buffer[5 + lenR]
24291 if (lenS === 0) throw new Error('S length is zero')
24292 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
24293
24294 if (buffer[4] & 0x80) throw new Error('R value is negative')
24295 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
24296
24297 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
24298 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
24299
24300 // non-BIP66 - extract R, S values
24301 return {
24302 r: buffer.slice(4, 4 + lenR),
24303 s: buffer.slice(6 + lenR)
24304 }
24305}
24306
24307/*
24308 * Expects r and s to be positive DER integers.
24309 *
24310 * The DER format uses the most significant bit as a sign bit (& 0x80).
24311 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
24312 *
24313 * Examples:
24314 *
24315 * 0 => 0x00
24316 * 1 => 0x01
24317 * -1 => 0xff
24318 * 127 => 0x7f
24319 * -127 => 0x81
24320 * 128 => 0x0080
24321 * -128 => 0x80
24322 * 255 => 0x00ff
24323 * -255 => 0xff01
24324 * 16300 => 0x3fac
24325 * -16300 => 0xc054
24326 * 62300 => 0x00f35c
24327 * -62300 => 0xff0ca4
24328*/
24329function encode (r, s) {
24330 var lenR = r.length
24331 var lenS = s.length
24332 if (lenR === 0) throw new Error('R length is zero')
24333 if (lenS === 0) throw new Error('S length is zero')
24334 if (lenR > 33) throw new Error('R length is too long')
24335 if (lenS > 33) throw new Error('S length is too long')
24336 if (r[0] & 0x80) throw new Error('R value is negative')
24337 if (s[0] & 0x80) throw new Error('S value is negative')
24338 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
24339 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
24340
24341 var signature = new Buffer(6 + lenR + lenS)
24342
24343 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24344 signature[0] = 0x30
24345 signature[1] = signature.length - 2
24346 signature[2] = 0x02
24347 signature[3] = r.length
24348 r.copy(signature, 4)
24349 signature[4 + lenR] = 0x02
24350 signature[5 + lenR] = s.length
24351 s.copy(signature, 6 + lenR)
24352
24353 return signature
24354}
24355
24356module.exports = {
24357 check: check,
24358 decode: decode,
24359 encode: encode
24360}
24361
24362}).call(this,require("buffer").Buffer)
24363},{"buffer":5}],33:[function(require,module,exports){
24364(function (module, exports) {
24365 'use strict';
24366
24367 // Utils
24368 function assert (val, msg) {
24369 if (!val) throw new Error(msg || 'Assertion failed');
24370 }
24371
24372 // Could use `inherits` module, but don't want to move from single file
24373 // architecture yet.
24374 function inherits (ctor, superCtor) {
24375 ctor.super_ = superCtor;
24376 var TempCtor = function () {};
24377 TempCtor.prototype = superCtor.prototype;
24378 ctor.prototype = new TempCtor();
24379 ctor.prototype.constructor = ctor;
24380 }
24381
24382 // BN
24383
24384 function BN (number, base, endian) {
24385 if (BN.isBN(number)) {
24386 return number;
24387 }
24388
24389 this.negative = 0;
24390 this.words = null;
24391 this.length = 0;
24392
24393 // Reduction context
24394 this.red = null;
24395
24396 if (number !== null) {
24397 if (base === 'le' || base === 'be') {
24398 endian = base;
24399 base = 10;
24400 }
24401
24402 this._init(number || 0, base || 10, endian || 'be');
24403 }
24404 }
24405 if (typeof module === 'object') {
24406 module.exports = BN;
24407 } else {
24408 exports.BN = BN;
24409 }
24410
24411 BN.BN = BN;
24412 BN.wordSize = 26;
24413
24414 var Buffer;
24415 try {
24416 Buffer = require('buf' + 'fer').Buffer;
24417 } catch (e) {
24418 }
24419
24420 BN.isBN = function isBN (num) {
24421 if (num instanceof BN) {
24422 return true;
24423 }
24424
24425 return num !== null && typeof num === 'object' &&
24426 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
24427 };
24428
24429 BN.max = function max (left, right) {
24430 if (left.cmp(right) > 0) return left;
24431 return right;
24432 };
24433
24434 BN.min = function min (left, right) {
24435 if (left.cmp(right) < 0) return left;
24436 return right;
24437 };
24438
24439 BN.prototype._init = function init (number, base, endian) {
24440 if (typeof number === 'number') {
24441 return this._initNumber(number, base, endian);
24442 }
24443
24444 if (typeof number === 'object') {
24445 return this._initArray(number, base, endian);
24446 }
24447
24448 if (base === 'hex') {
24449 base = 16;
24450 }
24451 assert(base === (base | 0) && base >= 2 && base <= 36);
24452
24453 number = number.toString().replace(/\s+/g, '');
24454 var start = 0;
24455 if (number[0] === '-') {
24456 start++;
24457 }
24458
24459 if (base === 16) {
24460 this._parseHex(number, start);
24461 } else {
24462 this._parseBase(number, base, start);
24463 }
24464
24465 if (number[0] === '-') {
24466 this.negative = 1;
24467 }
24468
24469 this.strip();
24470
24471 if (endian !== 'le') return;
24472
24473 this._initArray(this.toArray(), base, endian);
24474 };
24475
24476 BN.prototype._initNumber = function _initNumber (number, base, endian) {
24477 if (number < 0) {
24478 this.negative = 1;
24479 number = -number;
24480 }
24481 if (number < 0x4000000) {
24482 this.words = [ number & 0x3ffffff ];
24483 this.length = 1;
24484 } else if (number < 0x10000000000000) {
24485 this.words = [
24486 number & 0x3ffffff,
24487 (number / 0x4000000) & 0x3ffffff
24488 ];
24489 this.length = 2;
24490 } else {
24491 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
24492 this.words = [
24493 number & 0x3ffffff,
24494 (number / 0x4000000) & 0x3ffffff,
24495 1
24496 ];
24497 this.length = 3;
24498 }
24499
24500 if (endian !== 'le') return;
24501
24502 // Reverse the bytes
24503 this._initArray(this.toArray(), base, endian);
24504 };
24505
24506 BN.prototype._initArray = function _initArray (number, base, endian) {
24507 // Perhaps a Uint8Array
24508 assert(typeof number.length === 'number');
24509 if (number.length <= 0) {
24510 this.words = [ 0 ];
24511 this.length = 1;
24512 return this;
24513 }
24514
24515 this.length = Math.ceil(number.length / 3);
24516 this.words = new Array(this.length);
24517 for (var i = 0; i < this.length; i++) {
24518 this.words[i] = 0;
24519 }
24520
24521 var j, w;
24522 var off = 0;
24523 if (endian === 'be') {
24524 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
24525 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
24526 this.words[j] |= (w << off) & 0x3ffffff;
24527 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
24528 off += 24;
24529 if (off >= 26) {
24530 off -= 26;
24531 j++;
24532 }
24533 }
24534 } else if (endian === 'le') {
24535 for (i = 0, j = 0; i < number.length; i += 3) {
24536 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
24537 this.words[j] |= (w << off) & 0x3ffffff;
24538 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
24539 off += 24;
24540 if (off >= 26) {
24541 off -= 26;
24542 j++;
24543 }
24544 }
24545 }
24546 return this.strip();
24547 };
24548
24549 function parseHex (str, start, end) {
24550 var r = 0;
24551 var len = Math.min(str.length, end);
24552 for (var i = start; i < len; i++) {
24553 var c = str.charCodeAt(i) - 48;
24554
24555 r <<= 4;
24556
24557 // 'a' - 'f'
24558 if (c >= 49 && c <= 54) {
24559 r |= c - 49 + 0xa;
24560
24561 // 'A' - 'F'
24562 } else if (c >= 17 && c <= 22) {
24563 r |= c - 17 + 0xa;
24564
24565 // '0' - '9'
24566 } else {
24567 r |= c & 0xf;
24568 }
24569 }
24570 return r;
24571 }
24572
24573 BN.prototype._parseHex = function _parseHex (number, start) {
24574 // Create possibly bigger array to ensure that it fits the number
24575 this.length = Math.ceil((number.length - start) / 6);
24576 this.words = new Array(this.length);
24577 for (var i = 0; i < this.length; i++) {
24578 this.words[i] = 0;
24579 }
24580
24581 var j, w;
24582 // Scan 24-bit chunks and add them to the number
24583 var off = 0;
24584 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
24585 w = parseHex(number, i, i + 6);
24586 this.words[j] |= (w << off) & 0x3ffffff;
24587 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
24588 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
24589 off += 24;
24590 if (off >= 26) {
24591 off -= 26;
24592 j++;
24593 }
24594 }
24595 if (i + 6 !== start) {
24596 w = parseHex(number, start, i + 6);
24597 this.words[j] |= (w << off) & 0x3ffffff;
24598 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
24599 }
24600 this.strip();
24601 };
24602
24603 function parseBase (str, start, end, mul) {
24604 var r = 0;
24605 var len = Math.min(str.length, end);
24606 for (var i = start; i < len; i++) {
24607 var c = str.charCodeAt(i) - 48;
24608
24609 r *= mul;
24610
24611 // 'a'
24612 if (c >= 49) {
24613 r += c - 49 + 0xa;
24614
24615 // 'A'
24616 } else if (c >= 17) {
24617 r += c - 17 + 0xa;
24618
24619 // '0' - '9'
24620 } else {
24621 r += c;
24622 }
24623 }
24624 return r;
24625 }
24626
24627 BN.prototype._parseBase = function _parseBase (number, base, start) {
24628 // Initialize as zero
24629 this.words = [ 0 ];
24630 this.length = 1;
24631
24632 // Find length of limb in base
24633 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
24634 limbLen++;
24635 }
24636 limbLen--;
24637 limbPow = (limbPow / base) | 0;
24638
24639 var total = number.length - start;
24640 var mod = total % limbLen;
24641 var end = Math.min(total, total - mod) + start;
24642
24643 var word = 0;
24644 for (var i = start; i < end; i += limbLen) {
24645 word = parseBase(number, i, i + limbLen, base);
24646
24647 this.imuln(limbPow);
24648 if (this.words[0] + word < 0x4000000) {
24649 this.words[0] += word;
24650 } else {
24651 this._iaddn(word);
24652 }
24653 }
24654
24655 if (mod !== 0) {
24656 var pow = 1;
24657 word = parseBase(number, i, number.length, base);
24658
24659 for (i = 0; i < mod; i++) {
24660 pow *= base;
24661 }
24662
24663 this.imuln(pow);
24664 if (this.words[0] + word < 0x4000000) {
24665 this.words[0] += word;
24666 } else {
24667 this._iaddn(word);
24668 }
24669 }
24670 };
24671
24672 BN.prototype.copy = function copy (dest) {
24673 dest.words = new Array(this.length);
24674 for (var i = 0; i < this.length; i++) {
24675 dest.words[i] = this.words[i];
24676 }
24677 dest.length = this.length;
24678 dest.negative = this.negative;
24679 dest.red = this.red;
24680 };
24681
24682 BN.prototype.clone = function clone () {
24683 var r = new BN(null);
24684 this.copy(r);
24685 return r;
24686 };
24687
24688 BN.prototype._expand = function _expand (size) {
24689 while (this.length < size) {
24690 this.words[this.length++] = 0;
24691 }
24692 return this;
24693 };
24694
24695 // Remove leading `0` from `this`
24696 BN.prototype.strip = function strip () {
24697 while (this.length > 1 && this.words[this.length - 1] === 0) {
24698 this.length--;
24699 }
24700 return this._normSign();
24701 };
24702
24703 BN.prototype._normSign = function _normSign () {
24704 // -0 = 0
24705 if (this.length === 1 && this.words[0] === 0) {
24706 this.negative = 0;
24707 }
24708 return this;
24709 };
24710
24711 BN.prototype.inspect = function inspect () {
24712 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
24713 };
24714
24715 /*
24716
24717 var zeros = [];
24718 var groupSizes = [];
24719 var groupBases = [];
24720
24721 var s = '';
24722 var i = -1;
24723 while (++i < BN.wordSize) {
24724 zeros[i] = s;
24725 s += '0';
24726 }
24727 groupSizes[0] = 0;
24728 groupSizes[1] = 0;
24729 groupBases[0] = 0;
24730 groupBases[1] = 0;
24731 var base = 2 - 1;
24732 while (++base < 36 + 1) {
24733 var groupSize = 0;
24734 var groupBase = 1;
24735 while (groupBase < (1 << BN.wordSize) / base) {
24736 groupBase *= base;
24737 groupSize += 1;
24738 }
24739 groupSizes[base] = groupSize;
24740 groupBases[base] = groupBase;
24741 }
24742
24743 */
24744
24745 var zeros = [
24746 '',
24747 '0',
24748 '00',
24749 '000',
24750 '0000',
24751 '00000',
24752 '000000',
24753 '0000000',
24754 '00000000',
24755 '000000000',
24756 '0000000000',
24757 '00000000000',
24758 '000000000000',
24759 '0000000000000',
24760 '00000000000000',
24761 '000000000000000',
24762 '0000000000000000',
24763 '00000000000000000',
24764 '000000000000000000',
24765 '0000000000000000000',
24766 '00000000000000000000',
24767 '000000000000000000000',
24768 '0000000000000000000000',
24769 '00000000000000000000000',
24770 '000000000000000000000000',
24771 '0000000000000000000000000'
24772 ];
24773
24774 var groupSizes = [
24775 0, 0,
24776 25, 16, 12, 11, 10, 9, 8,
24777 8, 7, 7, 7, 7, 6, 6,
24778 6, 6, 6, 6, 6, 5, 5,
24779 5, 5, 5, 5, 5, 5, 5,
24780 5, 5, 5, 5, 5, 5, 5
24781 ];
24782
24783 var groupBases = [
24784 0, 0,
24785 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
24786 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
24787 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
24788 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
24789 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
24790 ];
24791
24792 BN.prototype.toString = function toString (base, padding) {
24793 base = base || 10;
24794 padding = padding | 0 || 1;
24795
24796 var out;
24797 if (base === 16 || base === 'hex') {
24798 out = '';
24799 var off = 0;
24800 var carry = 0;
24801 for (var i = 0; i < this.length; i++) {
24802 var w = this.words[i];
24803 var word = (((w << off) | carry) & 0xffffff).toString(16);
24804 carry = (w >>> (24 - off)) & 0xffffff;
24805 if (carry !== 0 || i !== this.length - 1) {
24806 out = zeros[6 - word.length] + word + out;
24807 } else {
24808 out = word + out;
24809 }
24810 off += 2;
24811 if (off >= 26) {
24812 off -= 26;
24813 i--;
24814 }
24815 }
24816 if (carry !== 0) {
24817 out = carry.toString(16) + out;
24818 }
24819 while (out.length % padding !== 0) {
24820 out = '0' + out;
24821 }
24822 if (this.negative !== 0) {
24823 out = '-' + out;
24824 }
24825 return out;
24826 }
24827
24828 if (base === (base | 0) && base >= 2 && base <= 36) {
24829 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
24830 var groupSize = groupSizes[base];
24831 // var groupBase = Math.pow(base, groupSize);
24832 var groupBase = groupBases[base];
24833 out = '';
24834 var c = this.clone();
24835 c.negative = 0;
24836 while (!c.isZero()) {
24837 var r = c.modn(groupBase).toString(base);
24838 c = c.idivn(groupBase);
24839
24840 if (!c.isZero()) {
24841 out = zeros[groupSize - r.length] + r + out;
24842 } else {
24843 out = r + out;
24844 }
24845 }
24846 if (this.isZero()) {
24847 out = '0' + out;
24848 }
24849 while (out.length % padding !== 0) {
24850 out = '0' + out;
24851 }
24852 if (this.negative !== 0) {
24853 out = '-' + out;
24854 }
24855 return out;
24856 }
24857
24858 assert(false, 'Base should be between 2 and 36');
24859 };
24860
24861 BN.prototype.toNumber = function toNumber () {
24862 var ret = this.words[0];
24863 if (this.length === 2) {
24864 ret += this.words[1] * 0x4000000;
24865 } else if (this.length === 3 && this.words[2] === 0x01) {
24866 // NOTE: at this stage it is known that the top bit is set
24867 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
24868 } else if (this.length > 2) {
24869 assert(false, 'Number can only safely store up to 53 bits');
24870 }
24871 return (this.negative !== 0) ? -ret : ret;
24872 };
24873
24874 BN.prototype.toJSON = function toJSON () {
24875 return this.toString(16);
24876 };
24877
24878 BN.prototype.toBuffer = function toBuffer (endian, length) {
24879 assert(typeof Buffer !== 'undefined');
24880 return this.toArrayLike(Buffer, endian, length);
24881 };
24882
24883 BN.prototype.toArray = function toArray (endian, length) {
24884 return this.toArrayLike(Array, endian, length);
24885 };
24886
24887 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
24888 var byteLength = this.byteLength();
24889 var reqLength = length || Math.max(1, byteLength);
24890 assert(byteLength <= reqLength, 'byte array longer than desired length');
24891 assert(reqLength > 0, 'Requested array length <= 0');
24892
24893 this.strip();
24894 var littleEndian = endian === 'le';
24895 var res = new ArrayType(reqLength);
24896
24897 var b, i;
24898 var q = this.clone();
24899 if (!littleEndian) {
24900 // Assume big-endian
24901 for (i = 0; i < reqLength - byteLength; i++) {
24902 res[i] = 0;
24903 }
24904
24905 for (i = 0; !q.isZero(); i++) {
24906 b = q.andln(0xff);
24907 q.iushrn(8);
24908
24909 res[reqLength - i - 1] = b;
24910 }
24911 } else {
24912 for (i = 0; !q.isZero(); i++) {
24913 b = q.andln(0xff);
24914 q.iushrn(8);
24915
24916 res[i] = b;
24917 }
24918
24919 for (; i < reqLength; i++) {
24920 res[i] = 0;
24921 }
24922 }
24923
24924 return res;
24925 };
24926
24927 if (Math.clz32) {
24928 BN.prototype._countBits = function _countBits (w) {
24929 return 32 - Math.clz32(w);
24930 };
24931 } else {
24932 BN.prototype._countBits = function _countBits (w) {
24933 var t = w;
24934 var r = 0;
24935 if (t >= 0x1000) {
24936 r += 13;
24937 t >>>= 13;
24938 }
24939 if (t >= 0x40) {
24940 r += 7;
24941 t >>>= 7;
24942 }
24943 if (t >= 0x8) {
24944 r += 4;
24945 t >>>= 4;
24946 }
24947 if (t >= 0x02) {
24948 r += 2;
24949 t >>>= 2;
24950 }
24951 return r + t;
24952 };
24953 }
24954
24955 BN.prototype._zeroBits = function _zeroBits (w) {
24956 // Short-cut
24957 if (w === 0) return 26;
24958
24959 var t = w;
24960 var r = 0;
24961 if ((t & 0x1fff) === 0) {
24962 r += 13;
24963 t >>>= 13;
24964 }
24965 if ((t & 0x7f) === 0) {
24966 r += 7;
24967 t >>>= 7;
24968 }
24969 if ((t & 0xf) === 0) {
24970 r += 4;
24971 t >>>= 4;
24972 }
24973 if ((t & 0x3) === 0) {
24974 r += 2;
24975 t >>>= 2;
24976 }
24977 if ((t & 0x1) === 0) {
24978 r++;
24979 }
24980 return r;
24981 };
24982
24983 // Return number of used bits in a BN
24984 BN.prototype.bitLength = function bitLength () {
24985 var w = this.words[this.length - 1];
24986 var hi = this._countBits(w);
24987 return (this.length - 1) * 26 + hi;
24988 };
24989
24990 function toBitArray (num) {
24991 var w = new Array(num.bitLength());
24992
24993 for (var bit = 0; bit < w.length; bit++) {
24994 var off = (bit / 26) | 0;
24995 var wbit = bit % 26;
24996
24997 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
24998 }
24999
25000 return w;
25001 }
25002
25003 // Number of trailing zero bits
25004 BN.prototype.zeroBits = function zeroBits () {
25005 if (this.isZero()) return 0;
25006
25007 var r = 0;
25008 for (var i = 0; i < this.length; i++) {
25009 var b = this._zeroBits(this.words[i]);
25010 r += b;
25011 if (b !== 26) break;
25012 }
25013 return r;
25014 };
25015
25016 BN.prototype.byteLength = function byteLength () {
25017 return Math.ceil(this.bitLength() / 8);
25018 };
25019
25020 BN.prototype.toTwos = function toTwos (width) {
25021 if (this.negative !== 0) {
25022 return this.abs().inotn(width).iaddn(1);
25023 }
25024 return this.clone();
25025 };
25026
25027 BN.prototype.fromTwos = function fromTwos (width) {
25028 if (this.testn(width - 1)) {
25029 return this.notn(width).iaddn(1).ineg();
25030 }
25031 return this.clone();
25032 };
25033
25034 BN.prototype.isNeg = function isNeg () {
25035 return this.negative !== 0;
25036 };
25037
25038 // Return negative clone of `this`
25039 BN.prototype.neg = function neg () {
25040 return this.clone().ineg();
25041 };
25042
25043 BN.prototype.ineg = function ineg () {
25044 if (!this.isZero()) {
25045 this.negative ^= 1;
25046 }
25047
25048 return this;
25049 };
25050
25051 // Or `num` with `this` in-place
25052 BN.prototype.iuor = function iuor (num) {
25053 while (this.length < num.length) {
25054 this.words[this.length++] = 0;
25055 }
25056
25057 for (var i = 0; i < num.length; i++) {
25058 this.words[i] = this.words[i] | num.words[i];
25059 }
25060
25061 return this.strip();
25062 };
25063
25064 BN.prototype.ior = function ior (num) {
25065 assert((this.negative | num.negative) === 0);
25066 return this.iuor(num);
25067 };
25068
25069 // Or `num` with `this`
25070 BN.prototype.or = function or (num) {
25071 if (this.length > num.length) return this.clone().ior(num);
25072 return num.clone().ior(this);
25073 };
25074
25075 BN.prototype.uor = function uor (num) {
25076 if (this.length > num.length) return this.clone().iuor(num);
25077 return num.clone().iuor(this);
25078 };
25079
25080 // And `num` with `this` in-place
25081 BN.prototype.iuand = function iuand (num) {
25082 // b = min-length(num, this)
25083 var b;
25084 if (this.length > num.length) {
25085 b = num;
25086 } else {
25087 b = this;
25088 }
25089
25090 for (var i = 0; i < b.length; i++) {
25091 this.words[i] = this.words[i] & num.words[i];
25092 }
25093
25094 this.length = b.length;
25095
25096 return this.strip();
25097 };
25098
25099 BN.prototype.iand = function iand (num) {
25100 assert((this.negative | num.negative) === 0);
25101 return this.iuand(num);
25102 };
25103
25104 // And `num` with `this`
25105 BN.prototype.and = function and (num) {
25106 if (this.length > num.length) return this.clone().iand(num);
25107 return num.clone().iand(this);
25108 };
25109
25110 BN.prototype.uand = function uand (num) {
25111 if (this.length > num.length) return this.clone().iuand(num);
25112 return num.clone().iuand(this);
25113 };
25114
25115 // Xor `num` with `this` in-place
25116 BN.prototype.iuxor = function iuxor (num) {
25117 // a.length > b.length
25118 var a;
25119 var b;
25120 if (this.length > num.length) {
25121 a = this;
25122 b = num;
25123 } else {
25124 a = num;
25125 b = this;
25126 }
25127
25128 for (var i = 0; i < b.length; i++) {
25129 this.words[i] = a.words[i] ^ b.words[i];
25130 }
25131
25132 if (this !== a) {
25133 for (; i < a.length; i++) {
25134 this.words[i] = a.words[i];
25135 }
25136 }
25137
25138 this.length = a.length;
25139
25140 return this.strip();
25141 };
25142
25143 BN.prototype.ixor = function ixor (num) {
25144 assert((this.negative | num.negative) === 0);
25145 return this.iuxor(num);
25146 };
25147
25148 // Xor `num` with `this`
25149 BN.prototype.xor = function xor (num) {
25150 if (this.length > num.length) return this.clone().ixor(num);
25151 return num.clone().ixor(this);
25152 };
25153
25154 BN.prototype.uxor = function uxor (num) {
25155 if (this.length > num.length) return this.clone().iuxor(num);
25156 return num.clone().iuxor(this);
25157 };
25158
25159 // Not ``this`` with ``width`` bitwidth
25160 BN.prototype.inotn = function inotn (width) {
25161 assert(typeof width === 'number' && width >= 0);
25162
25163 var bytesNeeded = Math.ceil(width / 26) | 0;
25164 var bitsLeft = width % 26;
25165
25166 // Extend the buffer with leading zeroes
25167 this._expand(bytesNeeded);
25168
25169 if (bitsLeft > 0) {
25170 bytesNeeded--;
25171 }
25172
25173 // Handle complete words
25174 for (var i = 0; i < bytesNeeded; i++) {
25175 this.words[i] = ~this.words[i] & 0x3ffffff;
25176 }
25177
25178 // Handle the residue
25179 if (bitsLeft > 0) {
25180 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
25181 }
25182
25183 // And remove leading zeroes
25184 return this.strip();
25185 };
25186
25187 BN.prototype.notn = function notn (width) {
25188 return this.clone().inotn(width);
25189 };
25190
25191 // Set `bit` of `this`
25192 BN.prototype.setn = function setn (bit, val) {
25193 assert(typeof bit === 'number' && bit >= 0);
25194
25195 var off = (bit / 26) | 0;
25196 var wbit = bit % 26;
25197
25198 this._expand(off + 1);
25199
25200 if (val) {
25201 this.words[off] = this.words[off] | (1 << wbit);
25202 } else {
25203 this.words[off] = this.words[off] & ~(1 << wbit);
25204 }
25205
25206 return this.strip();
25207 };
25208
25209 // Add `num` to `this` in-place
25210 BN.prototype.iadd = function iadd (num) {
25211 var r;
25212
25213 // negative + positive
25214 if (this.negative !== 0 && num.negative === 0) {
25215 this.negative = 0;
25216 r = this.isub(num);
25217 this.negative ^= 1;
25218 return this._normSign();
25219
25220 // positive + negative
25221 } else if (this.negative === 0 && num.negative !== 0) {
25222 num.negative = 0;
25223 r = this.isub(num);
25224 num.negative = 1;
25225 return r._normSign();
25226 }
25227
25228 // a.length > b.length
25229 var a, b;
25230 if (this.length > num.length) {
25231 a = this;
25232 b = num;
25233 } else {
25234 a = num;
25235 b = this;
25236 }
25237
25238 var carry = 0;
25239 for (var i = 0; i < b.length; i++) {
25240 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
25241 this.words[i] = r & 0x3ffffff;
25242 carry = r >>> 26;
25243 }
25244 for (; carry !== 0 && i < a.length; i++) {
25245 r = (a.words[i] | 0) + carry;
25246 this.words[i] = r & 0x3ffffff;
25247 carry = r >>> 26;
25248 }
25249
25250 this.length = a.length;
25251 if (carry !== 0) {
25252 this.words[this.length] = carry;
25253 this.length++;
25254 // Copy the rest of the words
25255 } else if (a !== this) {
25256 for (; i < a.length; i++) {
25257 this.words[i] = a.words[i];
25258 }
25259 }
25260
25261 return this;
25262 };
25263
25264 // Add `num` to `this`
25265 BN.prototype.add = function add (num) {
25266 var res;
25267 if (num.negative !== 0 && this.negative === 0) {
25268 num.negative = 0;
25269 res = this.sub(num);
25270 num.negative ^= 1;
25271 return res;
25272 } else if (num.negative === 0 && this.negative !== 0) {
25273 this.negative = 0;
25274 res = num.sub(this);
25275 this.negative = 1;
25276 return res;
25277 }
25278
25279 if (this.length > num.length) return this.clone().iadd(num);
25280
25281 return num.clone().iadd(this);
25282 };
25283
25284 // Subtract `num` from `this` in-place
25285 BN.prototype.isub = function isub (num) {
25286 // this - (-num) = this + num
25287 if (num.negative !== 0) {
25288 num.negative = 0;
25289 var r = this.iadd(num);
25290 num.negative = 1;
25291 return r._normSign();
25292
25293 // -this - num = -(this + num)
25294 } else if (this.negative !== 0) {
25295 this.negative = 0;
25296 this.iadd(num);
25297 this.negative = 1;
25298 return this._normSign();
25299 }
25300
25301 // At this point both numbers are positive
25302 var cmp = this.cmp(num);
25303
25304 // Optimization - zeroify
25305 if (cmp === 0) {
25306 this.negative = 0;
25307 this.length = 1;
25308 this.words[0] = 0;
25309 return this;
25310 }
25311
25312 // a > b
25313 var a, b;
25314 if (cmp > 0) {
25315 a = this;
25316 b = num;
25317 } else {
25318 a = num;
25319 b = this;
25320 }
25321
25322 var carry = 0;
25323 for (var i = 0; i < b.length; i++) {
25324 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
25325 carry = r >> 26;
25326 this.words[i] = r & 0x3ffffff;
25327 }
25328 for (; carry !== 0 && i < a.length; i++) {
25329 r = (a.words[i] | 0) + carry;
25330 carry = r >> 26;
25331 this.words[i] = r & 0x3ffffff;
25332 }
25333
25334 // Copy rest of the words
25335 if (carry === 0 && i < a.length && a !== this) {
25336 for (; i < a.length; i++) {
25337 this.words[i] = a.words[i];
25338 }
25339 }
25340
25341 this.length = Math.max(this.length, i);
25342
25343 if (a !== this) {
25344 this.negative = 1;
25345 }
25346
25347 return this.strip();
25348 };
25349
25350 // Subtract `num` from `this`
25351 BN.prototype.sub = function sub (num) {
25352 return this.clone().isub(num);
25353 };
25354
25355 function smallMulTo (self, num, out) {
25356 out.negative = num.negative ^ self.negative;
25357 var len = (self.length + num.length) | 0;
25358 out.length = len;
25359 len = (len - 1) | 0;
25360
25361 // Peel one iteration (compiler can't do it, because of code complexity)
25362 var a = self.words[0] | 0;
25363 var b = num.words[0] | 0;
25364 var r = a * b;
25365
25366 var lo = r & 0x3ffffff;
25367 var carry = (r / 0x4000000) | 0;
25368 out.words[0] = lo;
25369
25370 for (var k = 1; k < len; k++) {
25371 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
25372 // note that ncarry could be >= 0x3ffffff
25373 var ncarry = carry >>> 26;
25374 var rword = carry & 0x3ffffff;
25375 var maxJ = Math.min(k, num.length - 1);
25376 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
25377 var i = (k - j) | 0;
25378 a = self.words[i] | 0;
25379 b = num.words[j] | 0;
25380 r = a * b + rword;
25381 ncarry += (r / 0x4000000) | 0;
25382 rword = r & 0x3ffffff;
25383 }
25384 out.words[k] = rword | 0;
25385 carry = ncarry | 0;
25386 }
25387 if (carry !== 0) {
25388 out.words[k] = carry | 0;
25389 } else {
25390 out.length--;
25391 }
25392
25393 return out.strip();
25394 }
25395
25396 // TODO(indutny): it may be reasonable to omit it for users who don't need
25397 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
25398 // multiplication (like elliptic secp256k1).
25399 var comb10MulTo = function comb10MulTo (self, num, out) {
25400 var a = self.words;
25401 var b = num.words;
25402 var o = out.words;
25403 var c = 0;
25404 var lo;
25405 var mid;
25406 var hi;
25407 var a0 = a[0] | 0;
25408 var al0 = a0 & 0x1fff;
25409 var ah0 = a0 >>> 13;
25410 var a1 = a[1] | 0;
25411 var al1 = a1 & 0x1fff;
25412 var ah1 = a1 >>> 13;
25413 var a2 = a[2] | 0;
25414 var al2 = a2 & 0x1fff;
25415 var ah2 = a2 >>> 13;
25416 var a3 = a[3] | 0;
25417 var al3 = a3 & 0x1fff;
25418 var ah3 = a3 >>> 13;
25419 var a4 = a[4] | 0;
25420 var al4 = a4 & 0x1fff;
25421 var ah4 = a4 >>> 13;
25422 var a5 = a[5] | 0;
25423 var al5 = a5 & 0x1fff;
25424 var ah5 = a5 >>> 13;
25425 var a6 = a[6] | 0;
25426 var al6 = a6 & 0x1fff;
25427 var ah6 = a6 >>> 13;
25428 var a7 = a[7] | 0;
25429 var al7 = a7 & 0x1fff;
25430 var ah7 = a7 >>> 13;
25431 var a8 = a[8] | 0;
25432 var al8 = a8 & 0x1fff;
25433 var ah8 = a8 >>> 13;
25434 var a9 = a[9] | 0;
25435 var al9 = a9 & 0x1fff;
25436 var ah9 = a9 >>> 13;
25437 var b0 = b[0] | 0;
25438 var bl0 = b0 & 0x1fff;
25439 var bh0 = b0 >>> 13;
25440 var b1 = b[1] | 0;
25441 var bl1 = b1 & 0x1fff;
25442 var bh1 = b1 >>> 13;
25443 var b2 = b[2] | 0;
25444 var bl2 = b2 & 0x1fff;
25445 var bh2 = b2 >>> 13;
25446 var b3 = b[3] | 0;
25447 var bl3 = b3 & 0x1fff;
25448 var bh3 = b3 >>> 13;
25449 var b4 = b[4] | 0;
25450 var bl4 = b4 & 0x1fff;
25451 var bh4 = b4 >>> 13;
25452 var b5 = b[5] | 0;
25453 var bl5 = b5 & 0x1fff;
25454 var bh5 = b5 >>> 13;
25455 var b6 = b[6] | 0;
25456 var bl6 = b6 & 0x1fff;
25457 var bh6 = b6 >>> 13;
25458 var b7 = b[7] | 0;
25459 var bl7 = b7 & 0x1fff;
25460 var bh7 = b7 >>> 13;
25461 var b8 = b[8] | 0;
25462 var bl8 = b8 & 0x1fff;
25463 var bh8 = b8 >>> 13;
25464 var b9 = b[9] | 0;
25465 var bl9 = b9 & 0x1fff;
25466 var bh9 = b9 >>> 13;
25467
25468 out.negative = self.negative ^ num.negative;
25469 out.length = 19;
25470 /* k = 0 */
25471 lo = Math.imul(al0, bl0);
25472 mid = Math.imul(al0, bh0);
25473 mid = (mid + Math.imul(ah0, bl0)) | 0;
25474 hi = Math.imul(ah0, bh0);
25475 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25476 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
25477 w0 &= 0x3ffffff;
25478 /* k = 1 */
25479 lo = Math.imul(al1, bl0);
25480 mid = Math.imul(al1, bh0);
25481 mid = (mid + Math.imul(ah1, bl0)) | 0;
25482 hi = Math.imul(ah1, bh0);
25483 lo = (lo + Math.imul(al0, bl1)) | 0;
25484 mid = (mid + Math.imul(al0, bh1)) | 0;
25485 mid = (mid + Math.imul(ah0, bl1)) | 0;
25486 hi = (hi + Math.imul(ah0, bh1)) | 0;
25487 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25488 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
25489 w1 &= 0x3ffffff;
25490 /* k = 2 */
25491 lo = Math.imul(al2, bl0);
25492 mid = Math.imul(al2, bh0);
25493 mid = (mid + Math.imul(ah2, bl0)) | 0;
25494 hi = Math.imul(ah2, bh0);
25495 lo = (lo + Math.imul(al1, bl1)) | 0;
25496 mid = (mid + Math.imul(al1, bh1)) | 0;
25497 mid = (mid + Math.imul(ah1, bl1)) | 0;
25498 hi = (hi + Math.imul(ah1, bh1)) | 0;
25499 lo = (lo + Math.imul(al0, bl2)) | 0;
25500 mid = (mid + Math.imul(al0, bh2)) | 0;
25501 mid = (mid + Math.imul(ah0, bl2)) | 0;
25502 hi = (hi + Math.imul(ah0, bh2)) | 0;
25503 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25504 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
25505 w2 &= 0x3ffffff;
25506 /* k = 3 */
25507 lo = Math.imul(al3, bl0);
25508 mid = Math.imul(al3, bh0);
25509 mid = (mid + Math.imul(ah3, bl0)) | 0;
25510 hi = Math.imul(ah3, bh0);
25511 lo = (lo + Math.imul(al2, bl1)) | 0;
25512 mid = (mid + Math.imul(al2, bh1)) | 0;
25513 mid = (mid + Math.imul(ah2, bl1)) | 0;
25514 hi = (hi + Math.imul(ah2, bh1)) | 0;
25515 lo = (lo + Math.imul(al1, bl2)) | 0;
25516 mid = (mid + Math.imul(al1, bh2)) | 0;
25517 mid = (mid + Math.imul(ah1, bl2)) | 0;
25518 hi = (hi + Math.imul(ah1, bh2)) | 0;
25519 lo = (lo + Math.imul(al0, bl3)) | 0;
25520 mid = (mid + Math.imul(al0, bh3)) | 0;
25521 mid = (mid + Math.imul(ah0, bl3)) | 0;
25522 hi = (hi + Math.imul(ah0, bh3)) | 0;
25523 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25524 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
25525 w3 &= 0x3ffffff;
25526 /* k = 4 */
25527 lo = Math.imul(al4, bl0);
25528 mid = Math.imul(al4, bh0);
25529 mid = (mid + Math.imul(ah4, bl0)) | 0;
25530 hi = Math.imul(ah4, bh0);
25531 lo = (lo + Math.imul(al3, bl1)) | 0;
25532 mid = (mid + Math.imul(al3, bh1)) | 0;
25533 mid = (mid + Math.imul(ah3, bl1)) | 0;
25534 hi = (hi + Math.imul(ah3, bh1)) | 0;
25535 lo = (lo + Math.imul(al2, bl2)) | 0;
25536 mid = (mid + Math.imul(al2, bh2)) | 0;
25537 mid = (mid + Math.imul(ah2, bl2)) | 0;
25538 hi = (hi + Math.imul(ah2, bh2)) | 0;
25539 lo = (lo + Math.imul(al1, bl3)) | 0;
25540 mid = (mid + Math.imul(al1, bh3)) | 0;
25541 mid = (mid + Math.imul(ah1, bl3)) | 0;
25542 hi = (hi + Math.imul(ah1, bh3)) | 0;
25543 lo = (lo + Math.imul(al0, bl4)) | 0;
25544 mid = (mid + Math.imul(al0, bh4)) | 0;
25545 mid = (mid + Math.imul(ah0, bl4)) | 0;
25546 hi = (hi + Math.imul(ah0, bh4)) | 0;
25547 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25548 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
25549 w4 &= 0x3ffffff;
25550 /* k = 5 */
25551 lo = Math.imul(al5, bl0);
25552 mid = Math.imul(al5, bh0);
25553 mid = (mid + Math.imul(ah5, bl0)) | 0;
25554 hi = Math.imul(ah5, bh0);
25555 lo = (lo + Math.imul(al4, bl1)) | 0;
25556 mid = (mid + Math.imul(al4, bh1)) | 0;
25557 mid = (mid + Math.imul(ah4, bl1)) | 0;
25558 hi = (hi + Math.imul(ah4, bh1)) | 0;
25559 lo = (lo + Math.imul(al3, bl2)) | 0;
25560 mid = (mid + Math.imul(al3, bh2)) | 0;
25561 mid = (mid + Math.imul(ah3, bl2)) | 0;
25562 hi = (hi + Math.imul(ah3, bh2)) | 0;
25563 lo = (lo + Math.imul(al2, bl3)) | 0;
25564 mid = (mid + Math.imul(al2, bh3)) | 0;
25565 mid = (mid + Math.imul(ah2, bl3)) | 0;
25566 hi = (hi + Math.imul(ah2, bh3)) | 0;
25567 lo = (lo + Math.imul(al1, bl4)) | 0;
25568 mid = (mid + Math.imul(al1, bh4)) | 0;
25569 mid = (mid + Math.imul(ah1, bl4)) | 0;
25570 hi = (hi + Math.imul(ah1, bh4)) | 0;
25571 lo = (lo + Math.imul(al0, bl5)) | 0;
25572 mid = (mid + Math.imul(al0, bh5)) | 0;
25573 mid = (mid + Math.imul(ah0, bl5)) | 0;
25574 hi = (hi + Math.imul(ah0, bh5)) | 0;
25575 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25576 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
25577 w5 &= 0x3ffffff;
25578 /* k = 6 */
25579 lo = Math.imul(al6, bl0);
25580 mid = Math.imul(al6, bh0);
25581 mid = (mid + Math.imul(ah6, bl0)) | 0;
25582 hi = Math.imul(ah6, bh0);
25583 lo = (lo + Math.imul(al5, bl1)) | 0;
25584 mid = (mid + Math.imul(al5, bh1)) | 0;
25585 mid = (mid + Math.imul(ah5, bl1)) | 0;
25586 hi = (hi + Math.imul(ah5, bh1)) | 0;
25587 lo = (lo + Math.imul(al4, bl2)) | 0;
25588 mid = (mid + Math.imul(al4, bh2)) | 0;
25589 mid = (mid + Math.imul(ah4, bl2)) | 0;
25590 hi = (hi + Math.imul(ah4, bh2)) | 0;
25591 lo = (lo + Math.imul(al3, bl3)) | 0;
25592 mid = (mid + Math.imul(al3, bh3)) | 0;
25593 mid = (mid + Math.imul(ah3, bl3)) | 0;
25594 hi = (hi + Math.imul(ah3, bh3)) | 0;
25595 lo = (lo + Math.imul(al2, bl4)) | 0;
25596 mid = (mid + Math.imul(al2, bh4)) | 0;
25597 mid = (mid + Math.imul(ah2, bl4)) | 0;
25598 hi = (hi + Math.imul(ah2, bh4)) | 0;
25599 lo = (lo + Math.imul(al1, bl5)) | 0;
25600 mid = (mid + Math.imul(al1, bh5)) | 0;
25601 mid = (mid + Math.imul(ah1, bl5)) | 0;
25602 hi = (hi + Math.imul(ah1, bh5)) | 0;
25603 lo = (lo + Math.imul(al0, bl6)) | 0;
25604 mid = (mid + Math.imul(al0, bh6)) | 0;
25605 mid = (mid + Math.imul(ah0, bl6)) | 0;
25606 hi = (hi + Math.imul(ah0, bh6)) | 0;
25607 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25608 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
25609 w6 &= 0x3ffffff;
25610 /* k = 7 */
25611 lo = Math.imul(al7, bl0);
25612 mid = Math.imul(al7, bh0);
25613 mid = (mid + Math.imul(ah7, bl0)) | 0;
25614 hi = Math.imul(ah7, bh0);
25615 lo = (lo + Math.imul(al6, bl1)) | 0;
25616 mid = (mid + Math.imul(al6, bh1)) | 0;
25617 mid = (mid + Math.imul(ah6, bl1)) | 0;
25618 hi = (hi + Math.imul(ah6, bh1)) | 0;
25619 lo = (lo + Math.imul(al5, bl2)) | 0;
25620 mid = (mid + Math.imul(al5, bh2)) | 0;
25621 mid = (mid + Math.imul(ah5, bl2)) | 0;
25622 hi = (hi + Math.imul(ah5, bh2)) | 0;
25623 lo = (lo + Math.imul(al4, bl3)) | 0;
25624 mid = (mid + Math.imul(al4, bh3)) | 0;
25625 mid = (mid + Math.imul(ah4, bl3)) | 0;
25626 hi = (hi + Math.imul(ah4, bh3)) | 0;
25627 lo = (lo + Math.imul(al3, bl4)) | 0;
25628 mid = (mid + Math.imul(al3, bh4)) | 0;
25629 mid = (mid + Math.imul(ah3, bl4)) | 0;
25630 hi = (hi + Math.imul(ah3, bh4)) | 0;
25631 lo = (lo + Math.imul(al2, bl5)) | 0;
25632 mid = (mid + Math.imul(al2, bh5)) | 0;
25633 mid = (mid + Math.imul(ah2, bl5)) | 0;
25634 hi = (hi + Math.imul(ah2, bh5)) | 0;
25635 lo = (lo + Math.imul(al1, bl6)) | 0;
25636 mid = (mid + Math.imul(al1, bh6)) | 0;
25637 mid = (mid + Math.imul(ah1, bl6)) | 0;
25638 hi = (hi + Math.imul(ah1, bh6)) | 0;
25639 lo = (lo + Math.imul(al0, bl7)) | 0;
25640 mid = (mid + Math.imul(al0, bh7)) | 0;
25641 mid = (mid + Math.imul(ah0, bl7)) | 0;
25642 hi = (hi + Math.imul(ah0, bh7)) | 0;
25643 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25644 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
25645 w7 &= 0x3ffffff;
25646 /* k = 8 */
25647 lo = Math.imul(al8, bl0);
25648 mid = Math.imul(al8, bh0);
25649 mid = (mid + Math.imul(ah8, bl0)) | 0;
25650 hi = Math.imul(ah8, bh0);
25651 lo = (lo + Math.imul(al7, bl1)) | 0;
25652 mid = (mid + Math.imul(al7, bh1)) | 0;
25653 mid = (mid + Math.imul(ah7, bl1)) | 0;
25654 hi = (hi + Math.imul(ah7, bh1)) | 0;
25655 lo = (lo + Math.imul(al6, bl2)) | 0;
25656 mid = (mid + Math.imul(al6, bh2)) | 0;
25657 mid = (mid + Math.imul(ah6, bl2)) | 0;
25658 hi = (hi + Math.imul(ah6, bh2)) | 0;
25659 lo = (lo + Math.imul(al5, bl3)) | 0;
25660 mid = (mid + Math.imul(al5, bh3)) | 0;
25661 mid = (mid + Math.imul(ah5, bl3)) | 0;
25662 hi = (hi + Math.imul(ah5, bh3)) | 0;
25663 lo = (lo + Math.imul(al4, bl4)) | 0;
25664 mid = (mid + Math.imul(al4, bh4)) | 0;
25665 mid = (mid + Math.imul(ah4, bl4)) | 0;
25666 hi = (hi + Math.imul(ah4, bh4)) | 0;
25667 lo = (lo + Math.imul(al3, bl5)) | 0;
25668 mid = (mid + Math.imul(al3, bh5)) | 0;
25669 mid = (mid + Math.imul(ah3, bl5)) | 0;
25670 hi = (hi + Math.imul(ah3, bh5)) | 0;
25671 lo = (lo + Math.imul(al2, bl6)) | 0;
25672 mid = (mid + Math.imul(al2, bh6)) | 0;
25673 mid = (mid + Math.imul(ah2, bl6)) | 0;
25674 hi = (hi + Math.imul(ah2, bh6)) | 0;
25675 lo = (lo + Math.imul(al1, bl7)) | 0;
25676 mid = (mid + Math.imul(al1, bh7)) | 0;
25677 mid = (mid + Math.imul(ah1, bl7)) | 0;
25678 hi = (hi + Math.imul(ah1, bh7)) | 0;
25679 lo = (lo + Math.imul(al0, bl8)) | 0;
25680 mid = (mid + Math.imul(al0, bh8)) | 0;
25681 mid = (mid + Math.imul(ah0, bl8)) | 0;
25682 hi = (hi + Math.imul(ah0, bh8)) | 0;
25683 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25684 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
25685 w8 &= 0x3ffffff;
25686 /* k = 9 */
25687 lo = Math.imul(al9, bl0);
25688 mid = Math.imul(al9, bh0);
25689 mid = (mid + Math.imul(ah9, bl0)) | 0;
25690 hi = Math.imul(ah9, bh0);
25691 lo = (lo + Math.imul(al8, bl1)) | 0;
25692 mid = (mid + Math.imul(al8, bh1)) | 0;
25693 mid = (mid + Math.imul(ah8, bl1)) | 0;
25694 hi = (hi + Math.imul(ah8, bh1)) | 0;
25695 lo = (lo + Math.imul(al7, bl2)) | 0;
25696 mid = (mid + Math.imul(al7, bh2)) | 0;
25697 mid = (mid + Math.imul(ah7, bl2)) | 0;
25698 hi = (hi + Math.imul(ah7, bh2)) | 0;
25699 lo = (lo + Math.imul(al6, bl3)) | 0;
25700 mid = (mid + Math.imul(al6, bh3)) | 0;
25701 mid = (mid + Math.imul(ah6, bl3)) | 0;
25702 hi = (hi + Math.imul(ah6, bh3)) | 0;
25703 lo = (lo + Math.imul(al5, bl4)) | 0;
25704 mid = (mid + Math.imul(al5, bh4)) | 0;
25705 mid = (mid + Math.imul(ah5, bl4)) | 0;
25706 hi = (hi + Math.imul(ah5, bh4)) | 0;
25707 lo = (lo + Math.imul(al4, bl5)) | 0;
25708 mid = (mid + Math.imul(al4, bh5)) | 0;
25709 mid = (mid + Math.imul(ah4, bl5)) | 0;
25710 hi = (hi + Math.imul(ah4, bh5)) | 0;
25711 lo = (lo + Math.imul(al3, bl6)) | 0;
25712 mid = (mid + Math.imul(al3, bh6)) | 0;
25713 mid = (mid + Math.imul(ah3, bl6)) | 0;
25714 hi = (hi + Math.imul(ah3, bh6)) | 0;
25715 lo = (lo + Math.imul(al2, bl7)) | 0;
25716 mid = (mid + Math.imul(al2, bh7)) | 0;
25717 mid = (mid + Math.imul(ah2, bl7)) | 0;
25718 hi = (hi + Math.imul(ah2, bh7)) | 0;
25719 lo = (lo + Math.imul(al1, bl8)) | 0;
25720 mid = (mid + Math.imul(al1, bh8)) | 0;
25721 mid = (mid + Math.imul(ah1, bl8)) | 0;
25722 hi = (hi + Math.imul(ah1, bh8)) | 0;
25723 lo = (lo + Math.imul(al0, bl9)) | 0;
25724 mid = (mid + Math.imul(al0, bh9)) | 0;
25725 mid = (mid + Math.imul(ah0, bl9)) | 0;
25726 hi = (hi + Math.imul(ah0, bh9)) | 0;
25727 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25728 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
25729 w9 &= 0x3ffffff;
25730 /* k = 10 */
25731 lo = Math.imul(al9, bl1);
25732 mid = Math.imul(al9, bh1);
25733 mid = (mid + Math.imul(ah9, bl1)) | 0;
25734 hi = Math.imul(ah9, bh1);
25735 lo = (lo + Math.imul(al8, bl2)) | 0;
25736 mid = (mid + Math.imul(al8, bh2)) | 0;
25737 mid = (mid + Math.imul(ah8, bl2)) | 0;
25738 hi = (hi + Math.imul(ah8, bh2)) | 0;
25739 lo = (lo + Math.imul(al7, bl3)) | 0;
25740 mid = (mid + Math.imul(al7, bh3)) | 0;
25741 mid = (mid + Math.imul(ah7, bl3)) | 0;
25742 hi = (hi + Math.imul(ah7, bh3)) | 0;
25743 lo = (lo + Math.imul(al6, bl4)) | 0;
25744 mid = (mid + Math.imul(al6, bh4)) | 0;
25745 mid = (mid + Math.imul(ah6, bl4)) | 0;
25746 hi = (hi + Math.imul(ah6, bh4)) | 0;
25747 lo = (lo + Math.imul(al5, bl5)) | 0;
25748 mid = (mid + Math.imul(al5, bh5)) | 0;
25749 mid = (mid + Math.imul(ah5, bl5)) | 0;
25750 hi = (hi + Math.imul(ah5, bh5)) | 0;
25751 lo = (lo + Math.imul(al4, bl6)) | 0;
25752 mid = (mid + Math.imul(al4, bh6)) | 0;
25753 mid = (mid + Math.imul(ah4, bl6)) | 0;
25754 hi = (hi + Math.imul(ah4, bh6)) | 0;
25755 lo = (lo + Math.imul(al3, bl7)) | 0;
25756 mid = (mid + Math.imul(al3, bh7)) | 0;
25757 mid = (mid + Math.imul(ah3, bl7)) | 0;
25758 hi = (hi + Math.imul(ah3, bh7)) | 0;
25759 lo = (lo + Math.imul(al2, bl8)) | 0;
25760 mid = (mid + Math.imul(al2, bh8)) | 0;
25761 mid = (mid + Math.imul(ah2, bl8)) | 0;
25762 hi = (hi + Math.imul(ah2, bh8)) | 0;
25763 lo = (lo + Math.imul(al1, bl9)) | 0;
25764 mid = (mid + Math.imul(al1, bh9)) | 0;
25765 mid = (mid + Math.imul(ah1, bl9)) | 0;
25766 hi = (hi + Math.imul(ah1, bh9)) | 0;
25767 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25768 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
25769 w10 &= 0x3ffffff;
25770 /* k = 11 */
25771 lo = Math.imul(al9, bl2);
25772 mid = Math.imul(al9, bh2);
25773 mid = (mid + Math.imul(ah9, bl2)) | 0;
25774 hi = Math.imul(ah9, bh2);
25775 lo = (lo + Math.imul(al8, bl3)) | 0;
25776 mid = (mid + Math.imul(al8, bh3)) | 0;
25777 mid = (mid + Math.imul(ah8, bl3)) | 0;
25778 hi = (hi + Math.imul(ah8, bh3)) | 0;
25779 lo = (lo + Math.imul(al7, bl4)) | 0;
25780 mid = (mid + Math.imul(al7, bh4)) | 0;
25781 mid = (mid + Math.imul(ah7, bl4)) | 0;
25782 hi = (hi + Math.imul(ah7, bh4)) | 0;
25783 lo = (lo + Math.imul(al6, bl5)) | 0;
25784 mid = (mid + Math.imul(al6, bh5)) | 0;
25785 mid = (mid + Math.imul(ah6, bl5)) | 0;
25786 hi = (hi + Math.imul(ah6, bh5)) | 0;
25787 lo = (lo + Math.imul(al5, bl6)) | 0;
25788 mid = (mid + Math.imul(al5, bh6)) | 0;
25789 mid = (mid + Math.imul(ah5, bl6)) | 0;
25790 hi = (hi + Math.imul(ah5, bh6)) | 0;
25791 lo = (lo + Math.imul(al4, bl7)) | 0;
25792 mid = (mid + Math.imul(al4, bh7)) | 0;
25793 mid = (mid + Math.imul(ah4, bl7)) | 0;
25794 hi = (hi + Math.imul(ah4, bh7)) | 0;
25795 lo = (lo + Math.imul(al3, bl8)) | 0;
25796 mid = (mid + Math.imul(al3, bh8)) | 0;
25797 mid = (mid + Math.imul(ah3, bl8)) | 0;
25798 hi = (hi + Math.imul(ah3, bh8)) | 0;
25799 lo = (lo + Math.imul(al2, bl9)) | 0;
25800 mid = (mid + Math.imul(al2, bh9)) | 0;
25801 mid = (mid + Math.imul(ah2, bl9)) | 0;
25802 hi = (hi + Math.imul(ah2, bh9)) | 0;
25803 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25804 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
25805 w11 &= 0x3ffffff;
25806 /* k = 12 */
25807 lo = Math.imul(al9, bl3);
25808 mid = Math.imul(al9, bh3);
25809 mid = (mid + Math.imul(ah9, bl3)) | 0;
25810 hi = Math.imul(ah9, bh3);
25811 lo = (lo + Math.imul(al8, bl4)) | 0;
25812 mid = (mid + Math.imul(al8, bh4)) | 0;
25813 mid = (mid + Math.imul(ah8, bl4)) | 0;
25814 hi = (hi + Math.imul(ah8, bh4)) | 0;
25815 lo = (lo + Math.imul(al7, bl5)) | 0;
25816 mid = (mid + Math.imul(al7, bh5)) | 0;
25817 mid = (mid + Math.imul(ah7, bl5)) | 0;
25818 hi = (hi + Math.imul(ah7, bh5)) | 0;
25819 lo = (lo + Math.imul(al6, bl6)) | 0;
25820 mid = (mid + Math.imul(al6, bh6)) | 0;
25821 mid = (mid + Math.imul(ah6, bl6)) | 0;
25822 hi = (hi + Math.imul(ah6, bh6)) | 0;
25823 lo = (lo + Math.imul(al5, bl7)) | 0;
25824 mid = (mid + Math.imul(al5, bh7)) | 0;
25825 mid = (mid + Math.imul(ah5, bl7)) | 0;
25826 hi = (hi + Math.imul(ah5, bh7)) | 0;
25827 lo = (lo + Math.imul(al4, bl8)) | 0;
25828 mid = (mid + Math.imul(al4, bh8)) | 0;
25829 mid = (mid + Math.imul(ah4, bl8)) | 0;
25830 hi = (hi + Math.imul(ah4, bh8)) | 0;
25831 lo = (lo + Math.imul(al3, bl9)) | 0;
25832 mid = (mid + Math.imul(al3, bh9)) | 0;
25833 mid = (mid + Math.imul(ah3, bl9)) | 0;
25834 hi = (hi + Math.imul(ah3, bh9)) | 0;
25835 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25836 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
25837 w12 &= 0x3ffffff;
25838 /* k = 13 */
25839 lo = Math.imul(al9, bl4);
25840 mid = Math.imul(al9, bh4);
25841 mid = (mid + Math.imul(ah9, bl4)) | 0;
25842 hi = Math.imul(ah9, bh4);
25843 lo = (lo + Math.imul(al8, bl5)) | 0;
25844 mid = (mid + Math.imul(al8, bh5)) | 0;
25845 mid = (mid + Math.imul(ah8, bl5)) | 0;
25846 hi = (hi + Math.imul(ah8, bh5)) | 0;
25847 lo = (lo + Math.imul(al7, bl6)) | 0;
25848 mid = (mid + Math.imul(al7, bh6)) | 0;
25849 mid = (mid + Math.imul(ah7, bl6)) | 0;
25850 hi = (hi + Math.imul(ah7, bh6)) | 0;
25851 lo = (lo + Math.imul(al6, bl7)) | 0;
25852 mid = (mid + Math.imul(al6, bh7)) | 0;
25853 mid = (mid + Math.imul(ah6, bl7)) | 0;
25854 hi = (hi + Math.imul(ah6, bh7)) | 0;
25855 lo = (lo + Math.imul(al5, bl8)) | 0;
25856 mid = (mid + Math.imul(al5, bh8)) | 0;
25857 mid = (mid + Math.imul(ah5, bl8)) | 0;
25858 hi = (hi + Math.imul(ah5, bh8)) | 0;
25859 lo = (lo + Math.imul(al4, bl9)) | 0;
25860 mid = (mid + Math.imul(al4, bh9)) | 0;
25861 mid = (mid + Math.imul(ah4, bl9)) | 0;
25862 hi = (hi + Math.imul(ah4, bh9)) | 0;
25863 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25864 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
25865 w13 &= 0x3ffffff;
25866 /* k = 14 */
25867 lo = Math.imul(al9, bl5);
25868 mid = Math.imul(al9, bh5);
25869 mid = (mid + Math.imul(ah9, bl5)) | 0;
25870 hi = Math.imul(ah9, bh5);
25871 lo = (lo + Math.imul(al8, bl6)) | 0;
25872 mid = (mid + Math.imul(al8, bh6)) | 0;
25873 mid = (mid + Math.imul(ah8, bl6)) | 0;
25874 hi = (hi + Math.imul(ah8, bh6)) | 0;
25875 lo = (lo + Math.imul(al7, bl7)) | 0;
25876 mid = (mid + Math.imul(al7, bh7)) | 0;
25877 mid = (mid + Math.imul(ah7, bl7)) | 0;
25878 hi = (hi + Math.imul(ah7, bh7)) | 0;
25879 lo = (lo + Math.imul(al6, bl8)) | 0;
25880 mid = (mid + Math.imul(al6, bh8)) | 0;
25881 mid = (mid + Math.imul(ah6, bl8)) | 0;
25882 hi = (hi + Math.imul(ah6, bh8)) | 0;
25883 lo = (lo + Math.imul(al5, bl9)) | 0;
25884 mid = (mid + Math.imul(al5, bh9)) | 0;
25885 mid = (mid + Math.imul(ah5, bl9)) | 0;
25886 hi = (hi + Math.imul(ah5, bh9)) | 0;
25887 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25888 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
25889 w14 &= 0x3ffffff;
25890 /* k = 15 */
25891 lo = Math.imul(al9, bl6);
25892 mid = Math.imul(al9, bh6);
25893 mid = (mid + Math.imul(ah9, bl6)) | 0;
25894 hi = Math.imul(ah9, bh6);
25895 lo = (lo + Math.imul(al8, bl7)) | 0;
25896 mid = (mid + Math.imul(al8, bh7)) | 0;
25897 mid = (mid + Math.imul(ah8, bl7)) | 0;
25898 hi = (hi + Math.imul(ah8, bh7)) | 0;
25899 lo = (lo + Math.imul(al7, bl8)) | 0;
25900 mid = (mid + Math.imul(al7, bh8)) | 0;
25901 mid = (mid + Math.imul(ah7, bl8)) | 0;
25902 hi = (hi + Math.imul(ah7, bh8)) | 0;
25903 lo = (lo + Math.imul(al6, bl9)) | 0;
25904 mid = (mid + Math.imul(al6, bh9)) | 0;
25905 mid = (mid + Math.imul(ah6, bl9)) | 0;
25906 hi = (hi + Math.imul(ah6, bh9)) | 0;
25907 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25908 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
25909 w15 &= 0x3ffffff;
25910 /* k = 16 */
25911 lo = Math.imul(al9, bl7);
25912 mid = Math.imul(al9, bh7);
25913 mid = (mid + Math.imul(ah9, bl7)) | 0;
25914 hi = Math.imul(ah9, bh7);
25915 lo = (lo + Math.imul(al8, bl8)) | 0;
25916 mid = (mid + Math.imul(al8, bh8)) | 0;
25917 mid = (mid + Math.imul(ah8, bl8)) | 0;
25918 hi = (hi + Math.imul(ah8, bh8)) | 0;
25919 lo = (lo + Math.imul(al7, bl9)) | 0;
25920 mid = (mid + Math.imul(al7, bh9)) | 0;
25921 mid = (mid + Math.imul(ah7, bl9)) | 0;
25922 hi = (hi + Math.imul(ah7, bh9)) | 0;
25923 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25924 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
25925 w16 &= 0x3ffffff;
25926 /* k = 17 */
25927 lo = Math.imul(al9, bl8);
25928 mid = Math.imul(al9, bh8);
25929 mid = (mid + Math.imul(ah9, bl8)) | 0;
25930 hi = Math.imul(ah9, bh8);
25931 lo = (lo + Math.imul(al8, bl9)) | 0;
25932 mid = (mid + Math.imul(al8, bh9)) | 0;
25933 mid = (mid + Math.imul(ah8, bl9)) | 0;
25934 hi = (hi + Math.imul(ah8, bh9)) | 0;
25935 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25936 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
25937 w17 &= 0x3ffffff;
25938 /* k = 18 */
25939 lo = Math.imul(al9, bl9);
25940 mid = Math.imul(al9, bh9);
25941 mid = (mid + Math.imul(ah9, bl9)) | 0;
25942 hi = Math.imul(ah9, bh9);
25943 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25944 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
25945 w18 &= 0x3ffffff;
25946 o[0] = w0;
25947 o[1] = w1;
25948 o[2] = w2;
25949 o[3] = w3;
25950 o[4] = w4;
25951 o[5] = w5;
25952 o[6] = w6;
25953 o[7] = w7;
25954 o[8] = w8;
25955 o[9] = w9;
25956 o[10] = w10;
25957 o[11] = w11;
25958 o[12] = w12;
25959 o[13] = w13;
25960 o[14] = w14;
25961 o[15] = w15;
25962 o[16] = w16;
25963 o[17] = w17;
25964 o[18] = w18;
25965 if (c !== 0) {
25966 o[19] = c;
25967 out.length++;
25968 }
25969 return out;
25970 };
25971
25972 // Polyfill comb
25973 if (!Math.imul) {
25974 comb10MulTo = smallMulTo;
25975 }
25976
25977 function bigMulTo (self, num, out) {
25978 out.negative = num.negative ^ self.negative;
25979 out.length = self.length + num.length;
25980
25981 var carry = 0;
25982 var hncarry = 0;
25983 for (var k = 0; k < out.length - 1; k++) {
25984 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
25985 // note that ncarry could be >= 0x3ffffff
25986 var ncarry = hncarry;
25987 hncarry = 0;
25988 var rword = carry & 0x3ffffff;
25989 var maxJ = Math.min(k, num.length - 1);
25990 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
25991 var i = k - j;
25992 var a = self.words[i] | 0;
25993 var b = num.words[j] | 0;
25994 var r = a * b;
25995
25996 var lo = r & 0x3ffffff;
25997 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
25998 lo = (lo + rword) | 0;
25999 rword = lo & 0x3ffffff;
26000 ncarry = (ncarry + (lo >>> 26)) | 0;
26001
26002 hncarry += ncarry >>> 26;
26003 ncarry &= 0x3ffffff;
26004 }
26005 out.words[k] = rword;
26006 carry = ncarry;
26007 ncarry = hncarry;
26008 }
26009 if (carry !== 0) {
26010 out.words[k] = carry;
26011 } else {
26012 out.length--;
26013 }
26014
26015 return out.strip();
26016 }
26017
26018 function jumboMulTo (self, num, out) {
26019 var fftm = new FFTM();
26020 return fftm.mulp(self, num, out);
26021 }
26022
26023 BN.prototype.mulTo = function mulTo (num, out) {
26024 var res;
26025 var len = this.length + num.length;
26026 if (this.length === 10 && num.length === 10) {
26027 res = comb10MulTo(this, num, out);
26028 } else if (len < 63) {
26029 res = smallMulTo(this, num, out);
26030 } else if (len < 1024) {
26031 res = bigMulTo(this, num, out);
26032 } else {
26033 res = jumboMulTo(this, num, out);
26034 }
26035
26036 return res;
26037 };
26038
26039 // Cooley-Tukey algorithm for FFT
26040 // slightly revisited to rely on looping instead of recursion
26041
26042 function FFTM (x, y) {
26043 this.x = x;
26044 this.y = y;
26045 }
26046
26047 FFTM.prototype.makeRBT = function makeRBT (N) {
26048 var t = new Array(N);
26049 var l = BN.prototype._countBits(N) - 1;
26050 for (var i = 0; i < N; i++) {
26051 t[i] = this.revBin(i, l, N);
26052 }
26053
26054 return t;
26055 };
26056
26057 // Returns binary-reversed representation of `x`
26058 FFTM.prototype.revBin = function revBin (x, l, N) {
26059 if (x === 0 || x === N - 1) return x;
26060
26061 var rb = 0;
26062 for (var i = 0; i < l; i++) {
26063 rb |= (x & 1) << (l - i - 1);
26064 x >>= 1;
26065 }
26066
26067 return rb;
26068 };
26069
26070 // Performs "tweedling" phase, therefore 'emulating'
26071 // behaviour of the recursive algorithm
26072 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26073 for (var i = 0; i < N; i++) {
26074 rtws[i] = rws[rbt[i]];
26075 itws[i] = iws[rbt[i]];
26076 }
26077 };
26078
26079 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26080 this.permute(rbt, rws, iws, rtws, itws, N);
26081
26082 for (var s = 1; s < N; s <<= 1) {
26083 var l = s << 1;
26084
26085 var rtwdf = Math.cos(2 * Math.PI / l);
26086 var itwdf = Math.sin(2 * Math.PI / l);
26087
26088 for (var p = 0; p < N; p += l) {
26089 var rtwdf_ = rtwdf;
26090 var itwdf_ = itwdf;
26091
26092 for (var j = 0; j < s; j++) {
26093 var re = rtws[p + j];
26094 var ie = itws[p + j];
26095
26096 var ro = rtws[p + j + s];
26097 var io = itws[p + j + s];
26098
26099 var rx = rtwdf_ * ro - itwdf_ * io;
26100
26101 io = rtwdf_ * io + itwdf_ * ro;
26102 ro = rx;
26103
26104 rtws[p + j] = re + ro;
26105 itws[p + j] = ie + io;
26106
26107 rtws[p + j + s] = re - ro;
26108 itws[p + j + s] = ie - io;
26109
26110 /* jshint maxdepth : false */
26111 if (j !== l) {
26112 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26113
26114 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26115 rtwdf_ = rx;
26116 }
26117 }
26118 }
26119 }
26120 };
26121
26122 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26123 var N = Math.max(m, n) | 1;
26124 var odd = N & 1;
26125 var i = 0;
26126 for (N = N / 2 | 0; N; N = N >>> 1) {
26127 i++;
26128 }
26129
26130 return 1 << i + 1 + odd;
26131 };
26132
26133 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26134 if (N <= 1) return;
26135
26136 for (var i = 0; i < N / 2; i++) {
26137 var t = rws[i];
26138
26139 rws[i] = rws[N - i - 1];
26140 rws[N - i - 1] = t;
26141
26142 t = iws[i];
26143
26144 iws[i] = -iws[N - i - 1];
26145 iws[N - i - 1] = -t;
26146 }
26147 };
26148
26149 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26150 var carry = 0;
26151 for (var i = 0; i < N / 2; i++) {
26152 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26153 Math.round(ws[2 * i] / N) +
26154 carry;
26155
26156 ws[i] = w & 0x3ffffff;
26157
26158 if (w < 0x4000000) {
26159 carry = 0;
26160 } else {
26161 carry = w / 0x4000000 | 0;
26162 }
26163 }
26164
26165 return ws;
26166 };
26167
26168 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26169 var carry = 0;
26170 for (var i = 0; i < len; i++) {
26171 carry = carry + (ws[i] | 0);
26172
26173 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26174 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26175 }
26176
26177 // Pad with zeroes
26178 for (i = 2 * len; i < N; ++i) {
26179 rws[i] = 0;
26180 }
26181
26182 assert(carry === 0);
26183 assert((carry & ~0x1fff) === 0);
26184 };
26185
26186 FFTM.prototype.stub = function stub (N) {
26187 var ph = new Array(N);
26188 for (var i = 0; i < N; i++) {
26189 ph[i] = 0;
26190 }
26191
26192 return ph;
26193 };
26194
26195 FFTM.prototype.mulp = function mulp (x, y, out) {
26196 var N = 2 * this.guessLen13b(x.length, y.length);
26197
26198 var rbt = this.makeRBT(N);
26199
26200 var _ = this.stub(N);
26201
26202 var rws = new Array(N);
26203 var rwst = new Array(N);
26204 var iwst = new Array(N);
26205
26206 var nrws = new Array(N);
26207 var nrwst = new Array(N);
26208 var niwst = new Array(N);
26209
26210 var rmws = out.words;
26211 rmws.length = N;
26212
26213 this.convert13b(x.words, x.length, rws, N);
26214 this.convert13b(y.words, y.length, nrws, N);
26215
26216 this.transform(rws, _, rwst, iwst, N, rbt);
26217 this.transform(nrws, _, nrwst, niwst, N, rbt);
26218
26219 for (var i = 0; i < N; i++) {
26220 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
26221 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
26222 rwst[i] = rx;
26223 }
26224
26225 this.conjugate(rwst, iwst, N);
26226 this.transform(rwst, iwst, rmws, _, N, rbt);
26227 this.conjugate(rmws, _, N);
26228 this.normalize13b(rmws, N);
26229
26230 out.negative = x.negative ^ y.negative;
26231 out.length = x.length + y.length;
26232 return out.strip();
26233 };
26234
26235 // Multiply `this` by `num`
26236 BN.prototype.mul = function mul (num) {
26237 var out = new BN(null);
26238 out.words = new Array(this.length + num.length);
26239 return this.mulTo(num, out);
26240 };
26241
26242 // Multiply employing FFT
26243 BN.prototype.mulf = function mulf (num) {
26244 var out = new BN(null);
26245 out.words = new Array(this.length + num.length);
26246 return jumboMulTo(this, num, out);
26247 };
26248
26249 // In-place Multiplication
26250 BN.prototype.imul = function imul (num) {
26251 return this.clone().mulTo(num, this);
26252 };
26253
26254 BN.prototype.imuln = function imuln (num) {
26255 assert(typeof num === 'number');
26256 assert(num < 0x4000000);
26257
26258 // Carry
26259 var carry = 0;
26260 for (var i = 0; i < this.length; i++) {
26261 var w = (this.words[i] | 0) * num;
26262 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
26263 carry >>= 26;
26264 carry += (w / 0x4000000) | 0;
26265 // NOTE: lo is 27bit maximum
26266 carry += lo >>> 26;
26267 this.words[i] = lo & 0x3ffffff;
26268 }
26269
26270 if (carry !== 0) {
26271 this.words[i] = carry;
26272 this.length++;
26273 }
26274
26275 return this;
26276 };
26277
26278 BN.prototype.muln = function muln (num) {
26279 return this.clone().imuln(num);
26280 };
26281
26282 // `this` * `this`
26283 BN.prototype.sqr = function sqr () {
26284 return this.mul(this);
26285 };
26286
26287 // `this` * `this` in-place
26288 BN.prototype.isqr = function isqr () {
26289 return this.imul(this.clone());
26290 };
26291
26292 // Math.pow(`this`, `num`)
26293 BN.prototype.pow = function pow (num) {
26294 var w = toBitArray(num);
26295 if (w.length === 0) return new BN(1);
26296
26297 // Skip leading zeroes
26298 var res = this;
26299 for (var i = 0; i < w.length; i++, res = res.sqr()) {
26300 if (w[i] !== 0) break;
26301 }
26302
26303 if (++i < w.length) {
26304 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
26305 if (w[i] === 0) continue;
26306
26307 res = res.mul(q);
26308 }
26309 }
26310
26311 return res;
26312 };
26313
26314 // Shift-left in-place
26315 BN.prototype.iushln = function iushln (bits) {
26316 assert(typeof bits === 'number' && bits >= 0);
26317 var r = bits % 26;
26318 var s = (bits - r) / 26;
26319 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
26320 var i;
26321
26322 if (r !== 0) {
26323 var carry = 0;
26324
26325 for (i = 0; i < this.length; i++) {
26326 var newCarry = this.words[i] & carryMask;
26327 var c = ((this.words[i] | 0) - newCarry) << r;
26328 this.words[i] = c | carry;
26329 carry = newCarry >>> (26 - r);
26330 }
26331
26332 if (carry) {
26333 this.words[i] = carry;
26334 this.length++;
26335 }
26336 }
26337
26338 if (s !== 0) {
26339 for (i = this.length - 1; i >= 0; i--) {
26340 this.words[i + s] = this.words[i];
26341 }
26342
26343 for (i = 0; i < s; i++) {
26344 this.words[i] = 0;
26345 }
26346
26347 this.length += s;
26348 }
26349
26350 return this.strip();
26351 };
26352
26353 BN.prototype.ishln = function ishln (bits) {
26354 // TODO(indutny): implement me
26355 assert(this.negative === 0);
26356 return this.iushln(bits);
26357 };
26358
26359 // Shift-right in-place
26360 // NOTE: `hint` is a lowest bit before trailing zeroes
26361 // NOTE: if `extended` is present - it will be filled with destroyed bits
26362 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
26363 assert(typeof bits === 'number' && bits >= 0);
26364 var h;
26365 if (hint) {
26366 h = (hint - (hint % 26)) / 26;
26367 } else {
26368 h = 0;
26369 }
26370
26371 var r = bits % 26;
26372 var s = Math.min((bits - r) / 26, this.length);
26373 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26374 var maskedWords = extended;
26375
26376 h -= s;
26377 h = Math.max(0, h);
26378
26379 // Extended mode, copy masked part
26380 if (maskedWords) {
26381 for (var i = 0; i < s; i++) {
26382 maskedWords.words[i] = this.words[i];
26383 }
26384 maskedWords.length = s;
26385 }
26386
26387 if (s === 0) {
26388 // No-op, we should not move anything at all
26389 } else if (this.length > s) {
26390 this.length -= s;
26391 for (i = 0; i < this.length; i++) {
26392 this.words[i] = this.words[i + s];
26393 }
26394 } else {
26395 this.words[0] = 0;
26396 this.length = 1;
26397 }
26398
26399 var carry = 0;
26400 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
26401 var word = this.words[i] | 0;
26402 this.words[i] = (carry << (26 - r)) | (word >>> r);
26403 carry = word & mask;
26404 }
26405
26406 // Push carried bits as a mask
26407 if (maskedWords && carry !== 0) {
26408 maskedWords.words[maskedWords.length++] = carry;
26409 }
26410
26411 if (this.length === 0) {
26412 this.words[0] = 0;
26413 this.length = 1;
26414 }
26415
26416 return this.strip();
26417 };
26418
26419 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
26420 // TODO(indutny): implement me
26421 assert(this.negative === 0);
26422 return this.iushrn(bits, hint, extended);
26423 };
26424
26425 // Shift-left
26426 BN.prototype.shln = function shln (bits) {
26427 return this.clone().ishln(bits);
26428 };
26429
26430 BN.prototype.ushln = function ushln (bits) {
26431 return this.clone().iushln(bits);
26432 };
26433
26434 // Shift-right
26435 BN.prototype.shrn = function shrn (bits) {
26436 return this.clone().ishrn(bits);
26437 };
26438
26439 BN.prototype.ushrn = function ushrn (bits) {
26440 return this.clone().iushrn(bits);
26441 };
26442
26443 // Test if n bit is set
26444 BN.prototype.testn = function testn (bit) {
26445 assert(typeof bit === 'number' && bit >= 0);
26446 var r = bit % 26;
26447 var s = (bit - r) / 26;
26448 var q = 1 << r;
26449
26450 // Fast case: bit is much higher than all existing words
26451 if (this.length <= s) return false;
26452
26453 // Check bit and return
26454 var w = this.words[s];
26455
26456 return !!(w & q);
26457 };
26458
26459 // Return only lowers bits of number (in-place)
26460 BN.prototype.imaskn = function imaskn (bits) {
26461 assert(typeof bits === 'number' && bits >= 0);
26462 var r = bits % 26;
26463 var s = (bits - r) / 26;
26464
26465 assert(this.negative === 0, 'imaskn works only with positive numbers');
26466
26467 if (this.length <= s) {
26468 return this;
26469 }
26470
26471 if (r !== 0) {
26472 s++;
26473 }
26474 this.length = Math.min(s, this.length);
26475
26476 if (r !== 0) {
26477 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26478 this.words[this.length - 1] &= mask;
26479 }
26480
26481 return this.strip();
26482 };
26483
26484 // Return only lowers bits of number
26485 BN.prototype.maskn = function maskn (bits) {
26486 return this.clone().imaskn(bits);
26487 };
26488
26489 // Add plain number `num` to `this`
26490 BN.prototype.iaddn = function iaddn (num) {
26491 assert(typeof num === 'number');
26492 assert(num < 0x4000000);
26493 if (num < 0) return this.isubn(-num);
26494
26495 // Possible sign change
26496 if (this.negative !== 0) {
26497 if (this.length === 1 && (this.words[0] | 0) < num) {
26498 this.words[0] = num - (this.words[0] | 0);
26499 this.negative = 0;
26500 return this;
26501 }
26502
26503 this.negative = 0;
26504 this.isubn(num);
26505 this.negative = 1;
26506 return this;
26507 }
26508
26509 // Add without checks
26510 return this._iaddn(num);
26511 };
26512
26513 BN.prototype._iaddn = function _iaddn (num) {
26514 this.words[0] += num;
26515
26516 // Carry
26517 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
26518 this.words[i] -= 0x4000000;
26519 if (i === this.length - 1) {
26520 this.words[i + 1] = 1;
26521 } else {
26522 this.words[i + 1]++;
26523 }
26524 }
26525 this.length = Math.max(this.length, i + 1);
26526
26527 return this;
26528 };
26529
26530 // Subtract plain number `num` from `this`
26531 BN.prototype.isubn = function isubn (num) {
26532 assert(typeof num === 'number');
26533 assert(num < 0x4000000);
26534 if (num < 0) return this.iaddn(-num);
26535
26536 if (this.negative !== 0) {
26537 this.negative = 0;
26538 this.iaddn(num);
26539 this.negative = 1;
26540 return this;
26541 }
26542
26543 this.words[0] -= num;
26544
26545 if (this.length === 1 && this.words[0] < 0) {
26546 this.words[0] = -this.words[0];
26547 this.negative = 1;
26548 } else {
26549 // Carry
26550 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
26551 this.words[i] += 0x4000000;
26552 this.words[i + 1] -= 1;
26553 }
26554 }
26555
26556 return this.strip();
26557 };
26558
26559 BN.prototype.addn = function addn (num) {
26560 return this.clone().iaddn(num);
26561 };
26562
26563 BN.prototype.subn = function subn (num) {
26564 return this.clone().isubn(num);
26565 };
26566
26567 BN.prototype.iabs = function iabs () {
26568 this.negative = 0;
26569
26570 return this;
26571 };
26572
26573 BN.prototype.abs = function abs () {
26574 return this.clone().iabs();
26575 };
26576
26577 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
26578 var len = num.length + shift;
26579 var i;
26580
26581 this._expand(len);
26582
26583 var w;
26584 var carry = 0;
26585 for (i = 0; i < num.length; i++) {
26586 w = (this.words[i + shift] | 0) + carry;
26587 var right = (num.words[i] | 0) * mul;
26588 w -= right & 0x3ffffff;
26589 carry = (w >> 26) - ((right / 0x4000000) | 0);
26590 this.words[i + shift] = w & 0x3ffffff;
26591 }
26592 for (; i < this.length - shift; i++) {
26593 w = (this.words[i + shift] | 0) + carry;
26594 carry = w >> 26;
26595 this.words[i + shift] = w & 0x3ffffff;
26596 }
26597
26598 if (carry === 0) return this.strip();
26599
26600 // Subtraction overflow
26601 assert(carry === -1);
26602 carry = 0;
26603 for (i = 0; i < this.length; i++) {
26604 w = -(this.words[i] | 0) + carry;
26605 carry = w >> 26;
26606 this.words[i] = w & 0x3ffffff;
26607 }
26608 this.negative = 1;
26609
26610 return this.strip();
26611 };
26612
26613 BN.prototype._wordDiv = function _wordDiv (num, mode) {
26614 var shift = this.length - num.length;
26615
26616 var a = this.clone();
26617 var b = num;
26618
26619 // Normalize
26620 var bhi = b.words[b.length - 1] | 0;
26621 var bhiBits = this._countBits(bhi);
26622 shift = 26 - bhiBits;
26623 if (shift !== 0) {
26624 b = b.ushln(shift);
26625 a.iushln(shift);
26626 bhi = b.words[b.length - 1] | 0;
26627 }
26628
26629 // Initialize quotient
26630 var m = a.length - b.length;
26631 var q;
26632
26633 if (mode !== 'mod') {
26634 q = new BN(null);
26635 q.length = m + 1;
26636 q.words = new Array(q.length);
26637 for (var i = 0; i < q.length; i++) {
26638 q.words[i] = 0;
26639 }
26640 }
26641
26642 var diff = a.clone()._ishlnsubmul(b, 1, m);
26643 if (diff.negative === 0) {
26644 a = diff;
26645 if (q) {
26646 q.words[m] = 1;
26647 }
26648 }
26649
26650 for (var j = m - 1; j >= 0; j--) {
26651 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
26652 (a.words[b.length + j - 1] | 0);
26653
26654 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
26655 // (0x7ffffff)
26656 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
26657
26658 a._ishlnsubmul(b, qj, j);
26659 while (a.negative !== 0) {
26660 qj--;
26661 a.negative = 0;
26662 a._ishlnsubmul(b, 1, j);
26663 if (!a.isZero()) {
26664 a.negative ^= 1;
26665 }
26666 }
26667 if (q) {
26668 q.words[j] = qj;
26669 }
26670 }
26671 if (q) {
26672 q.strip();
26673 }
26674 a.strip();
26675
26676 // Denormalize
26677 if (mode !== 'div' && shift !== 0) {
26678 a.iushrn(shift);
26679 }
26680
26681 return {
26682 div: q || null,
26683 mod: a
26684 };
26685 };
26686
26687 // NOTE: 1) `mode` can be set to `mod` to request mod only,
26688 // to `div` to request div only, or be absent to
26689 // request both div & mod
26690 // 2) `positive` is true if unsigned mod is requested
26691 BN.prototype.divmod = function divmod (num, mode, positive) {
26692 assert(!num.isZero());
26693
26694 if (this.isZero()) {
26695 return {
26696 div: new BN(0),
26697 mod: new BN(0)
26698 };
26699 }
26700
26701 var div, mod, res;
26702 if (this.negative !== 0 && num.negative === 0) {
26703 res = this.neg().divmod(num, mode);
26704
26705 if (mode !== 'mod') {
26706 div = res.div.neg();
26707 }
26708
26709 if (mode !== 'div') {
26710 mod = res.mod.neg();
26711 if (positive && mod.negative !== 0) {
26712 mod.iadd(num);
26713 }
26714 }
26715
26716 return {
26717 div: div,
26718 mod: mod
26719 };
26720 }
26721
26722 if (this.negative === 0 && num.negative !== 0) {
26723 res = this.divmod(num.neg(), mode);
26724
26725 if (mode !== 'mod') {
26726 div = res.div.neg();
26727 }
26728
26729 return {
26730 div: div,
26731 mod: res.mod
26732 };
26733 }
26734
26735 if ((this.negative & num.negative) !== 0) {
26736 res = this.neg().divmod(num.neg(), mode);
26737
26738 if (mode !== 'div') {
26739 mod = res.mod.neg();
26740 if (positive && mod.negative !== 0) {
26741 mod.isub(num);
26742 }
26743 }
26744
26745 return {
26746 div: res.div,
26747 mod: mod
26748 };
26749 }
26750
26751 // Both numbers are positive at this point
26752
26753 // Strip both numbers to approximate shift value
26754 if (num.length > this.length || this.cmp(num) < 0) {
26755 return {
26756 div: new BN(0),
26757 mod: this
26758 };
26759 }
26760
26761 // Very short reduction
26762 if (num.length === 1) {
26763 if (mode === 'div') {
26764 return {
26765 div: this.divn(num.words[0]),
26766 mod: null
26767 };
26768 }
26769
26770 if (mode === 'mod') {
26771 return {
26772 div: null,
26773 mod: new BN(this.modn(num.words[0]))
26774 };
26775 }
26776
26777 return {
26778 div: this.divn(num.words[0]),
26779 mod: new BN(this.modn(num.words[0]))
26780 };
26781 }
26782
26783 return this._wordDiv(num, mode);
26784 };
26785
26786 // Find `this` / `num`
26787 BN.prototype.div = function div (num) {
26788 return this.divmod(num, 'div', false).div;
26789 };
26790
26791 // Find `this` % `num`
26792 BN.prototype.mod = function mod (num) {
26793 return this.divmod(num, 'mod', false).mod;
26794 };
26795
26796 BN.prototype.umod = function umod (num) {
26797 return this.divmod(num, 'mod', true).mod;
26798 };
26799
26800 // Find Round(`this` / `num`)
26801 BN.prototype.divRound = function divRound (num) {
26802 var dm = this.divmod(num);
26803
26804 // Fast case - exact division
26805 if (dm.mod.isZero()) return dm.div;
26806
26807 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
26808
26809 var half = num.ushrn(1);
26810 var r2 = num.andln(1);
26811 var cmp = mod.cmp(half);
26812
26813 // Round down
26814 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
26815
26816 // Round up
26817 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
26818 };
26819
26820 BN.prototype.modn = function modn (num) {
26821 assert(num <= 0x3ffffff);
26822 var p = (1 << 26) % num;
26823
26824 var acc = 0;
26825 for (var i = this.length - 1; i >= 0; i--) {
26826 acc = (p * acc + (this.words[i] | 0)) % num;
26827 }
26828
26829 return acc;
26830 };
26831
26832 // In-place division by number
26833 BN.prototype.idivn = function idivn (num) {
26834 assert(num <= 0x3ffffff);
26835
26836 var carry = 0;
26837 for (var i = this.length - 1; i >= 0; i--) {
26838 var w = (this.words[i] | 0) + carry * 0x4000000;
26839 this.words[i] = (w / num) | 0;
26840 carry = w % num;
26841 }
26842
26843 return this.strip();
26844 };
26845
26846 BN.prototype.divn = function divn (num) {
26847 return this.clone().idivn(num);
26848 };
26849
26850 BN.prototype.egcd = function egcd (p) {
26851 assert(p.negative === 0);
26852 assert(!p.isZero());
26853
26854 var x = this;
26855 var y = p.clone();
26856
26857 if (x.negative !== 0) {
26858 x = x.umod(p);
26859 } else {
26860 x = x.clone();
26861 }
26862
26863 // A * x + B * y = x
26864 var A = new BN(1);
26865 var B = new BN(0);
26866
26867 // C * x + D * y = y
26868 var C = new BN(0);
26869 var D = new BN(1);
26870
26871 var g = 0;
26872
26873 while (x.isEven() && y.isEven()) {
26874 x.iushrn(1);
26875 y.iushrn(1);
26876 ++g;
26877 }
26878
26879 var yp = y.clone();
26880 var xp = x.clone();
26881
26882 while (!x.isZero()) {
26883 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
26884 if (i > 0) {
26885 x.iushrn(i);
26886 while (i-- > 0) {
26887 if (A.isOdd() || B.isOdd()) {
26888 A.iadd(yp);
26889 B.isub(xp);
26890 }
26891
26892 A.iushrn(1);
26893 B.iushrn(1);
26894 }
26895 }
26896
26897 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
26898 if (j > 0) {
26899 y.iushrn(j);
26900 while (j-- > 0) {
26901 if (C.isOdd() || D.isOdd()) {
26902 C.iadd(yp);
26903 D.isub(xp);
26904 }
26905
26906 C.iushrn(1);
26907 D.iushrn(1);
26908 }
26909 }
26910
26911 if (x.cmp(y) >= 0) {
26912 x.isub(y);
26913 A.isub(C);
26914 B.isub(D);
26915 } else {
26916 y.isub(x);
26917 C.isub(A);
26918 D.isub(B);
26919 }
26920 }
26921
26922 return {
26923 a: C,
26924 b: D,
26925 gcd: y.iushln(g)
26926 };
26927 };
26928
26929 // This is reduced incarnation of the binary EEA
26930 // above, designated to invert members of the
26931 // _prime_ fields F(p) at a maximal speed
26932 BN.prototype._invmp = function _invmp (p) {
26933 assert(p.negative === 0);
26934 assert(!p.isZero());
26935
26936 var a = this;
26937 var b = p.clone();
26938
26939 if (a.negative !== 0) {
26940 a = a.umod(p);
26941 } else {
26942 a = a.clone();
26943 }
26944
26945 var x1 = new BN(1);
26946 var x2 = new BN(0);
26947
26948 var delta = b.clone();
26949
26950 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
26951 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
26952 if (i > 0) {
26953 a.iushrn(i);
26954 while (i-- > 0) {
26955 if (x1.isOdd()) {
26956 x1.iadd(delta);
26957 }
26958
26959 x1.iushrn(1);
26960 }
26961 }
26962
26963 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
26964 if (j > 0) {
26965 b.iushrn(j);
26966 while (j-- > 0) {
26967 if (x2.isOdd()) {
26968 x2.iadd(delta);
26969 }
26970
26971 x2.iushrn(1);
26972 }
26973 }
26974
26975 if (a.cmp(b) >= 0) {
26976 a.isub(b);
26977 x1.isub(x2);
26978 } else {
26979 b.isub(a);
26980 x2.isub(x1);
26981 }
26982 }
26983
26984 var res;
26985 if (a.cmpn(1) === 0) {
26986 res = x1;
26987 } else {
26988 res = x2;
26989 }
26990
26991 if (res.cmpn(0) < 0) {
26992 res.iadd(p);
26993 }
26994
26995 return res;
26996 };
26997
26998 BN.prototype.gcd = function gcd (num) {
26999 if (this.isZero()) return num.abs();
27000 if (num.isZero()) return this.abs();
27001
27002 var a = this.clone();
27003 var b = num.clone();
27004 a.negative = 0;
27005 b.negative = 0;
27006
27007 // Remove common factor of two
27008 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27009 a.iushrn(1);
27010 b.iushrn(1);
27011 }
27012
27013 do {
27014 while (a.isEven()) {
27015 a.iushrn(1);
27016 }
27017 while (b.isEven()) {
27018 b.iushrn(1);
27019 }
27020
27021 var r = a.cmp(b);
27022 if (r < 0) {
27023 // Swap `a` and `b` to make `a` always bigger than `b`
27024 var t = a;
27025 a = b;
27026 b = t;
27027 } else if (r === 0 || b.cmpn(1) === 0) {
27028 break;
27029 }
27030
27031 a.isub(b);
27032 } while (true);
27033
27034 return b.iushln(shift);
27035 };
27036
27037 // Invert number in the field F(num)
27038 BN.prototype.invm = function invm (num) {
27039 return this.egcd(num).a.umod(num);
27040 };
27041
27042 BN.prototype.isEven = function isEven () {
27043 return (this.words[0] & 1) === 0;
27044 };
27045
27046 BN.prototype.isOdd = function isOdd () {
27047 return (this.words[0] & 1) === 1;
27048 };
27049
27050 // And first word and num
27051 BN.prototype.andln = function andln (num) {
27052 return this.words[0] & num;
27053 };
27054
27055 // Increment at the bit position in-line
27056 BN.prototype.bincn = function bincn (bit) {
27057 assert(typeof bit === 'number');
27058 var r = bit % 26;
27059 var s = (bit - r) / 26;
27060 var q = 1 << r;
27061
27062 // Fast case: bit is much higher than all existing words
27063 if (this.length <= s) {
27064 this._expand(s + 1);
27065 this.words[s] |= q;
27066 return this;
27067 }
27068
27069 // Add bit and propagate, if needed
27070 var carry = q;
27071 for (var i = s; carry !== 0 && i < this.length; i++) {
27072 var w = this.words[i] | 0;
27073 w += carry;
27074 carry = w >>> 26;
27075 w &= 0x3ffffff;
27076 this.words[i] = w;
27077 }
27078 if (carry !== 0) {
27079 this.words[i] = carry;
27080 this.length++;
27081 }
27082 return this;
27083 };
27084
27085 BN.prototype.isZero = function isZero () {
27086 return this.length === 1 && this.words[0] === 0;
27087 };
27088
27089 BN.prototype.cmpn = function cmpn (num) {
27090 var negative = num < 0;
27091
27092 if (this.negative !== 0 && !negative) return -1;
27093 if (this.negative === 0 && negative) return 1;
27094
27095 this.strip();
27096
27097 var res;
27098 if (this.length > 1) {
27099 res = 1;
27100 } else {
27101 if (negative) {
27102 num = -num;
27103 }
27104
27105 assert(num <= 0x3ffffff, 'Number is too big');
27106
27107 var w = this.words[0] | 0;
27108 res = w === num ? 0 : w < num ? -1 : 1;
27109 }
27110 if (this.negative !== 0) return -res | 0;
27111 return res;
27112 };
27113
27114 // Compare two numbers and return:
27115 // 1 - if `this` > `num`
27116 // 0 - if `this` == `num`
27117 // -1 - if `this` < `num`
27118 BN.prototype.cmp = function cmp (num) {
27119 if (this.negative !== 0 && num.negative === 0) return -1;
27120 if (this.negative === 0 && num.negative !== 0) return 1;
27121
27122 var res = this.ucmp(num);
27123 if (this.negative !== 0) return -res | 0;
27124 return res;
27125 };
27126
27127 // Unsigned comparison
27128 BN.prototype.ucmp = function ucmp (num) {
27129 // At this point both numbers have the same sign
27130 if (this.length > num.length) return 1;
27131 if (this.length < num.length) return -1;
27132
27133 var res = 0;
27134 for (var i = this.length - 1; i >= 0; i--) {
27135 var a = this.words[i] | 0;
27136 var b = num.words[i] | 0;
27137
27138 if (a === b) continue;
27139 if (a < b) {
27140 res = -1;
27141 } else if (a > b) {
27142 res = 1;
27143 }
27144 break;
27145 }
27146 return res;
27147 };
27148
27149 BN.prototype.gtn = function gtn (num) {
27150 return this.cmpn(num) === 1;
27151 };
27152
27153 BN.prototype.gt = function gt (num) {
27154 return this.cmp(num) === 1;
27155 };
27156
27157 BN.prototype.gten = function gten (num) {
27158 return this.cmpn(num) >= 0;
27159 };
27160
27161 BN.prototype.gte = function gte (num) {
27162 return this.cmp(num) >= 0;
27163 };
27164
27165 BN.prototype.ltn = function ltn (num) {
27166 return this.cmpn(num) === -1;
27167 };
27168
27169 BN.prototype.lt = function lt (num) {
27170 return this.cmp(num) === -1;
27171 };
27172
27173 BN.prototype.lten = function lten (num) {
27174 return this.cmpn(num) <= 0;
27175 };
27176
27177 BN.prototype.lte = function lte (num) {
27178 return this.cmp(num) <= 0;
27179 };
27180
27181 BN.prototype.eqn = function eqn (num) {
27182 return this.cmpn(num) === 0;
27183 };
27184
27185 BN.prototype.eq = function eq (num) {
27186 return this.cmp(num) === 0;
27187 };
27188
27189 //
27190 // A reduce context, could be using montgomery or something better, depending
27191 // on the `m` itself.
27192 //
27193 BN.red = function red (num) {
27194 return new Red(num);
27195 };
27196
27197 BN.prototype.toRed = function toRed (ctx) {
27198 assert(!this.red, 'Already a number in reduction context');
27199 assert(this.negative === 0, 'red works only with positives');
27200 return ctx.convertTo(this)._forceRed(ctx);
27201 };
27202
27203 BN.prototype.fromRed = function fromRed () {
27204 assert(this.red, 'fromRed works only with numbers in reduction context');
27205 return this.red.convertFrom(this);
27206 };
27207
27208 BN.prototype._forceRed = function _forceRed (ctx) {
27209 this.red = ctx;
27210 return this;
27211 };
27212
27213 BN.prototype.forceRed = function forceRed (ctx) {
27214 assert(!this.red, 'Already a number in reduction context');
27215 return this._forceRed(ctx);
27216 };
27217
27218 BN.prototype.redAdd = function redAdd (num) {
27219 assert(this.red, 'redAdd works only with red numbers');
27220 return this.red.add(this, num);
27221 };
27222
27223 BN.prototype.redIAdd = function redIAdd (num) {
27224 assert(this.red, 'redIAdd works only with red numbers');
27225 return this.red.iadd(this, num);
27226 };
27227
27228 BN.prototype.redSub = function redSub (num) {
27229 assert(this.red, 'redSub works only with red numbers');
27230 return this.red.sub(this, num);
27231 };
27232
27233 BN.prototype.redISub = function redISub (num) {
27234 assert(this.red, 'redISub works only with red numbers');
27235 return this.red.isub(this, num);
27236 };
27237
27238 BN.prototype.redShl = function redShl (num) {
27239 assert(this.red, 'redShl works only with red numbers');
27240 return this.red.shl(this, num);
27241 };
27242
27243 BN.prototype.redMul = function redMul (num) {
27244 assert(this.red, 'redMul works only with red numbers');
27245 this.red._verify2(this, num);
27246 return this.red.mul(this, num);
27247 };
27248
27249 BN.prototype.redIMul = function redIMul (num) {
27250 assert(this.red, 'redMul works only with red numbers');
27251 this.red._verify2(this, num);
27252 return this.red.imul(this, num);
27253 };
27254
27255 BN.prototype.redSqr = function redSqr () {
27256 assert(this.red, 'redSqr works only with red numbers');
27257 this.red._verify1(this);
27258 return this.red.sqr(this);
27259 };
27260
27261 BN.prototype.redISqr = function redISqr () {
27262 assert(this.red, 'redISqr works only with red numbers');
27263 this.red._verify1(this);
27264 return this.red.isqr(this);
27265 };
27266
27267 // Square root over p
27268 BN.prototype.redSqrt = function redSqrt () {
27269 assert(this.red, 'redSqrt works only with red numbers');
27270 this.red._verify1(this);
27271 return this.red.sqrt(this);
27272 };
27273
27274 BN.prototype.redInvm = function redInvm () {
27275 assert(this.red, 'redInvm works only with red numbers');
27276 this.red._verify1(this);
27277 return this.red.invm(this);
27278 };
27279
27280 // Return negative clone of `this` % `red modulo`
27281 BN.prototype.redNeg = function redNeg () {
27282 assert(this.red, 'redNeg works only with red numbers');
27283 this.red._verify1(this);
27284 return this.red.neg(this);
27285 };
27286
27287 BN.prototype.redPow = function redPow (num) {
27288 assert(this.red && !num.red, 'redPow(normalNum)');
27289 this.red._verify1(this);
27290 return this.red.pow(this, num);
27291 };
27292
27293 // Prime numbers with efficient reduction
27294 var primes = {
27295 k256: null,
27296 p224: null,
27297 p192: null,
27298 p25519: null
27299 };
27300
27301 // Pseudo-Mersenne prime
27302 function MPrime (name, p) {
27303 // P = 2 ^ N - K
27304 this.name = name;
27305 this.p = new BN(p, 16);
27306 this.n = this.p.bitLength();
27307 this.k = new BN(1).iushln(this.n).isub(this.p);
27308
27309 this.tmp = this._tmp();
27310 }
27311
27312 MPrime.prototype._tmp = function _tmp () {
27313 var tmp = new BN(null);
27314 tmp.words = new Array(Math.ceil(this.n / 13));
27315 return tmp;
27316 };
27317
27318 MPrime.prototype.ireduce = function ireduce (num) {
27319 // Assumes that `num` is less than `P^2`
27320 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
27321 var r = num;
27322 var rlen;
27323
27324 do {
27325 this.split(r, this.tmp);
27326 r = this.imulK(r);
27327 r = r.iadd(this.tmp);
27328 rlen = r.bitLength();
27329 } while (rlen > this.n);
27330
27331 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
27332 if (cmp === 0) {
27333 r.words[0] = 0;
27334 r.length = 1;
27335 } else if (cmp > 0) {
27336 r.isub(this.p);
27337 } else {
27338 r.strip();
27339 }
27340
27341 return r;
27342 };
27343
27344 MPrime.prototype.split = function split (input, out) {
27345 input.iushrn(this.n, 0, out);
27346 };
27347
27348 MPrime.prototype.imulK = function imulK (num) {
27349 return num.imul(this.k);
27350 };
27351
27352 function K256 () {
27353 MPrime.call(
27354 this,
27355 'k256',
27356 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
27357 }
27358 inherits(K256, MPrime);
27359
27360 K256.prototype.split = function split (input, output) {
27361 // 256 = 9 * 26 + 22
27362 var mask = 0x3fffff;
27363
27364 var outLen = Math.min(input.length, 9);
27365 for (var i = 0; i < outLen; i++) {
27366 output.words[i] = input.words[i];
27367 }
27368 output.length = outLen;
27369
27370 if (input.length <= 9) {
27371 input.words[0] = 0;
27372 input.length = 1;
27373 return;
27374 }
27375
27376 // Shift by 9 limbs
27377 var prev = input.words[9];
27378 output.words[output.length++] = prev & mask;
27379
27380 for (i = 10; i < input.length; i++) {
27381 var next = input.words[i] | 0;
27382 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
27383 prev = next;
27384 }
27385 prev >>>= 22;
27386 input.words[i - 10] = prev;
27387 if (prev === 0 && input.length > 10) {
27388 input.length -= 10;
27389 } else {
27390 input.length -= 9;
27391 }
27392 };
27393
27394 K256.prototype.imulK = function imulK (num) {
27395 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
27396 num.words[num.length] = 0;
27397 num.words[num.length + 1] = 0;
27398 num.length += 2;
27399
27400 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
27401 var lo = 0;
27402 for (var i = 0; i < num.length; i++) {
27403 var w = num.words[i] | 0;
27404 lo += w * 0x3d1;
27405 num.words[i] = lo & 0x3ffffff;
27406 lo = w * 0x40 + ((lo / 0x4000000) | 0);
27407 }
27408
27409 // Fast length reduction
27410 if (num.words[num.length - 1] === 0) {
27411 num.length--;
27412 if (num.words[num.length - 1] === 0) {
27413 num.length--;
27414 }
27415 }
27416 return num;
27417 };
27418
27419 function P224 () {
27420 MPrime.call(
27421 this,
27422 'p224',
27423 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
27424 }
27425 inherits(P224, MPrime);
27426
27427 function P192 () {
27428 MPrime.call(
27429 this,
27430 'p192',
27431 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
27432 }
27433 inherits(P192, MPrime);
27434
27435 function P25519 () {
27436 // 2 ^ 255 - 19
27437 MPrime.call(
27438 this,
27439 '25519',
27440 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
27441 }
27442 inherits(P25519, MPrime);
27443
27444 P25519.prototype.imulK = function imulK (num) {
27445 // K = 0x13
27446 var carry = 0;
27447 for (var i = 0; i < num.length; i++) {
27448 var hi = (num.words[i] | 0) * 0x13 + carry;
27449 var lo = hi & 0x3ffffff;
27450 hi >>>= 26;
27451
27452 num.words[i] = lo;
27453 carry = hi;
27454 }
27455 if (carry !== 0) {
27456 num.words[num.length++] = carry;
27457 }
27458 return num;
27459 };
27460
27461 // Exported mostly for testing purposes, use plain name instead
27462 BN._prime = function prime (name) {
27463 // Cached version of prime
27464 if (primes[name]) return primes[name];
27465
27466 var prime;
27467 if (name === 'k256') {
27468 prime = new K256();
27469 } else if (name === 'p224') {
27470 prime = new P224();
27471 } else if (name === 'p192') {
27472 prime = new P192();
27473 } else if (name === 'p25519') {
27474 prime = new P25519();
27475 } else {
27476 throw new Error('Unknown prime ' + name);
27477 }
27478 primes[name] = prime;
27479
27480 return prime;
27481 };
27482
27483 //
27484 // Base reduction engine
27485 //
27486 function Red (m) {
27487 if (typeof m === 'string') {
27488 var prime = BN._prime(m);
27489 this.m = prime.p;
27490 this.prime = prime;
27491 } else {
27492 assert(m.gtn(1), 'modulus must be greater than 1');
27493 this.m = m;
27494 this.prime = null;
27495 }
27496 }
27497
27498 Red.prototype._verify1 = function _verify1 (a) {
27499 assert(a.negative === 0, 'red works only with positives');
27500 assert(a.red, 'red works only with red numbers');
27501 };
27502
27503 Red.prototype._verify2 = function _verify2 (a, b) {
27504 assert((a.negative | b.negative) === 0, 'red works only with positives');
27505 assert(a.red && a.red === b.red,
27506 'red works only with red numbers');
27507 };
27508
27509 Red.prototype.imod = function imod (a) {
27510 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
27511 return a.umod(this.m)._forceRed(this);
27512 };
27513
27514 Red.prototype.neg = function neg (a) {
27515 if (a.isZero()) {
27516 return a.clone();
27517 }
27518
27519 return this.m.sub(a)._forceRed(this);
27520 };
27521
27522 Red.prototype.add = function add (a, b) {
27523 this._verify2(a, b);
27524
27525 var res = a.add(b);
27526 if (res.cmp(this.m) >= 0) {
27527 res.isub(this.m);
27528 }
27529 return res._forceRed(this);
27530 };
27531
27532 Red.prototype.iadd = function iadd (a, b) {
27533 this._verify2(a, b);
27534
27535 var res = a.iadd(b);
27536 if (res.cmp(this.m) >= 0) {
27537 res.isub(this.m);
27538 }
27539 return res;
27540 };
27541
27542 Red.prototype.sub = function sub (a, b) {
27543 this._verify2(a, b);
27544
27545 var res = a.sub(b);
27546 if (res.cmpn(0) < 0) {
27547 res.iadd(this.m);
27548 }
27549 return res._forceRed(this);
27550 };
27551
27552 Red.prototype.isub = function isub (a, b) {
27553 this._verify2(a, b);
27554
27555 var res = a.isub(b);
27556 if (res.cmpn(0) < 0) {
27557 res.iadd(this.m);
27558 }
27559 return res;
27560 };
27561
27562 Red.prototype.shl = function shl (a, num) {
27563 this._verify1(a);
27564 return this.imod(a.ushln(num));
27565 };
27566
27567 Red.prototype.imul = function imul (a, b) {
27568 this._verify2(a, b);
27569 return this.imod(a.imul(b));
27570 };
27571
27572 Red.prototype.mul = function mul (a, b) {
27573 this._verify2(a, b);
27574 return this.imod(a.mul(b));
27575 };
27576
27577 Red.prototype.isqr = function isqr (a) {
27578 return this.imul(a, a.clone());
27579 };
27580
27581 Red.prototype.sqr = function sqr (a) {
27582 return this.mul(a, a);
27583 };
27584
27585 Red.prototype.sqrt = function sqrt (a) {
27586 if (a.isZero()) return a.clone();
27587
27588 var mod3 = this.m.andln(3);
27589 assert(mod3 % 2 === 1);
27590
27591 // Fast case
27592 if (mod3 === 3) {
27593 var pow = this.m.add(new BN(1)).iushrn(2);
27594 return this.pow(a, pow);
27595 }
27596
27597 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
27598 //
27599 // Find Q and S, that Q * 2 ^ S = (P - 1)
27600 var q = this.m.subn(1);
27601 var s = 0;
27602 while (!q.isZero() && q.andln(1) === 0) {
27603 s++;
27604 q.iushrn(1);
27605 }
27606 assert(!q.isZero());
27607
27608 var one = new BN(1).toRed(this);
27609 var nOne = one.redNeg();
27610
27611 // Find quadratic non-residue
27612 // NOTE: Max is such because of generalized Riemann hypothesis.
27613 var lpow = this.m.subn(1).iushrn(1);
27614 var z = this.m.bitLength();
27615 z = new BN(2 * z * z).toRed(this);
27616
27617 while (this.pow(z, lpow).cmp(nOne) !== 0) {
27618 z.redIAdd(nOne);
27619 }
27620
27621 var c = this.pow(z, q);
27622 var r = this.pow(a, q.addn(1).iushrn(1));
27623 var t = this.pow(a, q);
27624 var m = s;
27625 while (t.cmp(one) !== 0) {
27626 var tmp = t;
27627 for (var i = 0; tmp.cmp(one) !== 0; i++) {
27628 tmp = tmp.redSqr();
27629 }
27630 assert(i < m);
27631 var b = this.pow(c, new BN(1).iushln(m - i - 1));
27632
27633 r = r.redMul(b);
27634 c = b.redSqr();
27635 t = t.redMul(c);
27636 m = i;
27637 }
27638
27639 return r;
27640 };
27641
27642 Red.prototype.invm = function invm (a) {
27643 var inv = a._invmp(this.m);
27644 if (inv.negative !== 0) {
27645 inv.negative = 0;
27646 return this.imod(inv).redNeg();
27647 } else {
27648 return this.imod(inv);
27649 }
27650 };
27651
27652 Red.prototype.pow = function pow (a, num) {
27653 if (num.isZero()) return new BN(1);
27654 if (num.cmpn(1) === 0) return a.clone();
27655
27656 var windowSize = 4;
27657 var wnd = new Array(1 << windowSize);
27658 wnd[0] = new BN(1).toRed(this);
27659 wnd[1] = a;
27660 for (var i = 2; i < wnd.length; i++) {
27661 wnd[i] = this.mul(wnd[i - 1], a);
27662 }
27663
27664 var res = wnd[0];
27665 var current = 0;
27666 var currentLen = 0;
27667 var start = num.bitLength() % 26;
27668 if (start === 0) {
27669 start = 26;
27670 }
27671
27672 for (i = num.length - 1; i >= 0; i--) {
27673 var word = num.words[i];
27674 for (var j = start - 1; j >= 0; j--) {
27675 var bit = (word >> j) & 1;
27676 if (res !== wnd[0]) {
27677 res = this.sqr(res);
27678 }
27679
27680 if (bit === 0 && current === 0) {
27681 currentLen = 0;
27682 continue;
27683 }
27684
27685 current <<= 1;
27686 current |= bit;
27687 currentLen++;
27688 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
27689
27690 res = this.mul(res, wnd[current]);
27691 currentLen = 0;
27692 current = 0;
27693 }
27694 start = 26;
27695 }
27696
27697 return res;
27698 };
27699
27700 Red.prototype.convertTo = function convertTo (num) {
27701 var r = num.umod(this.m);
27702
27703 return r === num ? r.clone() : r;
27704 };
27705
27706 Red.prototype.convertFrom = function convertFrom (num) {
27707 var res = num.clone();
27708 res.red = null;
27709 return res;
27710 };
27711
27712 //
27713 // Montgomery method engine
27714 //
27715
27716 BN.mont = function mont (num) {
27717 return new Mont(num);
27718 };
27719
27720 function Mont (m) {
27721 Red.call(this, m);
27722
27723 this.shift = this.m.bitLength();
27724 if (this.shift % 26 !== 0) {
27725 this.shift += 26 - (this.shift % 26);
27726 }
27727
27728 this.r = new BN(1).iushln(this.shift);
27729 this.r2 = this.imod(this.r.sqr());
27730 this.rinv = this.r._invmp(this.m);
27731
27732 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
27733 this.minv = this.minv.umod(this.r);
27734 this.minv = this.r.sub(this.minv);
27735 }
27736 inherits(Mont, Red);
27737
27738 Mont.prototype.convertTo = function convertTo (num) {
27739 return this.imod(num.ushln(this.shift));
27740 };
27741
27742 Mont.prototype.convertFrom = function convertFrom (num) {
27743 var r = this.imod(num.mul(this.rinv));
27744 r.red = null;
27745 return r;
27746 };
27747
27748 Mont.prototype.imul = function imul (a, b) {
27749 if (a.isZero() || b.isZero()) {
27750 a.words[0] = 0;
27751 a.length = 1;
27752 return a;
27753 }
27754
27755 var t = a.imul(b);
27756 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
27757 var u = t.isub(c).iushrn(this.shift);
27758 var res = u;
27759
27760 if (u.cmp(this.m) >= 0) {
27761 res = u.isub(this.m);
27762 } else if (u.cmpn(0) < 0) {
27763 res = u.iadd(this.m);
27764 }
27765
27766 return res._forceRed(this);
27767 };
27768
27769 Mont.prototype.mul = function mul (a, b) {
27770 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
27771
27772 var t = a.mul(b);
27773 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
27774 var u = t.isub(c).iushrn(this.shift);
27775 var res = u;
27776 if (u.cmp(this.m) >= 0) {
27777 res = u.isub(this.m);
27778 } else if (u.cmpn(0) < 0) {
27779 res = u.iadd(this.m);
27780 }
27781
27782 return res._forceRed(this);
27783 };
27784
27785 Mont.prototype.invm = function invm (a) {
27786 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
27787 var res = this.imod(a._invmp(this.m).mul(this.r2));
27788 return res._forceRed(this);
27789 };
27790})(typeof module === 'undefined' || module, this);
27791
27792},{}],34:[function(require,module,exports){
27793var r;
27794
27795module.exports = function rand(len) {
27796 if (!r)
27797 r = new Rand(null);
27798
27799 return r.generate(len);
27800};
27801
27802function Rand(rand) {
27803 this.rand = rand;
27804}
27805module.exports.Rand = Rand;
27806
27807Rand.prototype.generate = function generate(len) {
27808 return this._rand(len);
27809};
27810
27811if (typeof self === 'object') {
27812 if (self.crypto && self.crypto.getRandomValues) {
27813 // Modern browsers
27814 Rand.prototype._rand = function _rand(n) {
27815 var arr = new Uint8Array(n);
27816 self.crypto.getRandomValues(arr);
27817 return arr;
27818 };
27819 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
27820 // IE
27821 Rand.prototype._rand = function _rand(n) {
27822 var arr = new Uint8Array(n);
27823 self.msCrypto.getRandomValues(arr);
27824 return arr;
27825 };
27826 } else {
27827 // Old junk
27828 Rand.prototype._rand = function() {
27829 throw new Error('Not implemented yet');
27830 };
27831 }
27832} else {
27833 // Node.js or Web worker with no crypto support
27834 try {
27835 var crypto = require('crypto');
27836
27837 Rand.prototype._rand = function _rand(n) {
27838 return crypto.randomBytes(n);
27839 };
27840 } catch (e) {
27841 // Emulate crypto API using randy
27842 Rand.prototype._rand = function _rand(n) {
27843 var res = new Uint8Array(n);
27844 for (var i = 0; i < res.length; i++)
27845 res[i] = this.rand.getByte();
27846 return res;
27847 };
27848 }
27849}
27850
27851},{"crypto":3}],35:[function(require,module,exports){
27852(function (Buffer){
27853var Transform = require('stream').Transform
27854var inherits = require('inherits')
27855var StringDecoder = require('string_decoder').StringDecoder
27856module.exports = CipherBase
27857inherits(CipherBase, Transform)
27858function CipherBase (hashMode) {
27859 Transform.call(this)
27860 this.hashMode = typeof hashMode === 'string'
27861 if (this.hashMode) {
27862 this[hashMode] = this._finalOrDigest
27863 } else {
27864 this.final = this._finalOrDigest
27865 }
27866 this._decoder = null
27867 this._encoding = null
27868}
27869CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
27870 if (typeof data === 'string') {
27871 data = new Buffer(data, inputEnc)
27872 }
27873 var outData = this._update(data)
27874 if (this.hashMode) {
27875 return this
27876 }
27877 if (outputEnc) {
27878 outData = this._toString(outData, outputEnc)
27879 }
27880 return outData
27881}
27882
27883CipherBase.prototype.setAutoPadding = function () {}
27884
27885CipherBase.prototype.getAuthTag = function () {
27886 throw new Error('trying to get auth tag in unsupported state')
27887}
27888
27889CipherBase.prototype.setAuthTag = function () {
27890 throw new Error('trying to set auth tag in unsupported state')
27891}
27892
27893CipherBase.prototype.setAAD = function () {
27894 throw new Error('trying to set aad in unsupported state')
27895}
27896
27897CipherBase.prototype._transform = function (data, _, next) {
27898 var err
27899 try {
27900 if (this.hashMode) {
27901 this._update(data)
27902 } else {
27903 this.push(this._update(data))
27904 }
27905 } catch (e) {
27906 err = e
27907 } finally {
27908 next(err)
27909 }
27910}
27911CipherBase.prototype._flush = function (done) {
27912 var err
27913 try {
27914 this.push(this._final())
27915 } catch (e) {
27916 err = e
27917 } finally {
27918 done(err)
27919 }
27920}
27921CipherBase.prototype._finalOrDigest = function (outputEnc) {
27922 var outData = this._final() || new Buffer('')
27923 if (outputEnc) {
27924 outData = this._toString(outData, outputEnc, true)
27925 }
27926 return outData
27927}
27928
27929CipherBase.prototype._toString = function (value, enc, fin) {
27930 if (!this._decoder) {
27931 this._decoder = new StringDecoder(enc)
27932 this._encoding = enc
27933 }
27934 if (this._encoding !== enc) {
27935 throw new Error('can\'t switch encodings')
27936 }
27937 var out = this._decoder.write(value)
27938 if (fin) {
27939 out += this._decoder.end()
27940 }
27941 return out
27942}
27943
27944}).call(this,require("buffer").Buffer)
27945},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
27946(function (Buffer){
27947'use strict';
27948var inherits = require('inherits')
27949var md5 = require('./md5')
27950var rmd160 = require('ripemd160')
27951var sha = require('sha.js')
27952
27953var Base = require('cipher-base')
27954
27955function HashNoConstructor(hash) {
27956 Base.call(this, 'digest')
27957
27958 this._hash = hash
27959 this.buffers = []
27960}
27961
27962inherits(HashNoConstructor, Base)
27963
27964HashNoConstructor.prototype._update = function (data) {
27965 this.buffers.push(data)
27966}
27967
27968HashNoConstructor.prototype._final = function () {
27969 var buf = Buffer.concat(this.buffers)
27970 var r = this._hash(buf)
27971 this.buffers = null
27972
27973 return r
27974}
27975
27976function Hash(hash) {
27977 Base.call(this, 'digest')
27978
27979 this._hash = hash
27980}
27981
27982inherits(Hash, Base)
27983
27984Hash.prototype._update = function (data) {
27985 this._hash.update(data)
27986}
27987
27988Hash.prototype._final = function () {
27989 return this._hash.digest()
27990}
27991
27992module.exports = function createHash (alg) {
27993 alg = alg.toLowerCase()
27994 if ('md5' === alg) return new HashNoConstructor(md5)
27995 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
27996
27997 return new Hash(sha(alg))
27998}
27999
28000}).call(this,require("buffer").Buffer)
28001},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28002(function (Buffer){
28003'use strict';
28004var intSize = 4;
28005var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28006var chrsz = 8;
28007
28008function toArray(buf, bigEndian) {
28009 if ((buf.length % intSize) !== 0) {
28010 var len = buf.length + (intSize - (buf.length % intSize));
28011 buf = Buffer.concat([buf, zeroBuffer], len);
28012 }
28013
28014 var arr = [];
28015 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28016 for (var i = 0; i < buf.length; i += intSize) {
28017 arr.push(fn.call(buf, i));
28018 }
28019 return arr;
28020}
28021
28022function toBuffer(arr, size, bigEndian) {
28023 var buf = new Buffer(size);
28024 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28025 for (var i = 0; i < arr.length; i++) {
28026 fn.call(buf, arr[i], i * 4, true);
28027 }
28028 return buf;
28029}
28030
28031function hash(buf, fn, hashSize, bigEndian) {
28032 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28033 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28034 return toBuffer(arr, hashSize, bigEndian);
28035}
28036exports.hash = hash;
28037}).call(this,require("buffer").Buffer)
28038},{"buffer":5}],38:[function(require,module,exports){
28039'use strict';
28040/*
28041 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28042 * Digest Algorithm, as defined in RFC 1321.
28043 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28044 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28045 * Distributed under the BSD License
28046 * See http://pajhome.org.uk/crypt/md5 for more info.
28047 */
28048
28049var helpers = require('./helpers');
28050
28051/*
28052 * Calculate the MD5 of an array of little-endian words, and a bit length
28053 */
28054function core_md5(x, len)
28055{
28056 /* append padding */
28057 x[len >> 5] |= 0x80 << ((len) % 32);
28058 x[(((len + 64) >>> 9) << 4) + 14] = len;
28059
28060 var a = 1732584193;
28061 var b = -271733879;
28062 var c = -1732584194;
28063 var d = 271733878;
28064
28065 for(var i = 0; i < x.length; i += 16)
28066 {
28067 var olda = a;
28068 var oldb = b;
28069 var oldc = c;
28070 var oldd = d;
28071
28072 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28073 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28074 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28075 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28076 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28077 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28078 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28079 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28080 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28081 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28082 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28083 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28084 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28085 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28086 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28087 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
28088
28089 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28090 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28091 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28092 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28093 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28094 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28095 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28096 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28097 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28098 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28099 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28100 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28101 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28102 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28103 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28104 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
28105
28106 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28107 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28108 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28109 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28110 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28111 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28112 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28113 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28114 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28115 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28116 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28117 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28118 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28119 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28120 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28121 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
28122
28123 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28124 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28125 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28126 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28127 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28128 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28129 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28130 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28131 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28132 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28133 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28134 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28135 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28136 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28137 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28138 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
28139
28140 a = safe_add(a, olda);
28141 b = safe_add(b, oldb);
28142 c = safe_add(c, oldc);
28143 d = safe_add(d, oldd);
28144 }
28145 return Array(a, b, c, d);
28146
28147}
28148
28149/*
28150 * These functions implement the four basic operations the algorithm uses.
28151 */
28152function md5_cmn(q, a, b, x, s, t)
28153{
28154 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
28155}
28156function md5_ff(a, b, c, d, x, s, t)
28157{
28158 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
28159}
28160function md5_gg(a, b, c, d, x, s, t)
28161{
28162 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
28163}
28164function md5_hh(a, b, c, d, x, s, t)
28165{
28166 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28167}
28168function md5_ii(a, b, c, d, x, s, t)
28169{
28170 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
28171}
28172
28173/*
28174 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28175 * to work around bugs in some JS interpreters.
28176 */
28177function safe_add(x, y)
28178{
28179 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28180 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28181 return (msw << 16) | (lsw & 0xFFFF);
28182}
28183
28184/*
28185 * Bitwise rotate a 32-bit number to the left.
28186 */
28187function bit_rol(num, cnt)
28188{
28189 return (num << cnt) | (num >>> (32 - cnt));
28190}
28191
28192module.exports = function md5(buf) {
28193 return helpers.hash(buf, core_md5, 16);
28194};
28195},{"./helpers":37}],39:[function(require,module,exports){
28196'use strict';
28197
28198var elliptic = exports;
28199
28200elliptic.version = require('../package.json').version;
28201elliptic.utils = require('./elliptic/utils');
28202elliptic.rand = require('brorand');
28203elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
28204elliptic.curve = require('./elliptic/curve');
28205elliptic.curves = require('./elliptic/curves');
28206
28207// Protocols
28208elliptic.ec = require('./elliptic/ec');
28209elliptic.eddsa = require('./elliptic/eddsa');
28210
28211},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
28212'use strict';
28213
28214var BN = require('bn.js');
28215var elliptic = require('../../elliptic');
28216var utils = elliptic.utils;
28217var getNAF = utils.getNAF;
28218var getJSF = utils.getJSF;
28219var assert = utils.assert;
28220
28221function BaseCurve(type, conf) {
28222 this.type = type;
28223 this.p = new BN(conf.p, 16);
28224
28225 // Use Montgomery, when there is no fast reduction for the prime
28226 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
28227
28228 // Useful for many curves
28229 this.zero = new BN(0).toRed(this.red);
28230 this.one = new BN(1).toRed(this.red);
28231 this.two = new BN(2).toRed(this.red);
28232
28233 // Curve configuration, optional
28234 this.n = conf.n && new BN(conf.n, 16);
28235 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
28236
28237 // Temporary arrays
28238 this._wnafT1 = new Array(4);
28239 this._wnafT2 = new Array(4);
28240 this._wnafT3 = new Array(4);
28241 this._wnafT4 = new Array(4);
28242
28243 // Generalized Greg Maxwell's trick
28244 var adjustCount = this.n && this.p.div(this.n);
28245 if (!adjustCount || adjustCount.cmpn(100) > 0) {
28246 this.redN = null;
28247 } else {
28248 this._maxwellTrick = true;
28249 this.redN = this.n.toRed(this.red);
28250 }
28251}
28252module.exports = BaseCurve;
28253
28254BaseCurve.prototype.point = function point() {
28255 throw new Error('Not implemented');
28256};
28257
28258BaseCurve.prototype.validate = function validate() {
28259 throw new Error('Not implemented');
28260};
28261
28262BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
28263 assert(p.precomputed);
28264 var doubles = p._getDoubles();
28265
28266 var naf = getNAF(k, 1);
28267 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
28268 I /= 3;
28269
28270 // Translate into more windowed form
28271 var repr = [];
28272 for (var j = 0; j < naf.length; j += doubles.step) {
28273 var nafW = 0;
28274 for (var k = j + doubles.step - 1; k >= j; k--)
28275 nafW = (nafW << 1) + naf[k];
28276 repr.push(nafW);
28277 }
28278
28279 var a = this.jpoint(null, null, null);
28280 var b = this.jpoint(null, null, null);
28281 for (var i = I; i > 0; i--) {
28282 for (var j = 0; j < repr.length; j++) {
28283 var nafW = repr[j];
28284 if (nafW === i)
28285 b = b.mixedAdd(doubles.points[j]);
28286 else if (nafW === -i)
28287 b = b.mixedAdd(doubles.points[j].neg());
28288 }
28289 a = a.add(b);
28290 }
28291 return a.toP();
28292};
28293
28294BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
28295 var w = 4;
28296
28297 // Precompute window
28298 var nafPoints = p._getNAFPoints(w);
28299 w = nafPoints.wnd;
28300 var wnd = nafPoints.points;
28301
28302 // Get NAF form
28303 var naf = getNAF(k, w);
28304
28305 // Add `this`*(N+1) for every w-NAF index
28306 var acc = this.jpoint(null, null, null);
28307 for (var i = naf.length - 1; i >= 0; i--) {
28308 // Count zeroes
28309 for (var k = 0; i >= 0 && naf[i] === 0; i--)
28310 k++;
28311 if (i >= 0)
28312 k++;
28313 acc = acc.dblp(k);
28314
28315 if (i < 0)
28316 break;
28317 var z = naf[i];
28318 assert(z !== 0);
28319 if (p.type === 'affine') {
28320 // J +- P
28321 if (z > 0)
28322 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
28323 else
28324 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
28325 } else {
28326 // J +- J
28327 if (z > 0)
28328 acc = acc.add(wnd[(z - 1) >> 1]);
28329 else
28330 acc = acc.add(wnd[(-z - 1) >> 1].neg());
28331 }
28332 }
28333 return p.type === 'affine' ? acc.toP() : acc;
28334};
28335
28336BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
28337 points,
28338 coeffs,
28339 len,
28340 jacobianResult) {
28341 var wndWidth = this._wnafT1;
28342 var wnd = this._wnafT2;
28343 var naf = this._wnafT3;
28344
28345 // Fill all arrays
28346 var max = 0;
28347 for (var i = 0; i < len; i++) {
28348 var p = points[i];
28349 var nafPoints = p._getNAFPoints(defW);
28350 wndWidth[i] = nafPoints.wnd;
28351 wnd[i] = nafPoints.points;
28352 }
28353
28354 // Comb small window NAFs
28355 for (var i = len - 1; i >= 1; i -= 2) {
28356 var a = i - 1;
28357 var b = i;
28358 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
28359 naf[a] = getNAF(coeffs[a], wndWidth[a]);
28360 naf[b] = getNAF(coeffs[b], wndWidth[b]);
28361 max = Math.max(naf[a].length, max);
28362 max = Math.max(naf[b].length, max);
28363 continue;
28364 }
28365
28366 var comb = [
28367 points[a], /* 1 */
28368 null, /* 3 */
28369 null, /* 5 */
28370 points[b] /* 7 */
28371 ];
28372
28373 // Try to avoid Projective points, if possible
28374 if (points[a].y.cmp(points[b].y) === 0) {
28375 comb[1] = points[a].add(points[b]);
28376 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28377 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
28378 comb[1] = points[a].toJ().mixedAdd(points[b]);
28379 comb[2] = points[a].add(points[b].neg());
28380 } else {
28381 comb[1] = points[a].toJ().mixedAdd(points[b]);
28382 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28383 }
28384
28385 var index = [
28386 -3, /* -1 -1 */
28387 -1, /* -1 0 */
28388 -5, /* -1 1 */
28389 -7, /* 0 -1 */
28390 0, /* 0 0 */
28391 7, /* 0 1 */
28392 5, /* 1 -1 */
28393 1, /* 1 0 */
28394 3 /* 1 1 */
28395 ];
28396
28397 var jsf = getJSF(coeffs[a], coeffs[b]);
28398 max = Math.max(jsf[0].length, max);
28399 naf[a] = new Array(max);
28400 naf[b] = new Array(max);
28401 for (var j = 0; j < max; j++) {
28402 var ja = jsf[0][j] | 0;
28403 var jb = jsf[1][j] | 0;
28404
28405 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
28406 naf[b][j] = 0;
28407 wnd[a] = comb;
28408 }
28409 }
28410
28411 var acc = this.jpoint(null, null, null);
28412 var tmp = this._wnafT4;
28413 for (var i = max; i >= 0; i--) {
28414 var k = 0;
28415
28416 while (i >= 0) {
28417 var zero = true;
28418 for (var j = 0; j < len; j++) {
28419 tmp[j] = naf[j][i] | 0;
28420 if (tmp[j] !== 0)
28421 zero = false;
28422 }
28423 if (!zero)
28424 break;
28425 k++;
28426 i--;
28427 }
28428 if (i >= 0)
28429 k++;
28430 acc = acc.dblp(k);
28431 if (i < 0)
28432 break;
28433
28434 for (var j = 0; j < len; j++) {
28435 var z = tmp[j];
28436 var p;
28437 if (z === 0)
28438 continue;
28439 else if (z > 0)
28440 p = wnd[j][(z - 1) >> 1];
28441 else if (z < 0)
28442 p = wnd[j][(-z - 1) >> 1].neg();
28443
28444 if (p.type === 'affine')
28445 acc = acc.mixedAdd(p);
28446 else
28447 acc = acc.add(p);
28448 }
28449 }
28450 // Zeroify references
28451 for (var i = 0; i < len; i++)
28452 wnd[i] = null;
28453
28454 if (jacobianResult)
28455 return acc;
28456 else
28457 return acc.toP();
28458};
28459
28460function BasePoint(curve, type) {
28461 this.curve = curve;
28462 this.type = type;
28463 this.precomputed = null;
28464}
28465BaseCurve.BasePoint = BasePoint;
28466
28467BasePoint.prototype.eq = function eq(/*other*/) {
28468 throw new Error('Not implemented');
28469};
28470
28471BasePoint.prototype.validate = function validate() {
28472 return this.curve.validate(this);
28473};
28474
28475BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
28476 bytes = utils.toArray(bytes, enc);
28477
28478 var len = this.p.byteLength();
28479
28480 // uncompressed, hybrid-odd, hybrid-even
28481 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
28482 bytes.length - 1 === 2 * len) {
28483 if (bytes[0] === 0x06)
28484 assert(bytes[bytes.length - 1] % 2 === 0);
28485 else if (bytes[0] === 0x07)
28486 assert(bytes[bytes.length - 1] % 2 === 1);
28487
28488 var res = this.point(bytes.slice(1, 1 + len),
28489 bytes.slice(1 + len, 1 + 2 * len));
28490
28491 return res;
28492 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
28493 bytes.length - 1 === len) {
28494 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
28495 }
28496 throw new Error('Unknown point format');
28497};
28498
28499BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
28500 return this.encode(enc, true);
28501};
28502
28503BasePoint.prototype._encode = function _encode(compact) {
28504 var len = this.curve.p.byteLength();
28505 var x = this.getX().toArray('be', len);
28506
28507 if (compact)
28508 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
28509
28510 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
28511};
28512
28513BasePoint.prototype.encode = function encode(enc, compact) {
28514 return utils.encode(this._encode(compact), enc);
28515};
28516
28517BasePoint.prototype.precompute = function precompute(power) {
28518 if (this.precomputed)
28519 return this;
28520
28521 var precomputed = {
28522 doubles: null,
28523 naf: null,
28524 beta: null
28525 };
28526 precomputed.naf = this._getNAFPoints(8);
28527 precomputed.doubles = this._getDoubles(4, power);
28528 precomputed.beta = this._getBeta();
28529 this.precomputed = precomputed;
28530
28531 return this;
28532};
28533
28534BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
28535 if (!this.precomputed)
28536 return false;
28537
28538 var doubles = this.precomputed.doubles;
28539 if (!doubles)
28540 return false;
28541
28542 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
28543};
28544
28545BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
28546 if (this.precomputed && this.precomputed.doubles)
28547 return this.precomputed.doubles;
28548
28549 var doubles = [ this ];
28550 var acc = this;
28551 for (var i = 0; i < power; i += step) {
28552 for (var j = 0; j < step; j++)
28553 acc = acc.dbl();
28554 doubles.push(acc);
28555 }
28556 return {
28557 step: step,
28558 points: doubles
28559 };
28560};
28561
28562BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
28563 if (this.precomputed && this.precomputed.naf)
28564 return this.precomputed.naf;
28565
28566 var res = [ this ];
28567 var max = (1 << wnd) - 1;
28568 var dbl = max === 1 ? null : this.dbl();
28569 for (var i = 1; i < max; i++)
28570 res[i] = res[i - 1].add(dbl);
28571 return {
28572 wnd: wnd,
28573 points: res
28574 };
28575};
28576
28577BasePoint.prototype._getBeta = function _getBeta() {
28578 return null;
28579};
28580
28581BasePoint.prototype.dblp = function dblp(k) {
28582 var r = this;
28583 for (var i = 0; i < k; i++)
28584 r = r.dbl();
28585 return r;
28586};
28587
28588},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
28589'use strict';
28590
28591var curve = require('../curve');
28592var elliptic = require('../../elliptic');
28593var BN = require('bn.js');
28594var inherits = require('inherits');
28595var Base = curve.base;
28596
28597var assert = elliptic.utils.assert;
28598
28599function EdwardsCurve(conf) {
28600 // NOTE: Important as we are creating point in Base.call()
28601 this.twisted = (conf.a | 0) !== 1;
28602 this.mOneA = this.twisted && (conf.a | 0) === -1;
28603 this.extended = this.mOneA;
28604
28605 Base.call(this, 'edwards', conf);
28606
28607 this.a = new BN(conf.a, 16).umod(this.red.m);
28608 this.a = this.a.toRed(this.red);
28609 this.c = new BN(conf.c, 16).toRed(this.red);
28610 this.c2 = this.c.redSqr();
28611 this.d = new BN(conf.d, 16).toRed(this.red);
28612 this.dd = this.d.redAdd(this.d);
28613
28614 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
28615 this.oneC = (conf.c | 0) === 1;
28616}
28617inherits(EdwardsCurve, Base);
28618module.exports = EdwardsCurve;
28619
28620EdwardsCurve.prototype._mulA = function _mulA(num) {
28621 if (this.mOneA)
28622 return num.redNeg();
28623 else
28624 return this.a.redMul(num);
28625};
28626
28627EdwardsCurve.prototype._mulC = function _mulC(num) {
28628 if (this.oneC)
28629 return num;
28630 else
28631 return this.c.redMul(num);
28632};
28633
28634// Just for compatibility with Short curve
28635EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
28636 return this.point(x, y, z, t);
28637};
28638
28639EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
28640 x = new BN(x, 16);
28641 if (!x.red)
28642 x = x.toRed(this.red);
28643
28644 var x2 = x.redSqr();
28645 var rhs = this.c2.redSub(this.a.redMul(x2));
28646 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
28647
28648 var y2 = rhs.redMul(lhs.redInvm());
28649 var y = y2.redSqrt();
28650 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
28651 throw new Error('invalid point');
28652
28653 var isOdd = y.fromRed().isOdd();
28654 if (odd && !isOdd || !odd && isOdd)
28655 y = y.redNeg();
28656
28657 return this.point(x, y);
28658};
28659
28660EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
28661 y = new BN(y, 16);
28662 if (!y.red)
28663 y = y.toRed(this.red);
28664
28665 // x^2 = (y^2 - 1) / (d y^2 + 1)
28666 var y2 = y.redSqr();
28667 var lhs = y2.redSub(this.one);
28668 var rhs = y2.redMul(this.d).redAdd(this.one);
28669 var x2 = lhs.redMul(rhs.redInvm());
28670
28671 if (x2.cmp(this.zero) === 0) {
28672 if (odd)
28673 throw new Error('invalid point');
28674 else
28675 return this.point(this.zero, y);
28676 }
28677
28678 var x = x2.redSqrt();
28679 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
28680 throw new Error('invalid point');
28681
28682 if (x.isOdd() !== odd)
28683 x = x.redNeg();
28684
28685 return this.point(x, y);
28686};
28687
28688EdwardsCurve.prototype.validate = function validate(point) {
28689 if (point.isInfinity())
28690 return true;
28691
28692 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
28693 point.normalize();
28694
28695 var x2 = point.x.redSqr();
28696 var y2 = point.y.redSqr();
28697 var lhs = x2.redMul(this.a).redAdd(y2);
28698 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
28699
28700 return lhs.cmp(rhs) === 0;
28701};
28702
28703function Point(curve, x, y, z, t) {
28704 Base.BasePoint.call(this, curve, 'projective');
28705 if (x === null && y === null && z === null) {
28706 this.x = this.curve.zero;
28707 this.y = this.curve.one;
28708 this.z = this.curve.one;
28709 this.t = this.curve.zero;
28710 this.zOne = true;
28711 } else {
28712 this.x = new BN(x, 16);
28713 this.y = new BN(y, 16);
28714 this.z = z ? new BN(z, 16) : this.curve.one;
28715 this.t = t && new BN(t, 16);
28716 if (!this.x.red)
28717 this.x = this.x.toRed(this.curve.red);
28718 if (!this.y.red)
28719 this.y = this.y.toRed(this.curve.red);
28720 if (!this.z.red)
28721 this.z = this.z.toRed(this.curve.red);
28722 if (this.t && !this.t.red)
28723 this.t = this.t.toRed(this.curve.red);
28724 this.zOne = this.z === this.curve.one;
28725
28726 // Use extended coordinates
28727 if (this.curve.extended && !this.t) {
28728 this.t = this.x.redMul(this.y);
28729 if (!this.zOne)
28730 this.t = this.t.redMul(this.z.redInvm());
28731 }
28732 }
28733}
28734inherits(Point, Base.BasePoint);
28735
28736EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
28737 return Point.fromJSON(this, obj);
28738};
28739
28740EdwardsCurve.prototype.point = function point(x, y, z, t) {
28741 return new Point(this, x, y, z, t);
28742};
28743
28744Point.fromJSON = function fromJSON(curve, obj) {
28745 return new Point(curve, obj[0], obj[1], obj[2]);
28746};
28747
28748Point.prototype.inspect = function inspect() {
28749 if (this.isInfinity())
28750 return '<EC Point Infinity>';
28751 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
28752 ' y: ' + this.y.fromRed().toString(16, 2) +
28753 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
28754};
28755
28756Point.prototype.isInfinity = function isInfinity() {
28757 // XXX This code assumes that zero is always zero in red
28758 return this.x.cmpn(0) === 0 &&
28759 this.y.cmp(this.z) === 0;
28760};
28761
28762Point.prototype._extDbl = function _extDbl() {
28763 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
28764 // #doubling-dbl-2008-hwcd
28765 // 4M + 4S
28766
28767 // A = X1^2
28768 var a = this.x.redSqr();
28769 // B = Y1^2
28770 var b = this.y.redSqr();
28771 // C = 2 * Z1^2
28772 var c = this.z.redSqr();
28773 c = c.redIAdd(c);
28774 // D = a * A
28775 var d = this.curve._mulA(a);
28776 // E = (X1 + Y1)^2 - A - B
28777 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
28778 // G = D + B
28779 var g = d.redAdd(b);
28780 // F = G - C
28781 var f = g.redSub(c);
28782 // H = D - B
28783 var h = d.redSub(b);
28784 // X3 = E * F
28785 var nx = e.redMul(f);
28786 // Y3 = G * H
28787 var ny = g.redMul(h);
28788 // T3 = E * H
28789 var nt = e.redMul(h);
28790 // Z3 = F * G
28791 var nz = f.redMul(g);
28792 return this.curve.point(nx, ny, nz, nt);
28793};
28794
28795Point.prototype._projDbl = function _projDbl() {
28796 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
28797 // #doubling-dbl-2008-bbjlp
28798 // #doubling-dbl-2007-bl
28799 // and others
28800 // Generally 3M + 4S or 2M + 4S
28801
28802 // B = (X1 + Y1)^2
28803 var b = this.x.redAdd(this.y).redSqr();
28804 // C = X1^2
28805 var c = this.x.redSqr();
28806 // D = Y1^2
28807 var d = this.y.redSqr();
28808
28809 var nx;
28810 var ny;
28811 var nz;
28812 if (this.curve.twisted) {
28813 // E = a * C
28814 var e = this.curve._mulA(c);
28815 // F = E + D
28816 var f = e.redAdd(d);
28817 if (this.zOne) {
28818 // X3 = (B - C - D) * (F - 2)
28819 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
28820 // Y3 = F * (E - D)
28821 ny = f.redMul(e.redSub(d));
28822 // Z3 = F^2 - 2 * F
28823 nz = f.redSqr().redSub(f).redSub(f);
28824 } else {
28825 // H = Z1^2
28826 var h = this.z.redSqr();
28827 // J = F - 2 * H
28828 var j = f.redSub(h).redISub(h);
28829 // X3 = (B-C-D)*J
28830 nx = b.redSub(c).redISub(d).redMul(j);
28831 // Y3 = F * (E - D)
28832 ny = f.redMul(e.redSub(d));
28833 // Z3 = F * J
28834 nz = f.redMul(j);
28835 }
28836 } else {
28837 // E = C + D
28838 var e = c.redAdd(d);
28839 // H = (c * Z1)^2
28840 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
28841 // J = E - 2 * H
28842 var j = e.redSub(h).redSub(h);
28843 // X3 = c * (B - E) * J
28844 nx = this.curve._mulC(b.redISub(e)).redMul(j);
28845 // Y3 = c * E * (C - D)
28846 ny = this.curve._mulC(e).redMul(c.redISub(d));
28847 // Z3 = E * J
28848 nz = e.redMul(j);
28849 }
28850 return this.curve.point(nx, ny, nz);
28851};
28852
28853Point.prototype.dbl = function dbl() {
28854 if (this.isInfinity())
28855 return this;
28856
28857 // Double in extended coordinates
28858 if (this.curve.extended)
28859 return this._extDbl();
28860 else
28861 return this._projDbl();
28862};
28863
28864Point.prototype._extAdd = function _extAdd(p) {
28865 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
28866 // #addition-add-2008-hwcd-3
28867 // 8M
28868
28869 // A = (Y1 - X1) * (Y2 - X2)
28870 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
28871 // B = (Y1 + X1) * (Y2 + X2)
28872 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
28873 // C = T1 * k * T2
28874 var c = this.t.redMul(this.curve.dd).redMul(p.t);
28875 // D = Z1 * 2 * Z2
28876 var d = this.z.redMul(p.z.redAdd(p.z));
28877 // E = B - A
28878 var e = b.redSub(a);
28879 // F = D - C
28880 var f = d.redSub(c);
28881 // G = D + C
28882 var g = d.redAdd(c);
28883 // H = B + A
28884 var h = b.redAdd(a);
28885 // X3 = E * F
28886 var nx = e.redMul(f);
28887 // Y3 = G * H
28888 var ny = g.redMul(h);
28889 // T3 = E * H
28890 var nt = e.redMul(h);
28891 // Z3 = F * G
28892 var nz = f.redMul(g);
28893 return this.curve.point(nx, ny, nz, nt);
28894};
28895
28896Point.prototype._projAdd = function _projAdd(p) {
28897 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
28898 // #addition-add-2008-bbjlp
28899 // #addition-add-2007-bl
28900 // 10M + 1S
28901
28902 // A = Z1 * Z2
28903 var a = this.z.redMul(p.z);
28904 // B = A^2
28905 var b = a.redSqr();
28906 // C = X1 * X2
28907 var c = this.x.redMul(p.x);
28908 // D = Y1 * Y2
28909 var d = this.y.redMul(p.y);
28910 // E = d * C * D
28911 var e = this.curve.d.redMul(c).redMul(d);
28912 // F = B - E
28913 var f = b.redSub(e);
28914 // G = B + E
28915 var g = b.redAdd(e);
28916 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
28917 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
28918 var nx = a.redMul(f).redMul(tmp);
28919 var ny;
28920 var nz;
28921 if (this.curve.twisted) {
28922 // Y3 = A * G * (D - a * C)
28923 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
28924 // Z3 = F * G
28925 nz = f.redMul(g);
28926 } else {
28927 // Y3 = A * G * (D - C)
28928 ny = a.redMul(g).redMul(d.redSub(c));
28929 // Z3 = c * F * G
28930 nz = this.curve._mulC(f).redMul(g);
28931 }
28932 return this.curve.point(nx, ny, nz);
28933};
28934
28935Point.prototype.add = function add(p) {
28936 if (this.isInfinity())
28937 return p;
28938 if (p.isInfinity())
28939 return this;
28940
28941 if (this.curve.extended)
28942 return this._extAdd(p);
28943 else
28944 return this._projAdd(p);
28945};
28946
28947Point.prototype.mul = function mul(k) {
28948 if (this._hasDoubles(k))
28949 return this.curve._fixedNafMul(this, k);
28950 else
28951 return this.curve._wnafMul(this, k);
28952};
28953
28954Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
28955 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
28956};
28957
28958Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
28959 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
28960};
28961
28962Point.prototype.normalize = function normalize() {
28963 if (this.zOne)
28964 return this;
28965
28966 // Normalize coordinates
28967 var zi = this.z.redInvm();
28968 this.x = this.x.redMul(zi);
28969 this.y = this.y.redMul(zi);
28970 if (this.t)
28971 this.t = this.t.redMul(zi);
28972 this.z = this.curve.one;
28973 this.zOne = true;
28974 return this;
28975};
28976
28977Point.prototype.neg = function neg() {
28978 return this.curve.point(this.x.redNeg(),
28979 this.y,
28980 this.z,
28981 this.t && this.t.redNeg());
28982};
28983
28984Point.prototype.getX = function getX() {
28985 this.normalize();
28986 return this.x.fromRed();
28987};
28988
28989Point.prototype.getY = function getY() {
28990 this.normalize();
28991 return this.y.fromRed();
28992};
28993
28994Point.prototype.eq = function eq(other) {
28995 return this === other ||
28996 this.getX().cmp(other.getX()) === 0 &&
28997 this.getY().cmp(other.getY()) === 0;
28998};
28999
29000Point.prototype.eqXToP = function eqXToP(x) {
29001 var rx = x.toRed(this.curve.red).redMul(this.z);
29002 if (this.x.cmp(rx) === 0)
29003 return true;
29004
29005 var xc = x.clone();
29006 var t = this.curve.redN.redMul(this.z);
29007 for (;;) {
29008 xc.iadd(this.curve.n);
29009 if (xc.cmp(this.curve.p) >= 0)
29010 return false;
29011
29012 rx.redIAdd(t);
29013 if (this.x.cmp(rx) === 0)
29014 return true;
29015 }
29016 return false;
29017};
29018
29019// Compatibility with BaseCurve
29020Point.prototype.toP = Point.prototype.normalize;
29021Point.prototype.mixedAdd = Point.prototype.add;
29022
29023},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29024'use strict';
29025
29026var curve = exports;
29027
29028curve.base = require('./base');
29029curve.short = require('./short');
29030curve.mont = require('./mont');
29031curve.edwards = require('./edwards');
29032
29033},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29034'use strict';
29035
29036var curve = require('../curve');
29037var BN = require('bn.js');
29038var inherits = require('inherits');
29039var Base = curve.base;
29040
29041var elliptic = require('../../elliptic');
29042var utils = elliptic.utils;
29043
29044function MontCurve(conf) {
29045 Base.call(this, 'mont', conf);
29046
29047 this.a = new BN(conf.a, 16).toRed(this.red);
29048 this.b = new BN(conf.b, 16).toRed(this.red);
29049 this.i4 = new BN(4).toRed(this.red).redInvm();
29050 this.two = new BN(2).toRed(this.red);
29051 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
29052}
29053inherits(MontCurve, Base);
29054module.exports = MontCurve;
29055
29056MontCurve.prototype.validate = function validate(point) {
29057 var x = point.normalize().x;
29058 var x2 = x.redSqr();
29059 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29060 var y = rhs.redSqrt();
29061
29062 return y.redSqr().cmp(rhs) === 0;
29063};
29064
29065function Point(curve, x, z) {
29066 Base.BasePoint.call(this, curve, 'projective');
29067 if (x === null && z === null) {
29068 this.x = this.curve.one;
29069 this.z = this.curve.zero;
29070 } else {
29071 this.x = new BN(x, 16);
29072 this.z = new BN(z, 16);
29073 if (!this.x.red)
29074 this.x = this.x.toRed(this.curve.red);
29075 if (!this.z.red)
29076 this.z = this.z.toRed(this.curve.red);
29077 }
29078}
29079inherits(Point, Base.BasePoint);
29080
29081MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29082 return this.point(utils.toArray(bytes, enc), 1);
29083};
29084
29085MontCurve.prototype.point = function point(x, z) {
29086 return new Point(this, x, z);
29087};
29088
29089MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29090 return Point.fromJSON(this, obj);
29091};
29092
29093Point.prototype.precompute = function precompute() {
29094 // No-op
29095};
29096
29097Point.prototype._encode = function _encode() {
29098 return this.getX().toArray('be', this.curve.p.byteLength());
29099};
29100
29101Point.fromJSON = function fromJSON(curve, obj) {
29102 return new Point(curve, obj[0], obj[1] || curve.one);
29103};
29104
29105Point.prototype.inspect = function inspect() {
29106 if (this.isInfinity())
29107 return '<EC Point Infinity>';
29108 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29109 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29110};
29111
29112Point.prototype.isInfinity = function isInfinity() {
29113 // XXX This code assumes that zero is always zero in red
29114 return this.z.cmpn(0) === 0;
29115};
29116
29117Point.prototype.dbl = function dbl() {
29118 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29119 // 2M + 2S + 4A
29120
29121 // A = X1 + Z1
29122 var a = this.x.redAdd(this.z);
29123 // AA = A^2
29124 var aa = a.redSqr();
29125 // B = X1 - Z1
29126 var b = this.x.redSub(this.z);
29127 // BB = B^2
29128 var bb = b.redSqr();
29129 // C = AA - BB
29130 var c = aa.redSub(bb);
29131 // X3 = AA * BB
29132 var nx = aa.redMul(bb);
29133 // Z3 = C * (BB + A24 * C)
29134 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29135 return this.curve.point(nx, nz);
29136};
29137
29138Point.prototype.add = function add() {
29139 throw new Error('Not supported on Montgomery curve');
29140};
29141
29142Point.prototype.diffAdd = function diffAdd(p, diff) {
29143 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29144 // 4M + 2S + 6A
29145
29146 // A = X2 + Z2
29147 var a = this.x.redAdd(this.z);
29148 // B = X2 - Z2
29149 var b = this.x.redSub(this.z);
29150 // C = X3 + Z3
29151 var c = p.x.redAdd(p.z);
29152 // D = X3 - Z3
29153 var d = p.x.redSub(p.z);
29154 // DA = D * A
29155 var da = d.redMul(a);
29156 // CB = C * B
29157 var cb = c.redMul(b);
29158 // X5 = Z1 * (DA + CB)^2
29159 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29160 // Z5 = X1 * (DA - CB)^2
29161 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29162 return this.curve.point(nx, nz);
29163};
29164
29165Point.prototype.mul = function mul(k) {
29166 var t = k.clone();
29167 var a = this; // (N / 2) * Q + Q
29168 var b = this.curve.point(null, null); // (N / 2) * Q
29169 var c = this; // Q
29170
29171 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29172 bits.push(t.andln(1));
29173
29174 for (var i = bits.length - 1; i >= 0; i--) {
29175 if (bits[i] === 0) {
29176 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29177 a = a.diffAdd(b, c);
29178 // N * Q = 2 * ((N / 2) * Q + Q))
29179 b = b.dbl();
29180 } else {
29181 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29182 b = a.diffAdd(b, c);
29183 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29184 a = a.dbl();
29185 }
29186 }
29187 return b;
29188};
29189
29190Point.prototype.mulAdd = function mulAdd() {
29191 throw new Error('Not supported on Montgomery curve');
29192};
29193
29194Point.prototype.jumlAdd = function jumlAdd() {
29195 throw new Error('Not supported on Montgomery curve');
29196};
29197
29198Point.prototype.eq = function eq(other) {
29199 return this.getX().cmp(other.getX()) === 0;
29200};
29201
29202Point.prototype.normalize = function normalize() {
29203 this.x = this.x.redMul(this.z.redInvm());
29204 this.z = this.curve.one;
29205 return this;
29206};
29207
29208Point.prototype.getX = function getX() {
29209 // Normalize coordinates
29210 this.normalize();
29211
29212 return this.x.fromRed();
29213};
29214
29215},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
29216'use strict';
29217
29218var curve = require('../curve');
29219var elliptic = require('../../elliptic');
29220var BN = require('bn.js');
29221var inherits = require('inherits');
29222var Base = curve.base;
29223
29224var assert = elliptic.utils.assert;
29225
29226function ShortCurve(conf) {
29227 Base.call(this, 'short', conf);
29228
29229 this.a = new BN(conf.a, 16).toRed(this.red);
29230 this.b = new BN(conf.b, 16).toRed(this.red);
29231 this.tinv = this.two.redInvm();
29232
29233 this.zeroA = this.a.fromRed().cmpn(0) === 0;
29234 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
29235
29236 // If the curve is endomorphic, precalculate beta and lambda
29237 this.endo = this._getEndomorphism(conf);
29238 this._endoWnafT1 = new Array(4);
29239 this._endoWnafT2 = new Array(4);
29240}
29241inherits(ShortCurve, Base);
29242module.exports = ShortCurve;
29243
29244ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
29245 // No efficient endomorphism
29246 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
29247 return;
29248
29249 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
29250 var beta;
29251 var lambda;
29252 if (conf.beta) {
29253 beta = new BN(conf.beta, 16).toRed(this.red);
29254 } else {
29255 var betas = this._getEndoRoots(this.p);
29256 // Choose the smallest beta
29257 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
29258 beta = beta.toRed(this.red);
29259 }
29260 if (conf.lambda) {
29261 lambda = new BN(conf.lambda, 16);
29262 } else {
29263 // Choose the lambda that is matching selected beta
29264 var lambdas = this._getEndoRoots(this.n);
29265 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
29266 lambda = lambdas[0];
29267 } else {
29268 lambda = lambdas[1];
29269 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
29270 }
29271 }
29272
29273 // Get basis vectors, used for balanced length-two representation
29274 var basis;
29275 if (conf.basis) {
29276 basis = conf.basis.map(function(vec) {
29277 return {
29278 a: new BN(vec.a, 16),
29279 b: new BN(vec.b, 16)
29280 };
29281 });
29282 } else {
29283 basis = this._getEndoBasis(lambda);
29284 }
29285
29286 return {
29287 beta: beta,
29288 lambda: lambda,
29289 basis: basis
29290 };
29291};
29292
29293ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
29294 // Find roots of for x^2 + x + 1 in F
29295 // Root = (-1 +- Sqrt(-3)) / 2
29296 //
29297 var red = num === this.p ? this.red : BN.mont(num);
29298 var tinv = new BN(2).toRed(red).redInvm();
29299 var ntinv = tinv.redNeg();
29300
29301 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
29302
29303 var l1 = ntinv.redAdd(s).fromRed();
29304 var l2 = ntinv.redSub(s).fromRed();
29305 return [ l1, l2 ];
29306};
29307
29308ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
29309 // aprxSqrt >= sqrt(this.n)
29310 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
29311
29312 // 3.74
29313 // Run EGCD, until r(L + 1) < aprxSqrt
29314 var u = lambda;
29315 var v = this.n.clone();
29316 var x1 = new BN(1);
29317 var y1 = new BN(0);
29318 var x2 = new BN(0);
29319 var y2 = new BN(1);
29320
29321 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
29322 var a0;
29323 var b0;
29324 // First vector
29325 var a1;
29326 var b1;
29327 // Second vector
29328 var a2;
29329 var b2;
29330
29331 var prevR;
29332 var i = 0;
29333 var r;
29334 var x;
29335 while (u.cmpn(0) !== 0) {
29336 var q = v.div(u);
29337 r = v.sub(q.mul(u));
29338 x = x2.sub(q.mul(x1));
29339 var y = y2.sub(q.mul(y1));
29340
29341 if (!a1 && r.cmp(aprxSqrt) < 0) {
29342 a0 = prevR.neg();
29343 b0 = x1;
29344 a1 = r.neg();
29345 b1 = x;
29346 } else if (a1 && ++i === 2) {
29347 break;
29348 }
29349 prevR = r;
29350
29351 v = u;
29352 u = r;
29353 x2 = x1;
29354 x1 = x;
29355 y2 = y1;
29356 y1 = y;
29357 }
29358 a2 = r.neg();
29359 b2 = x;
29360
29361 var len1 = a1.sqr().add(b1.sqr());
29362 var len2 = a2.sqr().add(b2.sqr());
29363 if (len2.cmp(len1) >= 0) {
29364 a2 = a0;
29365 b2 = b0;
29366 }
29367
29368 // Normalize signs
29369 if (a1.negative) {
29370 a1 = a1.neg();
29371 b1 = b1.neg();
29372 }
29373 if (a2.negative) {
29374 a2 = a2.neg();
29375 b2 = b2.neg();
29376 }
29377
29378 return [
29379 { a: a1, b: b1 },
29380 { a: a2, b: b2 }
29381 ];
29382};
29383
29384ShortCurve.prototype._endoSplit = function _endoSplit(k) {
29385 var basis = this.endo.basis;
29386 var v1 = basis[0];
29387 var v2 = basis[1];
29388
29389 var c1 = v2.b.mul(k).divRound(this.n);
29390 var c2 = v1.b.neg().mul(k).divRound(this.n);
29391
29392 var p1 = c1.mul(v1.a);
29393 var p2 = c2.mul(v2.a);
29394 var q1 = c1.mul(v1.b);
29395 var q2 = c2.mul(v2.b);
29396
29397 // Calculate answer
29398 var k1 = k.sub(p1).sub(p2);
29399 var k2 = q1.add(q2).neg();
29400 return { k1: k1, k2: k2 };
29401};
29402
29403ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
29404 x = new BN(x, 16);
29405 if (!x.red)
29406 x = x.toRed(this.red);
29407
29408 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
29409 var y = y2.redSqrt();
29410 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29411 throw new Error('invalid point');
29412
29413 // XXX Is there any way to tell if the number is odd without converting it
29414 // to non-red form?
29415 var isOdd = y.fromRed().isOdd();
29416 if (odd && !isOdd || !odd && isOdd)
29417 y = y.redNeg();
29418
29419 return this.point(x, y);
29420};
29421
29422ShortCurve.prototype.validate = function validate(point) {
29423 if (point.inf)
29424 return true;
29425
29426 var x = point.x;
29427 var y = point.y;
29428
29429 var ax = this.a.redMul(x);
29430 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
29431 return y.redSqr().redISub(rhs).cmpn(0) === 0;
29432};
29433
29434ShortCurve.prototype._endoWnafMulAdd =
29435 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
29436 var npoints = this._endoWnafT1;
29437 var ncoeffs = this._endoWnafT2;
29438 for (var i = 0; i < points.length; i++) {
29439 var split = this._endoSplit(coeffs[i]);
29440 var p = points[i];
29441 var beta = p._getBeta();
29442
29443 if (split.k1.negative) {
29444 split.k1.ineg();
29445 p = p.neg(true);
29446 }
29447 if (split.k2.negative) {
29448 split.k2.ineg();
29449 beta = beta.neg(true);
29450 }
29451
29452 npoints[i * 2] = p;
29453 npoints[i * 2 + 1] = beta;
29454 ncoeffs[i * 2] = split.k1;
29455 ncoeffs[i * 2 + 1] = split.k2;
29456 }
29457 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
29458
29459 // Clean-up references to points and coefficients
29460 for (var j = 0; j < i * 2; j++) {
29461 npoints[j] = null;
29462 ncoeffs[j] = null;
29463 }
29464 return res;
29465};
29466
29467function Point(curve, x, y, isRed) {
29468 Base.BasePoint.call(this, curve, 'affine');
29469 if (x === null && y === null) {
29470 this.x = null;
29471 this.y = null;
29472 this.inf = true;
29473 } else {
29474 this.x = new BN(x, 16);
29475 this.y = new BN(y, 16);
29476 // Force redgomery representation when loading from JSON
29477 if (isRed) {
29478 this.x.forceRed(this.curve.red);
29479 this.y.forceRed(this.curve.red);
29480 }
29481 if (!this.x.red)
29482 this.x = this.x.toRed(this.curve.red);
29483 if (!this.y.red)
29484 this.y = this.y.toRed(this.curve.red);
29485 this.inf = false;
29486 }
29487}
29488inherits(Point, Base.BasePoint);
29489
29490ShortCurve.prototype.point = function point(x, y, isRed) {
29491 return new Point(this, x, y, isRed);
29492};
29493
29494ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
29495 return Point.fromJSON(this, obj, red);
29496};
29497
29498Point.prototype._getBeta = function _getBeta() {
29499 if (!this.curve.endo)
29500 return;
29501
29502 var pre = this.precomputed;
29503 if (pre && pre.beta)
29504 return pre.beta;
29505
29506 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
29507 if (pre) {
29508 var curve = this.curve;
29509 var endoMul = function(p) {
29510 return curve.point(p.x.redMul(curve.endo.beta), p.y);
29511 };
29512 pre.beta = beta;
29513 beta.precomputed = {
29514 beta: null,
29515 naf: pre.naf && {
29516 wnd: pre.naf.wnd,
29517 points: pre.naf.points.map(endoMul)
29518 },
29519 doubles: pre.doubles && {
29520 step: pre.doubles.step,
29521 points: pre.doubles.points.map(endoMul)
29522 }
29523 };
29524 }
29525 return beta;
29526};
29527
29528Point.prototype.toJSON = function toJSON() {
29529 if (!this.precomputed)
29530 return [ this.x, this.y ];
29531
29532 return [ this.x, this.y, this.precomputed && {
29533 doubles: this.precomputed.doubles && {
29534 step: this.precomputed.doubles.step,
29535 points: this.precomputed.doubles.points.slice(1)
29536 },
29537 naf: this.precomputed.naf && {
29538 wnd: this.precomputed.naf.wnd,
29539 points: this.precomputed.naf.points.slice(1)
29540 }
29541 } ];
29542};
29543
29544Point.fromJSON = function fromJSON(curve, obj, red) {
29545 if (typeof obj === 'string')
29546 obj = JSON.parse(obj);
29547 var res = curve.point(obj[0], obj[1], red);
29548 if (!obj[2])
29549 return res;
29550
29551 function obj2point(obj) {
29552 return curve.point(obj[0], obj[1], red);
29553 }
29554
29555 var pre = obj[2];
29556 res.precomputed = {
29557 beta: null,
29558 doubles: pre.doubles && {
29559 step: pre.doubles.step,
29560 points: [ res ].concat(pre.doubles.points.map(obj2point))
29561 },
29562 naf: pre.naf && {
29563 wnd: pre.naf.wnd,
29564 points: [ res ].concat(pre.naf.points.map(obj2point))
29565 }
29566 };
29567 return res;
29568};
29569
29570Point.prototype.inspect = function inspect() {
29571 if (this.isInfinity())
29572 return '<EC Point Infinity>';
29573 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29574 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
29575};
29576
29577Point.prototype.isInfinity = function isInfinity() {
29578 return this.inf;
29579};
29580
29581Point.prototype.add = function add(p) {
29582 // O + P = P
29583 if (this.inf)
29584 return p;
29585
29586 // P + O = P
29587 if (p.inf)
29588 return this;
29589
29590 // P + P = 2P
29591 if (this.eq(p))
29592 return this.dbl();
29593
29594 // P + (-P) = O
29595 if (this.neg().eq(p))
29596 return this.curve.point(null, null);
29597
29598 // P + Q = O
29599 if (this.x.cmp(p.x) === 0)
29600 return this.curve.point(null, null);
29601
29602 var c = this.y.redSub(p.y);
29603 if (c.cmpn(0) !== 0)
29604 c = c.redMul(this.x.redSub(p.x).redInvm());
29605 var nx = c.redSqr().redISub(this.x).redISub(p.x);
29606 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
29607 return this.curve.point(nx, ny);
29608};
29609
29610Point.prototype.dbl = function dbl() {
29611 if (this.inf)
29612 return this;
29613
29614 // 2P = O
29615 var ys1 = this.y.redAdd(this.y);
29616 if (ys1.cmpn(0) === 0)
29617 return this.curve.point(null, null);
29618
29619 var a = this.curve.a;
29620
29621 var x2 = this.x.redSqr();
29622 var dyinv = ys1.redInvm();
29623 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
29624
29625 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
29626 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
29627 return this.curve.point(nx, ny);
29628};
29629
29630Point.prototype.getX = function getX() {
29631 return this.x.fromRed();
29632};
29633
29634Point.prototype.getY = function getY() {
29635 return this.y.fromRed();
29636};
29637
29638Point.prototype.mul = function mul(k) {
29639 k = new BN(k, 16);
29640
29641 if (this._hasDoubles(k))
29642 return this.curve._fixedNafMul(this, k);
29643 else if (this.curve.endo)
29644 return this.curve._endoWnafMulAdd([ this ], [ k ]);
29645 else
29646 return this.curve._wnafMul(this, k);
29647};
29648
29649Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
29650 var points = [ this, p2 ];
29651 var coeffs = [ k1, k2 ];
29652 if (this.curve.endo)
29653 return this.curve._endoWnafMulAdd(points, coeffs);
29654 else
29655 return this.curve._wnafMulAdd(1, points, coeffs, 2);
29656};
29657
29658Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
29659 var points = [ this, p2 ];
29660 var coeffs = [ k1, k2 ];
29661 if (this.curve.endo)
29662 return this.curve._endoWnafMulAdd(points, coeffs, true);
29663 else
29664 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
29665};
29666
29667Point.prototype.eq = function eq(p) {
29668 return this === p ||
29669 this.inf === p.inf &&
29670 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
29671};
29672
29673Point.prototype.neg = function neg(_precompute) {
29674 if (this.inf)
29675 return this;
29676
29677 var res = this.curve.point(this.x, this.y.redNeg());
29678 if (_precompute && this.precomputed) {
29679 var pre = this.precomputed;
29680 var negate = function(p) {
29681 return p.neg();
29682 };
29683 res.precomputed = {
29684 naf: pre.naf && {
29685 wnd: pre.naf.wnd,
29686 points: pre.naf.points.map(negate)
29687 },
29688 doubles: pre.doubles && {
29689 step: pre.doubles.step,
29690 points: pre.doubles.points.map(negate)
29691 }
29692 };
29693 }
29694 return res;
29695};
29696
29697Point.prototype.toJ = function toJ() {
29698 if (this.inf)
29699 return this.curve.jpoint(null, null, null);
29700
29701 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
29702 return res;
29703};
29704
29705function JPoint(curve, x, y, z) {
29706 Base.BasePoint.call(this, curve, 'jacobian');
29707 if (x === null && y === null && z === null) {
29708 this.x = this.curve.one;
29709 this.y = this.curve.one;
29710 this.z = new BN(0);
29711 } else {
29712 this.x = new BN(x, 16);
29713 this.y = new BN(y, 16);
29714 this.z = new BN(z, 16);
29715 }
29716 if (!this.x.red)
29717 this.x = this.x.toRed(this.curve.red);
29718 if (!this.y.red)
29719 this.y = this.y.toRed(this.curve.red);
29720 if (!this.z.red)
29721 this.z = this.z.toRed(this.curve.red);
29722
29723 this.zOne = this.z === this.curve.one;
29724}
29725inherits(JPoint, Base.BasePoint);
29726
29727ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
29728 return new JPoint(this, x, y, z);
29729};
29730
29731JPoint.prototype.toP = function toP() {
29732 if (this.isInfinity())
29733 return this.curve.point(null, null);
29734
29735 var zinv = this.z.redInvm();
29736 var zinv2 = zinv.redSqr();
29737 var ax = this.x.redMul(zinv2);
29738 var ay = this.y.redMul(zinv2).redMul(zinv);
29739
29740 return this.curve.point(ax, ay);
29741};
29742
29743JPoint.prototype.neg = function neg() {
29744 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
29745};
29746
29747JPoint.prototype.add = function add(p) {
29748 // O + P = P
29749 if (this.isInfinity())
29750 return p;
29751
29752 // P + O = P
29753 if (p.isInfinity())
29754 return this;
29755
29756 // 12M + 4S + 7A
29757 var pz2 = p.z.redSqr();
29758 var z2 = this.z.redSqr();
29759 var u1 = this.x.redMul(pz2);
29760 var u2 = p.x.redMul(z2);
29761 var s1 = this.y.redMul(pz2.redMul(p.z));
29762 var s2 = p.y.redMul(z2.redMul(this.z));
29763
29764 var h = u1.redSub(u2);
29765 var r = s1.redSub(s2);
29766 if (h.cmpn(0) === 0) {
29767 if (r.cmpn(0) !== 0)
29768 return this.curve.jpoint(null, null, null);
29769 else
29770 return this.dbl();
29771 }
29772
29773 var h2 = h.redSqr();
29774 var h3 = h2.redMul(h);
29775 var v = u1.redMul(h2);
29776
29777 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
29778 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
29779 var nz = this.z.redMul(p.z).redMul(h);
29780
29781 return this.curve.jpoint(nx, ny, nz);
29782};
29783
29784JPoint.prototype.mixedAdd = function mixedAdd(p) {
29785 // O + P = P
29786 if (this.isInfinity())
29787 return p.toJ();
29788
29789 // P + O = P
29790 if (p.isInfinity())
29791 return this;
29792
29793 // 8M + 3S + 7A
29794 var z2 = this.z.redSqr();
29795 var u1 = this.x;
29796 var u2 = p.x.redMul(z2);
29797 var s1 = this.y;
29798 var s2 = p.y.redMul(z2).redMul(this.z);
29799
29800 var h = u1.redSub(u2);
29801 var r = s1.redSub(s2);
29802 if (h.cmpn(0) === 0) {
29803 if (r.cmpn(0) !== 0)
29804 return this.curve.jpoint(null, null, null);
29805 else
29806 return this.dbl();
29807 }
29808
29809 var h2 = h.redSqr();
29810 var h3 = h2.redMul(h);
29811 var v = u1.redMul(h2);
29812
29813 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
29814 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
29815 var nz = this.z.redMul(h);
29816
29817 return this.curve.jpoint(nx, ny, nz);
29818};
29819
29820JPoint.prototype.dblp = function dblp(pow) {
29821 if (pow === 0)
29822 return this;
29823 if (this.isInfinity())
29824 return this;
29825 if (!pow)
29826 return this.dbl();
29827
29828 if (this.curve.zeroA || this.curve.threeA) {
29829 var r = this;
29830 for (var i = 0; i < pow; i++)
29831 r = r.dbl();
29832 return r;
29833 }
29834
29835 // 1M + 2S + 1A + N * (4S + 5M + 8A)
29836 // N = 1 => 6M + 6S + 9A
29837 var a = this.curve.a;
29838 var tinv = this.curve.tinv;
29839
29840 var jx = this.x;
29841 var jy = this.y;
29842 var jz = this.z;
29843 var jz4 = jz.redSqr().redSqr();
29844
29845 // Reuse results
29846 var jyd = jy.redAdd(jy);
29847 for (var i = 0; i < pow; i++) {
29848 var jx2 = jx.redSqr();
29849 var jyd2 = jyd.redSqr();
29850 var jyd4 = jyd2.redSqr();
29851 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
29852
29853 var t1 = jx.redMul(jyd2);
29854 var nx = c.redSqr().redISub(t1.redAdd(t1));
29855 var t2 = t1.redISub(nx);
29856 var dny = c.redMul(t2);
29857 dny = dny.redIAdd(dny).redISub(jyd4);
29858 var nz = jyd.redMul(jz);
29859 if (i + 1 < pow)
29860 jz4 = jz4.redMul(jyd4);
29861
29862 jx = nx;
29863 jz = nz;
29864 jyd = dny;
29865 }
29866
29867 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
29868};
29869
29870JPoint.prototype.dbl = function dbl() {
29871 if (this.isInfinity())
29872 return this;
29873
29874 if (this.curve.zeroA)
29875 return this._zeroDbl();
29876 else if (this.curve.threeA)
29877 return this._threeDbl();
29878 else
29879 return this._dbl();
29880};
29881
29882JPoint.prototype._zeroDbl = function _zeroDbl() {
29883 var nx;
29884 var ny;
29885 var nz;
29886 // Z = 1
29887 if (this.zOne) {
29888 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
29889 // #doubling-mdbl-2007-bl
29890 // 1M + 5S + 14A
29891
29892 // XX = X1^2
29893 var xx = this.x.redSqr();
29894 // YY = Y1^2
29895 var yy = this.y.redSqr();
29896 // YYYY = YY^2
29897 var yyyy = yy.redSqr();
29898 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
29899 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
29900 s = s.redIAdd(s);
29901 // M = 3 * XX + a; a = 0
29902 var m = xx.redAdd(xx).redIAdd(xx);
29903 // T = M ^ 2 - 2*S
29904 var t = m.redSqr().redISub(s).redISub(s);
29905
29906 // 8 * YYYY
29907 var yyyy8 = yyyy.redIAdd(yyyy);
29908 yyyy8 = yyyy8.redIAdd(yyyy8);
29909 yyyy8 = yyyy8.redIAdd(yyyy8);
29910
29911 // X3 = T
29912 nx = t;
29913 // Y3 = M * (S - T) - 8 * YYYY
29914 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
29915 // Z3 = 2*Y1
29916 nz = this.y.redAdd(this.y);
29917 } else {
29918 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
29919 // #doubling-dbl-2009-l
29920 // 2M + 5S + 13A
29921
29922 // A = X1^2
29923 var a = this.x.redSqr();
29924 // B = Y1^2
29925 var b = this.y.redSqr();
29926 // C = B^2
29927 var c = b.redSqr();
29928 // D = 2 * ((X1 + B)^2 - A - C)
29929 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
29930 d = d.redIAdd(d);
29931 // E = 3 * A
29932 var e = a.redAdd(a).redIAdd(a);
29933 // F = E^2
29934 var f = e.redSqr();
29935
29936 // 8 * C
29937 var c8 = c.redIAdd(c);
29938 c8 = c8.redIAdd(c8);
29939 c8 = c8.redIAdd(c8);
29940
29941 // X3 = F - 2 * D
29942 nx = f.redISub(d).redISub(d);
29943 // Y3 = E * (D - X3) - 8 * C
29944 ny = e.redMul(d.redISub(nx)).redISub(c8);
29945 // Z3 = 2 * Y1 * Z1
29946 nz = this.y.redMul(this.z);
29947 nz = nz.redIAdd(nz);
29948 }
29949
29950 return this.curve.jpoint(nx, ny, nz);
29951};
29952
29953JPoint.prototype._threeDbl = function _threeDbl() {
29954 var nx;
29955 var ny;
29956 var nz;
29957 // Z = 1
29958 if (this.zOne) {
29959 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
29960 // #doubling-mdbl-2007-bl
29961 // 1M + 5S + 15A
29962
29963 // XX = X1^2
29964 var xx = this.x.redSqr();
29965 // YY = Y1^2
29966 var yy = this.y.redSqr();
29967 // YYYY = YY^2
29968 var yyyy = yy.redSqr();
29969 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
29970 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
29971 s = s.redIAdd(s);
29972 // M = 3 * XX + a
29973 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
29974 // T = M^2 - 2 * S
29975 var t = m.redSqr().redISub(s).redISub(s);
29976 // X3 = T
29977 nx = t;
29978 // Y3 = M * (S - T) - 8 * YYYY
29979 var yyyy8 = yyyy.redIAdd(yyyy);
29980 yyyy8 = yyyy8.redIAdd(yyyy8);
29981 yyyy8 = yyyy8.redIAdd(yyyy8);
29982 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
29983 // Z3 = 2 * Y1
29984 nz = this.y.redAdd(this.y);
29985 } else {
29986 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
29987 // 3M + 5S
29988
29989 // delta = Z1^2
29990 var delta = this.z.redSqr();
29991 // gamma = Y1^2
29992 var gamma = this.y.redSqr();
29993 // beta = X1 * gamma
29994 var beta = this.x.redMul(gamma);
29995 // alpha = 3 * (X1 - delta) * (X1 + delta)
29996 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
29997 alpha = alpha.redAdd(alpha).redIAdd(alpha);
29998 // X3 = alpha^2 - 8 * beta
29999 var beta4 = beta.redIAdd(beta);
30000 beta4 = beta4.redIAdd(beta4);
30001 var beta8 = beta4.redAdd(beta4);
30002 nx = alpha.redSqr().redISub(beta8);
30003 // Z3 = (Y1 + Z1)^2 - gamma - delta
30004 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30005 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30006 var ggamma8 = gamma.redSqr();
30007 ggamma8 = ggamma8.redIAdd(ggamma8);
30008 ggamma8 = ggamma8.redIAdd(ggamma8);
30009 ggamma8 = ggamma8.redIAdd(ggamma8);
30010 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30011 }
30012
30013 return this.curve.jpoint(nx, ny, nz);
30014};
30015
30016JPoint.prototype._dbl = function _dbl() {
30017 var a = this.curve.a;
30018
30019 // 4M + 6S + 10A
30020 var jx = this.x;
30021 var jy = this.y;
30022 var jz = this.z;
30023 var jz4 = jz.redSqr().redSqr();
30024
30025 var jx2 = jx.redSqr();
30026 var jy2 = jy.redSqr();
30027
30028 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30029
30030 var jxd4 = jx.redAdd(jx);
30031 jxd4 = jxd4.redIAdd(jxd4);
30032 var t1 = jxd4.redMul(jy2);
30033 var nx = c.redSqr().redISub(t1.redAdd(t1));
30034 var t2 = t1.redISub(nx);
30035
30036 var jyd8 = jy2.redSqr();
30037 jyd8 = jyd8.redIAdd(jyd8);
30038 jyd8 = jyd8.redIAdd(jyd8);
30039 jyd8 = jyd8.redIAdd(jyd8);
30040 var ny = c.redMul(t2).redISub(jyd8);
30041 var nz = jy.redAdd(jy).redMul(jz);
30042
30043 return this.curve.jpoint(nx, ny, nz);
30044};
30045
30046JPoint.prototype.trpl = function trpl() {
30047 if (!this.curve.zeroA)
30048 return this.dbl().add(this);
30049
30050 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30051 // 5M + 10S + ...
30052
30053 // XX = X1^2
30054 var xx = this.x.redSqr();
30055 // YY = Y1^2
30056 var yy = this.y.redSqr();
30057 // ZZ = Z1^2
30058 var zz = this.z.redSqr();
30059 // YYYY = YY^2
30060 var yyyy = yy.redSqr();
30061 // M = 3 * XX + a * ZZ2; a = 0
30062 var m = xx.redAdd(xx).redIAdd(xx);
30063 // MM = M^2
30064 var mm = m.redSqr();
30065 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30066 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30067 e = e.redIAdd(e);
30068 e = e.redAdd(e).redIAdd(e);
30069 e = e.redISub(mm);
30070 // EE = E^2
30071 var ee = e.redSqr();
30072 // T = 16*YYYY
30073 var t = yyyy.redIAdd(yyyy);
30074 t = t.redIAdd(t);
30075 t = t.redIAdd(t);
30076 t = t.redIAdd(t);
30077 // U = (M + E)^2 - MM - EE - T
30078 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30079 // X3 = 4 * (X1 * EE - 4 * YY * U)
30080 var yyu4 = yy.redMul(u);
30081 yyu4 = yyu4.redIAdd(yyu4);
30082 yyu4 = yyu4.redIAdd(yyu4);
30083 var nx = this.x.redMul(ee).redISub(yyu4);
30084 nx = nx.redIAdd(nx);
30085 nx = nx.redIAdd(nx);
30086 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30087 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30088 ny = ny.redIAdd(ny);
30089 ny = ny.redIAdd(ny);
30090 ny = ny.redIAdd(ny);
30091 // Z3 = (Z1 + E)^2 - ZZ - EE
30092 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30093
30094 return this.curve.jpoint(nx, ny, nz);
30095};
30096
30097JPoint.prototype.mul = function mul(k, kbase) {
30098 k = new BN(k, kbase);
30099
30100 return this.curve._wnafMul(this, k);
30101};
30102
30103JPoint.prototype.eq = function eq(p) {
30104 if (p.type === 'affine')
30105 return this.eq(p.toJ());
30106
30107 if (this === p)
30108 return true;
30109
30110 // x1 * z2^2 == x2 * z1^2
30111 var z2 = this.z.redSqr();
30112 var pz2 = p.z.redSqr();
30113 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30114 return false;
30115
30116 // y1 * z2^3 == y2 * z1^3
30117 var z3 = z2.redMul(this.z);
30118 var pz3 = pz2.redMul(p.z);
30119 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30120};
30121
30122JPoint.prototype.eqXToP = function eqXToP(x) {
30123 var zs = this.z.redSqr();
30124 var rx = x.toRed(this.curve.red).redMul(zs);
30125 if (this.x.cmp(rx) === 0)
30126 return true;
30127
30128 var xc = x.clone();
30129 var t = this.curve.redN.redMul(zs);
30130 for (;;) {
30131 xc.iadd(this.curve.n);
30132 if (xc.cmp(this.curve.p) >= 0)
30133 return false;
30134
30135 rx.redIAdd(t);
30136 if (this.x.cmp(rx) === 0)
30137 return true;
30138 }
30139 return false;
30140};
30141
30142JPoint.prototype.inspect = function inspect() {
30143 if (this.isInfinity())
30144 return '<EC JPoint Infinity>';
30145 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30146 ' y: ' + this.y.toString(16, 2) +
30147 ' z: ' + this.z.toString(16, 2) + '>';
30148};
30149
30150JPoint.prototype.isInfinity = function isInfinity() {
30151 // XXX This code assumes that zero is always zero in red
30152 return this.z.cmpn(0) === 0;
30153};
30154
30155},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30156'use strict';
30157
30158var curves = exports;
30159
30160var hash = require('hash.js');
30161var elliptic = require('../elliptic');
30162
30163var assert = elliptic.utils.assert;
30164
30165function PresetCurve(options) {
30166 if (options.type === 'short')
30167 this.curve = new elliptic.curve.short(options);
30168 else if (options.type === 'edwards')
30169 this.curve = new elliptic.curve.edwards(options);
30170 else
30171 this.curve = new elliptic.curve.mont(options);
30172 this.g = this.curve.g;
30173 this.n = this.curve.n;
30174 this.hash = options.hash;
30175
30176 assert(this.g.validate(), 'Invalid curve');
30177 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30178}
30179curves.PresetCurve = PresetCurve;
30180
30181function defineCurve(name, options) {
30182 Object.defineProperty(curves, name, {
30183 configurable: true,
30184 enumerable: true,
30185 get: function() {
30186 var curve = new PresetCurve(options);
30187 Object.defineProperty(curves, name, {
30188 configurable: true,
30189 enumerable: true,
30190 value: curve
30191 });
30192 return curve;
30193 }
30194 });
30195}
30196
30197defineCurve('p192', {
30198 type: 'short',
30199 prime: 'p192',
30200 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
30201 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
30202 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
30203 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
30204 hash: hash.sha256,
30205 gRed: false,
30206 g: [
30207 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
30208 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
30209 ]
30210});
30211
30212defineCurve('p224', {
30213 type: 'short',
30214 prime: 'p224',
30215 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
30216 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
30217 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
30218 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
30219 hash: hash.sha256,
30220 gRed: false,
30221 g: [
30222 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
30223 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
30224 ]
30225});
30226
30227defineCurve('p256', {
30228 type: 'short',
30229 prime: null,
30230 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
30231 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
30232 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
30233 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
30234 hash: hash.sha256,
30235 gRed: false,
30236 g: [
30237 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
30238 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
30239 ]
30240});
30241
30242defineCurve('p384', {
30243 type: 'short',
30244 prime: null,
30245 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30246 'fffffffe ffffffff 00000000 00000000 ffffffff',
30247 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30248 'fffffffe ffffffff 00000000 00000000 fffffffc',
30249 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
30250 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
30251 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
30252 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
30253 hash: hash.sha384,
30254 gRed: false,
30255 g: [
30256 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
30257 '5502f25d bf55296c 3a545e38 72760ab7',
30258 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
30259 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
30260 ]
30261});
30262
30263defineCurve('p521', {
30264 type: 'short',
30265 prime: null,
30266 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30267 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30268 'ffffffff ffffffff ffffffff ffffffff ffffffff',
30269 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30270 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30271 'ffffffff ffffffff ffffffff ffffffff fffffffc',
30272 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
30273 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
30274 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
30275 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30276 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
30277 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
30278 hash: hash.sha512,
30279 gRed: false,
30280 g: [
30281 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
30282 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
30283 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
30284 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
30285 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
30286 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
30287 ]
30288});
30289
30290defineCurve('curve25519', {
30291 type: 'mont',
30292 prime: 'p25519',
30293 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30294 a: '76d06',
30295 b: '1',
30296 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30297 hash: hash.sha256,
30298 gRed: false,
30299 g: [
30300 '9'
30301 ]
30302});
30303
30304defineCurve('ed25519', {
30305 type: 'edwards',
30306 prime: 'p25519',
30307 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30308 a: '-1',
30309 c: '1',
30310 // -121665 * (121666^(-1)) (mod P)
30311 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
30312 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30313 hash: hash.sha256,
30314 gRed: false,
30315 g: [
30316 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
30317
30318 // 4/5
30319 '6666666666666666666666666666666666666666666666666666666666666658'
30320 ]
30321});
30322
30323var pre;
30324try {
30325 pre = require('./precomputed/secp256k1');
30326} catch (e) {
30327 pre = undefined;
30328}
30329
30330defineCurve('secp256k1', {
30331 type: 'short',
30332 prime: 'k256',
30333 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
30334 a: '0',
30335 b: '7',
30336 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
30337 h: '1',
30338 hash: hash.sha256,
30339
30340 // Precomputed endomorphism
30341 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
30342 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
30343 basis: [
30344 {
30345 a: '3086d221a7d46bcde86c90e49284eb15',
30346 b: '-e4437ed6010e88286f547fa90abfe4c3'
30347 },
30348 {
30349 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
30350 b: '3086d221a7d46bcde86c90e49284eb15'
30351 }
30352 ],
30353
30354 gRed: false,
30355 g: [
30356 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
30357 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
30358 pre
30359 ]
30360});
30361
30362},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
30363'use strict';
30364
30365var BN = require('bn.js');
30366var elliptic = require('../../elliptic');
30367var utils = elliptic.utils;
30368var assert = utils.assert;
30369
30370var KeyPair = require('./key');
30371var Signature = require('./signature');
30372
30373function EC(options) {
30374 if (!(this instanceof EC))
30375 return new EC(options);
30376
30377 // Shortcut `elliptic.ec(curve-name)`
30378 if (typeof options === 'string') {
30379 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
30380
30381 options = elliptic.curves[options];
30382 }
30383
30384 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
30385 if (options instanceof elliptic.curves.PresetCurve)
30386 options = { curve: options };
30387
30388 this.curve = options.curve.curve;
30389 this.n = this.curve.n;
30390 this.nh = this.n.ushrn(1);
30391 this.g = this.curve.g;
30392
30393 // Point on curve
30394 this.g = options.curve.g;
30395 this.g.precompute(options.curve.n.bitLength() + 1);
30396
30397 // Hash for function for DRBG
30398 this.hash = options.hash || options.curve.hash;
30399}
30400module.exports = EC;
30401
30402EC.prototype.keyPair = function keyPair(options) {
30403 return new KeyPair(this, options);
30404};
30405
30406EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
30407 return KeyPair.fromPrivate(this, priv, enc);
30408};
30409
30410EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
30411 return KeyPair.fromPublic(this, pub, enc);
30412};
30413
30414EC.prototype.genKeyPair = function genKeyPair(options) {
30415 if (!options)
30416 options = {};
30417
30418 // Instantiate Hmac_DRBG
30419 var drbg = new elliptic.hmacDRBG({
30420 hash: this.hash,
30421 pers: options.pers,
30422 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
30423 nonce: this.n.toArray()
30424 });
30425
30426 var bytes = this.n.byteLength();
30427 var ns2 = this.n.sub(new BN(2));
30428 do {
30429 var priv = new BN(drbg.generate(bytes));
30430 if (priv.cmp(ns2) > 0)
30431 continue;
30432
30433 priv.iaddn(1);
30434 return this.keyFromPrivate(priv);
30435 } while (true);
30436};
30437
30438EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
30439 var delta = msg.byteLength() * 8 - this.n.bitLength();
30440 if (delta > 0)
30441 msg = msg.ushrn(delta);
30442 if (!truncOnly && msg.cmp(this.n) >= 0)
30443 return msg.sub(this.n);
30444 else
30445 return msg;
30446};
30447
30448EC.prototype.sign = function sign(msg, key, enc, options) {
30449 if (typeof enc === 'object') {
30450 options = enc;
30451 enc = null;
30452 }
30453 if (!options)
30454 options = {};
30455
30456 key = this.keyFromPrivate(key, enc);
30457 msg = this._truncateToN(new BN(msg, 16));
30458
30459 // Zero-extend key to provide enough entropy
30460 var bytes = this.n.byteLength();
30461 var bkey = key.getPrivate().toArray('be', bytes);
30462
30463 // Zero-extend nonce to have the same byte size as N
30464 var nonce = msg.toArray('be', bytes);
30465
30466 // Instantiate Hmac_DRBG
30467 var drbg = new elliptic.hmacDRBG({
30468 hash: this.hash,
30469 entropy: bkey,
30470 nonce: nonce,
30471 pers: options.pers,
30472 persEnc: options.persEnc
30473 });
30474
30475 // Number of bytes to generate
30476 var ns1 = this.n.sub(new BN(1));
30477
30478 for (var iter = 0; true; iter++) {
30479 var k = options.k ?
30480 options.k(iter) :
30481 new BN(drbg.generate(this.n.byteLength()));
30482 k = this._truncateToN(k, true);
30483 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
30484 continue;
30485
30486 var kp = this.g.mul(k);
30487 if (kp.isInfinity())
30488 continue;
30489
30490 var kpX = kp.getX();
30491 var r = kpX.umod(this.n);
30492 if (r.cmpn(0) === 0)
30493 continue;
30494
30495 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
30496 s = s.umod(this.n);
30497 if (s.cmpn(0) === 0)
30498 continue;
30499
30500 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
30501 (kpX.cmp(r) !== 0 ? 2 : 0);
30502
30503 // Use complement of `s`, if it is > `n / 2`
30504 if (options.canonical && s.cmp(this.nh) > 0) {
30505 s = this.n.sub(s);
30506 recoveryParam ^= 1;
30507 }
30508
30509 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
30510 }
30511};
30512
30513EC.prototype.verify = function verify(msg, signature, key, enc) {
30514 msg = this._truncateToN(new BN(msg, 16));
30515 key = this.keyFromPublic(key, enc);
30516 signature = new Signature(signature, 'hex');
30517
30518 // Perform primitive values validation
30519 var r = signature.r;
30520 var s = signature.s;
30521 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
30522 return false;
30523 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
30524 return false;
30525
30526 // Validate signature
30527 var sinv = s.invm(this.n);
30528 var u1 = sinv.mul(msg).umod(this.n);
30529 var u2 = sinv.mul(r).umod(this.n);
30530
30531 if (!this.curve._maxwellTrick) {
30532 var p = this.g.mulAdd(u1, key.getPublic(), u2);
30533 if (p.isInfinity())
30534 return false;
30535
30536 return p.getX().umod(this.n).cmp(r) === 0;
30537 }
30538
30539 // NOTE: Greg Maxwell's trick, inspired by:
30540 // https://git.io/vad3K
30541
30542 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
30543 if (p.isInfinity())
30544 return false;
30545
30546 // Compare `p.x` of Jacobian point with `r`,
30547 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
30548 // inverse of `p.z^2`
30549 return p.eqXToP(r);
30550};
30551
30552EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
30553 assert((3 & j) === j, 'The recovery param is more than two bits');
30554 signature = new Signature(signature, enc);
30555
30556 var n = this.n;
30557 var e = new BN(msg);
30558 var r = signature.r;
30559 var s = signature.s;
30560
30561 // A set LSB signifies that the y-coordinate is odd
30562 var isYOdd = j & 1;
30563 var isSecondKey = j >> 1;
30564 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
30565 throw new Error('Unable to find sencond key candinate');
30566
30567 // 1.1. Let x = r + jn.
30568 if (isSecondKey)
30569 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
30570 else
30571 r = this.curve.pointFromX(r, isYOdd);
30572
30573 var rInv = signature.r.invm(n);
30574 var s1 = n.sub(e).mul(rInv).umod(n);
30575 var s2 = s.mul(rInv).umod(n);
30576
30577 // 1.6.1 Compute Q = r^-1 (sR - eG)
30578 // Q = r^-1 (sR + -eG)
30579 return this.g.mulAdd(s1, r, s2);
30580};
30581
30582EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
30583 signature = new Signature(signature, enc);
30584 if (signature.recoveryParam !== null)
30585 return signature.recoveryParam;
30586
30587 for (var i = 0; i < 4; i++) {
30588 var Qprime;
30589 try {
30590 Qprime = this.recoverPubKey(e, signature, i);
30591 } catch (e) {
30592 continue;
30593 }
30594
30595 if (Qprime.eq(Q))
30596 return i;
30597 }
30598 throw new Error('Unable to find valid recovery factor');
30599};
30600
30601},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
30602'use strict';
30603
30604var BN = require('bn.js');
30605var elliptic = require('../../elliptic');
30606var utils = elliptic.utils;
30607var assert = utils.assert;
30608
30609function KeyPair(ec, options) {
30610 this.ec = ec;
30611 this.priv = null;
30612 this.pub = null;
30613
30614 // KeyPair(ec, { priv: ..., pub: ... })
30615 if (options.priv)
30616 this._importPrivate(options.priv, options.privEnc);
30617 if (options.pub)
30618 this._importPublic(options.pub, options.pubEnc);
30619}
30620module.exports = KeyPair;
30621
30622KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
30623 if (pub instanceof KeyPair)
30624 return pub;
30625
30626 return new KeyPair(ec, {
30627 pub: pub,
30628 pubEnc: enc
30629 });
30630};
30631
30632KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
30633 if (priv instanceof KeyPair)
30634 return priv;
30635
30636 return new KeyPair(ec, {
30637 priv: priv,
30638 privEnc: enc
30639 });
30640};
30641
30642KeyPair.prototype.validate = function validate() {
30643 var pub = this.getPublic();
30644
30645 if (pub.isInfinity())
30646 return { result: false, reason: 'Invalid public key' };
30647 if (!pub.validate())
30648 return { result: false, reason: 'Public key is not a point' };
30649 if (!pub.mul(this.ec.curve.n).isInfinity())
30650 return { result: false, reason: 'Public key * N != O' };
30651
30652 return { result: true, reason: null };
30653};
30654
30655KeyPair.prototype.getPublic = function getPublic(compact, enc) {
30656 // compact is optional argument
30657 if (typeof compact === 'string') {
30658 enc = compact;
30659 compact = null;
30660 }
30661
30662 if (!this.pub)
30663 this.pub = this.ec.g.mul(this.priv);
30664
30665 if (!enc)
30666 return this.pub;
30667
30668 return this.pub.encode(enc, compact);
30669};
30670
30671KeyPair.prototype.getPrivate = function getPrivate(enc) {
30672 if (enc === 'hex')
30673 return this.priv.toString(16, 2);
30674 else
30675 return this.priv;
30676};
30677
30678KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
30679 this.priv = new BN(key, enc || 16);
30680
30681 // Ensure that the priv won't be bigger than n, otherwise we may fail
30682 // in fixed multiplication method
30683 this.priv = this.priv.umod(this.ec.curve.n);
30684};
30685
30686KeyPair.prototype._importPublic = function _importPublic(key, enc) {
30687 if (key.x || key.y) {
30688 // Montgomery points only have an `x` coordinate.
30689 // Weierstrass/Edwards points on the other hand have both `x` and
30690 // `y` coordinates.
30691 if (this.ec.curve.type === 'mont') {
30692 assert(key.x, 'Need x coordinate');
30693 } else if (this.ec.curve.type === 'short' ||
30694 this.ec.curve.type === 'edwards') {
30695 assert(key.x && key.y, 'Need both x and y coordinate');
30696 }
30697 this.pub = this.ec.curve.point(key.x, key.y);
30698 return;
30699 }
30700 this.pub = this.ec.curve.decodePoint(key, enc);
30701};
30702
30703// ECDH
30704KeyPair.prototype.derive = function derive(pub) {
30705 return pub.mul(this.priv).getX();
30706};
30707
30708// ECDSA
30709KeyPair.prototype.sign = function sign(msg, enc, options) {
30710 return this.ec.sign(msg, this, enc, options);
30711};
30712
30713KeyPair.prototype.verify = function verify(msg, signature) {
30714 return this.ec.verify(msg, signature, this);
30715};
30716
30717KeyPair.prototype.inspect = function inspect() {
30718 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
30719 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
30720};
30721
30722},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
30723'use strict';
30724
30725var BN = require('bn.js');
30726
30727var elliptic = require('../../elliptic');
30728var utils = elliptic.utils;
30729var assert = utils.assert;
30730
30731function Signature(options, enc) {
30732 if (options instanceof Signature)
30733 return options;
30734
30735 if (this._importDER(options, enc))
30736 return;
30737
30738 assert(options.r && options.s, 'Signature without r or s');
30739 this.r = new BN(options.r, 16);
30740 this.s = new BN(options.s, 16);
30741 if (options.recoveryParam === undefined)
30742 this.recoveryParam = null;
30743 else
30744 this.recoveryParam = options.recoveryParam;
30745}
30746module.exports = Signature;
30747
30748function Position() {
30749 this.place = 0;
30750}
30751
30752function getLength(buf, p) {
30753 var initial = buf[p.place++];
30754 if (!(initial & 0x80)) {
30755 return initial;
30756 }
30757 var octetLen = initial & 0xf;
30758 var val = 0;
30759 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
30760 val <<= 8;
30761 val |= buf[off];
30762 }
30763 p.place = off;
30764 return val;
30765}
30766
30767function rmPadding(buf) {
30768 var i = 0;
30769 var len = buf.length - 1;
30770 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
30771 i++;
30772 }
30773 if (i === 0) {
30774 return buf;
30775 }
30776 return buf.slice(i);
30777}
30778
30779Signature.prototype._importDER = function _importDER(data, enc) {
30780 data = utils.toArray(data, enc);
30781 var p = new Position();
30782 if (data[p.place++] !== 0x30) {
30783 return false;
30784 }
30785 var len = getLength(data, p);
30786 if ((len + p.place) !== data.length) {
30787 return false;
30788 }
30789 if (data[p.place++] !== 0x02) {
30790 return false;
30791 }
30792 var rlen = getLength(data, p);
30793 var r = data.slice(p.place, rlen + p.place);
30794 p.place += rlen;
30795 if (data[p.place++] !== 0x02) {
30796 return false;
30797 }
30798 var slen = getLength(data, p);
30799 if (data.length !== slen + p.place) {
30800 return false;
30801 }
30802 var s = data.slice(p.place, slen + p.place);
30803 if (r[0] === 0 && (r[1] & 0x80)) {
30804 r = r.slice(1);
30805 }
30806 if (s[0] === 0 && (s[1] & 0x80)) {
30807 s = s.slice(1);
30808 }
30809
30810 this.r = new BN(r);
30811 this.s = new BN(s);
30812 this.recoveryParam = null;
30813
30814 return true;
30815};
30816
30817function constructLength(arr, len) {
30818 if (len < 0x80) {
30819 arr.push(len);
30820 return;
30821 }
30822 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
30823 arr.push(octets | 0x80);
30824 while (--octets) {
30825 arr.push((len >>> (octets << 3)) & 0xff);
30826 }
30827 arr.push(len);
30828}
30829
30830Signature.prototype.toDER = function toDER(enc) {
30831 var r = this.r.toArray();
30832 var s = this.s.toArray();
30833
30834 // Pad values
30835 if (r[0] & 0x80)
30836 r = [ 0 ].concat(r);
30837 // Pad values
30838 if (s[0] & 0x80)
30839 s = [ 0 ].concat(s);
30840
30841 r = rmPadding(r);
30842 s = rmPadding(s);
30843
30844 while (!s[0] && !(s[1] & 0x80)) {
30845 s = s.slice(1);
30846 }
30847 var arr = [ 0x02 ];
30848 constructLength(arr, r.length);
30849 arr = arr.concat(r);
30850 arr.push(0x02);
30851 constructLength(arr, s.length);
30852 var backHalf = arr.concat(s);
30853 var res = [ 0x30 ];
30854 constructLength(res, backHalf.length);
30855 res = res.concat(backHalf);
30856 return utils.encode(res, enc);
30857};
30858
30859},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
30860'use strict';
30861
30862var hash = require('hash.js');
30863var elliptic = require('../../elliptic');
30864var utils = elliptic.utils;
30865var assert = utils.assert;
30866var parseBytes = utils.parseBytes;
30867var KeyPair = require('./key');
30868var Signature = require('./signature');
30869
30870function EDDSA(curve) {
30871 assert(curve === 'ed25519', 'only tested with ed25519 so far');
30872
30873 if (!(this instanceof EDDSA))
30874 return new EDDSA(curve);
30875
30876 var curve = elliptic.curves[curve].curve;
30877 this.curve = curve;
30878 this.g = curve.g;
30879 this.g.precompute(curve.n.bitLength() + 1);
30880
30881 this.pointClass = curve.point().constructor;
30882 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
30883 this.hash = hash.sha512;
30884}
30885
30886module.exports = EDDSA;
30887
30888/**
30889* @param {Array|String} message - message bytes
30890* @param {Array|String|KeyPair} secret - secret bytes or a keypair
30891* @returns {Signature} - signature
30892*/
30893EDDSA.prototype.sign = function sign(message, secret) {
30894 message = parseBytes(message);
30895 var key = this.keyFromSecret(secret);
30896 var r = this.hashInt(key.messagePrefix(), message);
30897 var R = this.g.mul(r);
30898 var Rencoded = this.encodePoint(R);
30899 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
30900 .mul(key.priv());
30901 var S = r.add(s_).umod(this.curve.n);
30902 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
30903};
30904
30905/**
30906* @param {Array} message - message bytes
30907* @param {Array|String|Signature} sig - sig bytes
30908* @param {Array|String|Point|KeyPair} pub - public key
30909* @returns {Boolean} - true if public key matches sig of message
30910*/
30911EDDSA.prototype.verify = function verify(message, sig, pub) {
30912 message = parseBytes(message);
30913 sig = this.makeSignature(sig);
30914 var key = this.keyFromPublic(pub);
30915 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
30916 var SG = this.g.mul(sig.S());
30917 var RplusAh = sig.R().add(key.pub().mul(h));
30918 return RplusAh.eq(SG);
30919};
30920
30921EDDSA.prototype.hashInt = function hashInt() {
30922 var hash = this.hash();
30923 for (var i = 0; i < arguments.length; i++)
30924 hash.update(arguments[i]);
30925 return utils.intFromLE(hash.digest()).umod(this.curve.n);
30926};
30927
30928EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
30929 return KeyPair.fromPublic(this, pub);
30930};
30931
30932EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
30933 return KeyPair.fromSecret(this, secret);
30934};
30935
30936EDDSA.prototype.makeSignature = function makeSignature(sig) {
30937 if (sig instanceof Signature)
30938 return sig;
30939 return new Signature(this, sig);
30940};
30941
30942/**
30943* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
30944*
30945* EDDSA defines methods for encoding and decoding points and integers. These are
30946* helper convenience methods, that pass along to utility functions implied
30947* parameters.
30948*
30949*/
30950EDDSA.prototype.encodePoint = function encodePoint(point) {
30951 var enc = point.getY().toArray('le', this.encodingLength);
30952 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
30953 return enc;
30954};
30955
30956EDDSA.prototype.decodePoint = function decodePoint(bytes) {
30957 bytes = utils.parseBytes(bytes);
30958
30959 var lastIx = bytes.length - 1;
30960 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
30961 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
30962
30963 var y = utils.intFromLE(normed);
30964 return this.curve.pointFromY(y, xIsOdd);
30965};
30966
30967EDDSA.prototype.encodeInt = function encodeInt(num) {
30968 return num.toArray('le', this.encodingLength);
30969};
30970
30971EDDSA.prototype.decodeInt = function decodeInt(bytes) {
30972 return utils.intFromLE(bytes);
30973};
30974
30975EDDSA.prototype.isPoint = function isPoint(val) {
30976 return val instanceof this.pointClass;
30977};
30978
30979},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
30980'use strict';
30981
30982var elliptic = require('../../elliptic');
30983var utils = elliptic.utils;
30984var assert = utils.assert;
30985var parseBytes = utils.parseBytes;
30986var cachedProperty = utils.cachedProperty;
30987
30988/**
30989* @param {EDDSA} eddsa - instance
30990* @param {Object} params - public/private key parameters
30991*
30992* @param {Array<Byte>} [params.secret] - secret seed bytes
30993* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
30994* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
30995*
30996*/
30997function KeyPair(eddsa, params) {
30998 this.eddsa = eddsa;
30999 this._secret = parseBytes(params.secret);
31000 if (eddsa.isPoint(params.pub))
31001 this._pub = params.pub;
31002 else
31003 this._pubBytes = parseBytes(params.pub);
31004}
31005
31006KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31007 if (pub instanceof KeyPair)
31008 return pub;
31009 return new KeyPair(eddsa, { pub: pub });
31010};
31011
31012KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31013 if (secret instanceof KeyPair)
31014 return secret;
31015 return new KeyPair(eddsa, { secret: secret });
31016};
31017
31018KeyPair.prototype.secret = function secret() {
31019 return this._secret;
31020};
31021
31022cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31023 return this.eddsa.encodePoint(this.pub());
31024});
31025
31026cachedProperty(KeyPair, 'pub', function pub() {
31027 if (this._pubBytes)
31028 return this.eddsa.decodePoint(this._pubBytes);
31029 return this.eddsa.g.mul(this.priv());
31030});
31031
31032cachedProperty(KeyPair, 'privBytes', function privBytes() {
31033 var eddsa = this.eddsa;
31034 var hash = this.hash();
31035 var lastIx = eddsa.encodingLength - 1;
31036
31037 var a = hash.slice(0, eddsa.encodingLength);
31038 a[0] &= 248;
31039 a[lastIx] &= 127;
31040 a[lastIx] |= 64;
31041
31042 return a;
31043});
31044
31045cachedProperty(KeyPair, 'priv', function priv() {
31046 return this.eddsa.decodeInt(this.privBytes());
31047});
31048
31049cachedProperty(KeyPair, 'hash', function hash() {
31050 return this.eddsa.hash().update(this.secret()).digest();
31051});
31052
31053cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31054 return this.hash().slice(this.eddsa.encodingLength);
31055});
31056
31057KeyPair.prototype.sign = function sign(message) {
31058 assert(this._secret, 'KeyPair can only verify');
31059 return this.eddsa.sign(message, this);
31060};
31061
31062KeyPair.prototype.verify = function verify(message, sig) {
31063 return this.eddsa.verify(message, sig, this);
31064};
31065
31066KeyPair.prototype.getSecret = function getSecret(enc) {
31067 assert(this._secret, 'KeyPair is public only');
31068 return utils.encode(this.secret(), enc);
31069};
31070
31071KeyPair.prototype.getPublic = function getPublic(enc) {
31072 return utils.encode(this.pubBytes(), enc);
31073};
31074
31075module.exports = KeyPair;
31076
31077},{"../../elliptic":39}],51:[function(require,module,exports){
31078'use strict';
31079
31080var BN = require('bn.js');
31081var elliptic = require('../../elliptic');
31082var utils = elliptic.utils;
31083var assert = utils.assert;
31084var cachedProperty = utils.cachedProperty;
31085var parseBytes = utils.parseBytes;
31086
31087/**
31088* @param {EDDSA} eddsa - eddsa instance
31089* @param {Array<Bytes>|Object} sig -
31090* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31091* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31092* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31093* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31094*/
31095function Signature(eddsa, sig) {
31096 this.eddsa = eddsa;
31097
31098 if (typeof sig !== 'object')
31099 sig = parseBytes(sig);
31100
31101 if (Array.isArray(sig)) {
31102 sig = {
31103 R: sig.slice(0, eddsa.encodingLength),
31104 S: sig.slice(eddsa.encodingLength)
31105 };
31106 }
31107
31108 assert(sig.R && sig.S, 'Signature without R or S');
31109
31110 if (eddsa.isPoint(sig.R))
31111 this._R = sig.R;
31112 if (sig.S instanceof BN)
31113 this._S = sig.S;
31114
31115 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31116 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
31117}
31118
31119cachedProperty(Signature, 'S', function S() {
31120 return this.eddsa.decodeInt(this.Sencoded());
31121});
31122
31123cachedProperty(Signature, 'R', function R() {
31124 return this.eddsa.decodePoint(this.Rencoded());
31125});
31126
31127cachedProperty(Signature, 'Rencoded', function Rencoded() {
31128 return this.eddsa.encodePoint(this.R());
31129});
31130
31131cachedProperty(Signature, 'Sencoded', function Sencoded() {
31132 return this.eddsa.encodeInt(this.S());
31133});
31134
31135Signature.prototype.toBytes = function toBytes() {
31136 return this.Rencoded().concat(this.Sencoded());
31137};
31138
31139Signature.prototype.toHex = function toHex() {
31140 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31141};
31142
31143module.exports = Signature;
31144
31145},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31146'use strict';
31147
31148var hash = require('hash.js');
31149var elliptic = require('../elliptic');
31150var utils = elliptic.utils;
31151var assert = utils.assert;
31152
31153function HmacDRBG(options) {
31154 if (!(this instanceof HmacDRBG))
31155 return new HmacDRBG(options);
31156 this.hash = options.hash;
31157 this.predResist = !!options.predResist;
31158
31159 this.outLen = this.hash.outSize;
31160 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
31161
31162 this.reseed = null;
31163 this.reseedInterval = null;
31164 this.K = null;
31165 this.V = null;
31166
31167 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31168 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31169 var pers = utils.toArray(options.pers, options.persEnc);
31170 assert(entropy.length >= (this.minEntropy / 8),
31171 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31172 this._init(entropy, nonce, pers);
31173}
31174module.exports = HmacDRBG;
31175
31176HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31177 var seed = entropy.concat(nonce).concat(pers);
31178
31179 this.K = new Array(this.outLen / 8);
31180 this.V = new Array(this.outLen / 8);
31181 for (var i = 0; i < this.V.length; i++) {
31182 this.K[i] = 0x00;
31183 this.V[i] = 0x01;
31184 }
31185
31186 this._update(seed);
31187 this.reseed = 1;
31188 this.reseedInterval = 0x1000000000000; // 2^48
31189};
31190
31191HmacDRBG.prototype._hmac = function hmac() {
31192 return new hash.hmac(this.hash, this.K);
31193};
31194
31195HmacDRBG.prototype._update = function update(seed) {
31196 var kmac = this._hmac()
31197 .update(this.V)
31198 .update([ 0x00 ]);
31199 if (seed)
31200 kmac = kmac.update(seed);
31201 this.K = kmac.digest();
31202 this.V = this._hmac().update(this.V).digest();
31203 if (!seed)
31204 return;
31205
31206 this.K = this._hmac()
31207 .update(this.V)
31208 .update([ 0x01 ])
31209 .update(seed)
31210 .digest();
31211 this.V = this._hmac().update(this.V).digest();
31212};
31213
31214HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
31215 // Optional entropy enc
31216 if (typeof entropyEnc !== 'string') {
31217 addEnc = add;
31218 add = entropyEnc;
31219 entropyEnc = null;
31220 }
31221
31222 entropy = utils.toBuffer(entropy, entropyEnc);
31223 add = utils.toBuffer(add, addEnc);
31224
31225 assert(entropy.length >= (this.minEntropy / 8),
31226 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31227
31228 this._update(entropy.concat(add || []));
31229 this.reseed = 1;
31230};
31231
31232HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
31233 if (this.reseed > this.reseedInterval)
31234 throw new Error('Reseed is required');
31235
31236 // Optional encoding
31237 if (typeof enc !== 'string') {
31238 addEnc = add;
31239 add = enc;
31240 enc = null;
31241 }
31242
31243 // Optional additional data
31244 if (add) {
31245 add = utils.toArray(add, addEnc);
31246 this._update(add);
31247 }
31248
31249 var temp = [];
31250 while (temp.length < len) {
31251 this.V = this._hmac().update(this.V).digest();
31252 temp = temp.concat(this.V);
31253 }
31254
31255 var res = temp.slice(0, len);
31256 this._update(add);
31257 this.reseed++;
31258 return utils.encode(res, enc);
31259};
31260
31261},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
31262module.exports = {
31263 doubles: {
31264 step: 4,
31265 points: [
31266 [
31267 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
31268 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
31269 ],
31270 [
31271 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
31272 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
31273 ],
31274 [
31275 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
31276 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
31277 ],
31278 [
31279 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
31280 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
31281 ],
31282 [
31283 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
31284 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
31285 ],
31286 [
31287 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
31288 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
31289 ],
31290 [
31291 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
31292 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
31293 ],
31294 [
31295 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
31296 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
31297 ],
31298 [
31299 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
31300 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
31301 ],
31302 [
31303 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
31304 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
31305 ],
31306 [
31307 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
31308 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
31309 ],
31310 [
31311 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
31312 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
31313 ],
31314 [
31315 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
31316 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
31317 ],
31318 [
31319 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
31320 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
31321 ],
31322 [
31323 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
31324 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
31325 ],
31326 [
31327 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
31328 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
31329 ],
31330 [
31331 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
31332 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
31333 ],
31334 [
31335 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
31336 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
31337 ],
31338 [
31339 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
31340 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
31341 ],
31342 [
31343 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
31344 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
31345 ],
31346 [
31347 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
31348 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
31349 ],
31350 [
31351 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
31352 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
31353 ],
31354 [
31355 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
31356 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
31357 ],
31358 [
31359 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
31360 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
31361 ],
31362 [
31363 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
31364 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
31365 ],
31366 [
31367 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
31368 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
31369 ],
31370 [
31371 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
31372 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
31373 ],
31374 [
31375 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
31376 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
31377 ],
31378 [
31379 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
31380 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
31381 ],
31382 [
31383 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
31384 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
31385 ],
31386 [
31387 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
31388 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
31389 ],
31390 [
31391 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
31392 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
31393 ],
31394 [
31395 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
31396 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
31397 ],
31398 [
31399 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
31400 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
31401 ],
31402 [
31403 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
31404 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
31405 ],
31406 [
31407 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
31408 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
31409 ],
31410 [
31411 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
31412 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
31413 ],
31414 [
31415 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
31416 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
31417 ],
31418 [
31419 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
31420 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
31421 ],
31422 [
31423 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
31424 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
31425 ],
31426 [
31427 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
31428 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
31429 ],
31430 [
31431 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
31432 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
31433 ],
31434 [
31435 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
31436 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
31437 ],
31438 [
31439 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
31440 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
31441 ],
31442 [
31443 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
31444 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
31445 ],
31446 [
31447 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
31448 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
31449 ],
31450 [
31451 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
31452 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
31453 ],
31454 [
31455 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
31456 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
31457 ],
31458 [
31459 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
31460 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
31461 ],
31462 [
31463 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
31464 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
31465 ],
31466 [
31467 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
31468 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
31469 ],
31470 [
31471 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
31472 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
31473 ],
31474 [
31475 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
31476 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
31477 ],
31478 [
31479 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
31480 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
31481 ],
31482 [
31483 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
31484 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
31485 ],
31486 [
31487 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
31488 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
31489 ],
31490 [
31491 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
31492 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
31493 ],
31494 [
31495 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
31496 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
31497 ],
31498 [
31499 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
31500 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
31501 ],
31502 [
31503 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
31504 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
31505 ],
31506 [
31507 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
31508 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
31509 ],
31510 [
31511 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
31512 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
31513 ],
31514 [
31515 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
31516 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
31517 ],
31518 [
31519 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
31520 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
31521 ],
31522 [
31523 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
31524 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
31525 ]
31526 ]
31527 },
31528 naf: {
31529 wnd: 7,
31530 points: [
31531 [
31532 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
31533 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
31534 ],
31535 [
31536 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
31537 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
31538 ],
31539 [
31540 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
31541 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
31542 ],
31543 [
31544 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
31545 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
31546 ],
31547 [
31548 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
31549 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
31550 ],
31551 [
31552 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
31553 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
31554 ],
31555 [
31556 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
31557 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
31558 ],
31559 [
31560 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
31561 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
31562 ],
31563 [
31564 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
31565 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
31566 ],
31567 [
31568 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
31569 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
31570 ],
31571 [
31572 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
31573 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
31574 ],
31575 [
31576 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
31577 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
31578 ],
31579 [
31580 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
31581 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
31582 ],
31583 [
31584 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
31585 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
31586 ],
31587 [
31588 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
31589 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
31590 ],
31591 [
31592 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
31593 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
31594 ],
31595 [
31596 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
31597 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
31598 ],
31599 [
31600 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
31601 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
31602 ],
31603 [
31604 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
31605 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
31606 ],
31607 [
31608 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
31609 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
31610 ],
31611 [
31612 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
31613 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
31614 ],
31615 [
31616 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
31617 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
31618 ],
31619 [
31620 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
31621 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
31622 ],
31623 [
31624 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
31625 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
31626 ],
31627 [
31628 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
31629 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
31630 ],
31631 [
31632 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
31633 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
31634 ],
31635 [
31636 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
31637 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
31638 ],
31639 [
31640 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
31641 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
31642 ],
31643 [
31644 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
31645 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
31646 ],
31647 [
31648 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
31649 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
31650 ],
31651 [
31652 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
31653 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
31654 ],
31655 [
31656 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
31657 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
31658 ],
31659 [
31660 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
31661 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
31662 ],
31663 [
31664 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
31665 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
31666 ],
31667 [
31668 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
31669 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
31670 ],
31671 [
31672 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
31673 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
31674 ],
31675 [
31676 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
31677 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
31678 ],
31679 [
31680 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
31681 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
31682 ],
31683 [
31684 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
31685 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
31686 ],
31687 [
31688 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
31689 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
31690 ],
31691 [
31692 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
31693 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
31694 ],
31695 [
31696 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
31697 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
31698 ],
31699 [
31700 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
31701 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
31702 ],
31703 [
31704 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
31705 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
31706 ],
31707 [
31708 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
31709 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
31710 ],
31711 [
31712 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
31713 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
31714 ],
31715 [
31716 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
31717 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
31718 ],
31719 [
31720 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
31721 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
31722 ],
31723 [
31724 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
31725 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
31726 ],
31727 [
31728 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
31729 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
31730 ],
31731 [
31732 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
31733 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
31734 ],
31735 [
31736 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
31737 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
31738 ],
31739 [
31740 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
31741 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
31742 ],
31743 [
31744 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
31745 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
31746 ],
31747 [
31748 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
31749 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
31750 ],
31751 [
31752 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
31753 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
31754 ],
31755 [
31756 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
31757 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
31758 ],
31759 [
31760 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
31761 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
31762 ],
31763 [
31764 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
31765 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
31766 ],
31767 [
31768 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
31769 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
31770 ],
31771 [
31772 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
31773 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
31774 ],
31775 [
31776 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
31777 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
31778 ],
31779 [
31780 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
31781 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
31782 ],
31783 [
31784 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
31785 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
31786 ],
31787 [
31788 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
31789 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
31790 ],
31791 [
31792 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
31793 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
31794 ],
31795 [
31796 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
31797 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
31798 ],
31799 [
31800 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
31801 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
31802 ],
31803 [
31804 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
31805 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
31806 ],
31807 [
31808 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
31809 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
31810 ],
31811 [
31812 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
31813 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
31814 ],
31815 [
31816 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
31817 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
31818 ],
31819 [
31820 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
31821 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
31822 ],
31823 [
31824 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
31825 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
31826 ],
31827 [
31828 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
31829 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
31830 ],
31831 [
31832 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
31833 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
31834 ],
31835 [
31836 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
31837 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
31838 ],
31839 [
31840 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
31841 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
31842 ],
31843 [
31844 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
31845 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
31846 ],
31847 [
31848 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
31849 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
31850 ],
31851 [
31852 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
31853 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
31854 ],
31855 [
31856 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
31857 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
31858 ],
31859 [
31860 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
31861 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
31862 ],
31863 [
31864 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
31865 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
31866 ],
31867 [
31868 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
31869 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
31870 ],
31871 [
31872 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
31873 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
31874 ],
31875 [
31876 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
31877 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
31878 ],
31879 [
31880 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
31881 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
31882 ],
31883 [
31884 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
31885 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
31886 ],
31887 [
31888 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
31889 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
31890 ],
31891 [
31892 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
31893 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
31894 ],
31895 [
31896 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
31897 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
31898 ],
31899 [
31900 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
31901 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
31902 ],
31903 [
31904 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
31905 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
31906 ],
31907 [
31908 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
31909 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
31910 ],
31911 [
31912 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
31913 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
31914 ],
31915 [
31916 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
31917 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
31918 ],
31919 [
31920 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
31921 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
31922 ],
31923 [
31924 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
31925 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
31926 ],
31927 [
31928 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
31929 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
31930 ],
31931 [
31932 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
31933 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
31934 ],
31935 [
31936 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
31937 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
31938 ],
31939 [
31940 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
31941 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
31942 ],
31943 [
31944 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
31945 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
31946 ],
31947 [
31948 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
31949 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
31950 ],
31951 [
31952 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
31953 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
31954 ],
31955 [
31956 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
31957 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
31958 ],
31959 [
31960 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
31961 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
31962 ],
31963 [
31964 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
31965 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
31966 ],
31967 [
31968 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
31969 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
31970 ],
31971 [
31972 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
31973 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
31974 ],
31975 [
31976 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
31977 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
31978 ],
31979 [
31980 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
31981 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
31982 ],
31983 [
31984 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
31985 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
31986 ],
31987 [
31988 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
31989 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
31990 ],
31991 [
31992 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
31993 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
31994 ],
31995 [
31996 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
31997 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
31998 ],
31999 [
32000 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32001 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32002 ],
32003 [
32004 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32005 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32006 ],
32007 [
32008 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32009 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32010 ],
32011 [
32012 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32013 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32014 ],
32015 [
32016 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32017 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32018 ],
32019 [
32020 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32021 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32022 ],
32023 [
32024 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32025 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32026 ],
32027 [
32028 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32029 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32030 ],
32031 [
32032 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32033 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32034 ],
32035 [
32036 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32037 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32038 ]
32039 ]
32040 }
32041};
32042
32043},{}],54:[function(require,module,exports){
32044'use strict';
32045
32046var utils = exports;
32047var BN = require('bn.js');
32048
32049utils.assert = function assert(val, msg) {
32050 if (!val)
32051 throw new Error(msg || 'Assertion failed');
32052};
32053
32054function toArray(msg, enc) {
32055 if (Array.isArray(msg))
32056 return msg.slice();
32057 if (!msg)
32058 return [];
32059 var res = [];
32060 if (typeof msg !== 'string') {
32061 for (var i = 0; i < msg.length; i++)
32062 res[i] = msg[i] | 0;
32063 return res;
32064 }
32065 if (!enc) {
32066 for (var i = 0; i < msg.length; i++) {
32067 var c = msg.charCodeAt(i);
32068 var hi = c >> 8;
32069 var lo = c & 0xff;
32070 if (hi)
32071 res.push(hi, lo);
32072 else
32073 res.push(lo);
32074 }
32075 } else if (enc === 'hex') {
32076 msg = msg.replace(/[^a-z0-9]+/ig, '');
32077 if (msg.length % 2 !== 0)
32078 msg = '0' + msg;
32079 for (var i = 0; i < msg.length; i += 2)
32080 res.push(parseInt(msg[i] + msg[i + 1], 16));
32081 }
32082 return res;
32083}
32084utils.toArray = toArray;
32085
32086function zero2(word) {
32087 if (word.length === 1)
32088 return '0' + word;
32089 else
32090 return word;
32091}
32092utils.zero2 = zero2;
32093
32094function toHex(msg) {
32095 var res = '';
32096 for (var i = 0; i < msg.length; i++)
32097 res += zero2(msg[i].toString(16));
32098 return res;
32099}
32100utils.toHex = toHex;
32101
32102utils.encode = function encode(arr, enc) {
32103 if (enc === 'hex')
32104 return toHex(arr);
32105 else
32106 return arr;
32107};
32108
32109// Represent num in a w-NAF form
32110function getNAF(num, w) {
32111 var naf = [];
32112 var ws = 1 << (w + 1);
32113 var k = num.clone();
32114 while (k.cmpn(1) >= 0) {
32115 var z;
32116 if (k.isOdd()) {
32117 var mod = k.andln(ws - 1);
32118 if (mod > (ws >> 1) - 1)
32119 z = (ws >> 1) - mod;
32120 else
32121 z = mod;
32122 k.isubn(z);
32123 } else {
32124 z = 0;
32125 }
32126 naf.push(z);
32127
32128 // Optimization, shift by word if possible
32129 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32130 for (var i = 1; i < shift; i++)
32131 naf.push(0);
32132 k.iushrn(shift);
32133 }
32134
32135 return naf;
32136}
32137utils.getNAF = getNAF;
32138
32139// Represent k1, k2 in a Joint Sparse Form
32140function getJSF(k1, k2) {
32141 var jsf = [
32142 [],
32143 []
32144 ];
32145
32146 k1 = k1.clone();
32147 k2 = k2.clone();
32148 var d1 = 0;
32149 var d2 = 0;
32150 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32151
32152 // First phase
32153 var m14 = (k1.andln(3) + d1) & 3;
32154 var m24 = (k2.andln(3) + d2) & 3;
32155 if (m14 === 3)
32156 m14 = -1;
32157 if (m24 === 3)
32158 m24 = -1;
32159 var u1;
32160 if ((m14 & 1) === 0) {
32161 u1 = 0;
32162 } else {
32163 var m8 = (k1.andln(7) + d1) & 7;
32164 if ((m8 === 3 || m8 === 5) && m24 === 2)
32165 u1 = -m14;
32166 else
32167 u1 = m14;
32168 }
32169 jsf[0].push(u1);
32170
32171 var u2;
32172 if ((m24 & 1) === 0) {
32173 u2 = 0;
32174 } else {
32175 var m8 = (k2.andln(7) + d2) & 7;
32176 if ((m8 === 3 || m8 === 5) && m14 === 2)
32177 u2 = -m24;
32178 else
32179 u2 = m24;
32180 }
32181 jsf[1].push(u2);
32182
32183 // Second phase
32184 if (2 * d1 === u1 + 1)
32185 d1 = 1 - d1;
32186 if (2 * d2 === u2 + 1)
32187 d2 = 1 - d2;
32188 k1.iushrn(1);
32189 k2.iushrn(1);
32190 }
32191
32192 return jsf;
32193}
32194utils.getJSF = getJSF;
32195
32196function cachedProperty(obj, name, computer) {
32197 var key = '_' + name;
32198 obj.prototype[name] = function cachedProperty() {
32199 return this[key] !== undefined ? this[key] :
32200 this[key] = computer.call(this);
32201 };
32202}
32203utils.cachedProperty = cachedProperty;
32204
32205function parseBytes(bytes) {
32206 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
32207 bytes;
32208}
32209utils.parseBytes = parseBytes;
32210
32211function intFromLE(bytes) {
32212 return new BN(bytes, 'hex', 'le');
32213}
32214utils.intFromLE = intFromLE;
32215
32216
32217},{"bn.js":33}],55:[function(require,module,exports){
32218module.exports={
32219 "_args": [
32220 [
32221 {
32222 "raw": "elliptic@^6.2.3",
32223 "scope": null,
32224 "escapedName": "elliptic",
32225 "name": "elliptic",
32226 "rawSpec": "^6.2.3",
32227 "spec": ">=6.2.3 <7.0.0",
32228 "type": "range"
32229 },
32230 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
32231 ]
32232 ],
32233 "_from": "elliptic@>=6.2.3 <7.0.0",
32234 "_id": "elliptic@6.3.3",
32235 "_inCache": true,
32236 "_location": "/elliptic",
32237 "_nodeVersion": "7.0.0",
32238 "_npmOperationalInternal": {
32239 "host": "packages-18-east.internal.npmjs.com",
32240 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
32241 },
32242 "_npmUser": {
32243 "name": "indutny",
32244 "email": "fedor@indutny.com"
32245 },
32246 "_npmVersion": "3.10.8",
32247 "_phantomChildren": {},
32248 "_requested": {
32249 "raw": "elliptic@^6.2.3",
32250 "scope": null,
32251 "escapedName": "elliptic",
32252 "name": "elliptic",
32253 "rawSpec": "^6.2.3",
32254 "spec": ">=6.2.3 <7.0.0",
32255 "type": "range"
32256 },
32257 "_requiredBy": [
32258 "/browserify-sign",
32259 "/create-ecdh",
32260 "/secp256k1"
32261 ],
32262 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
32263 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32264 "_shrinkwrap": null,
32265 "_spec": "elliptic@^6.2.3",
32266 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
32267 "author": {
32268 "name": "Fedor Indutny",
32269 "email": "fedor@indutny.com"
32270 },
32271 "bugs": {
32272 "url": "https://github.com/indutny/elliptic/issues"
32273 },
32274 "dependencies": {
32275 "bn.js": "^4.4.0",
32276 "brorand": "^1.0.1",
32277 "hash.js": "^1.0.0",
32278 "inherits": "^2.0.1"
32279 },
32280 "description": "EC cryptography",
32281 "devDependencies": {
32282 "brfs": "^1.4.3",
32283 "coveralls": "^2.11.3",
32284 "grunt": "^0.4.5",
32285 "grunt-browserify": "^5.0.0",
32286 "grunt-cli": "^1.2.0",
32287 "grunt-contrib-connect": "^1.0.0",
32288 "grunt-contrib-copy": "^1.0.0",
32289 "grunt-contrib-uglify": "^1.0.1",
32290 "grunt-mocha-istanbul": "^3.0.1",
32291 "grunt-saucelabs": "^8.6.2",
32292 "istanbul": "^0.4.2",
32293 "jscs": "^2.9.0",
32294 "jshint": "^2.6.0",
32295 "mocha": "^2.1.0"
32296 },
32297 "directories": {},
32298 "dist": {
32299 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32300 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
32301 },
32302 "files": [
32303 "lib"
32304 ],
32305 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
32306 "homepage": "https://github.com/indutny/elliptic",
32307 "keywords": [
32308 "EC",
32309 "Elliptic",
32310 "curve",
32311 "Cryptography"
32312 ],
32313 "license": "MIT",
32314 "main": "lib/elliptic.js",
32315 "maintainers": [
32316 {
32317 "name": "indutny",
32318 "email": "fedor@indutny.com"
32319 }
32320 ],
32321 "name": "elliptic",
32322 "optionalDependencies": {},
32323 "readme": "ERROR: No README data found!",
32324 "repository": {
32325 "type": "git",
32326 "url": "git+ssh://git@github.com/indutny/elliptic.git"
32327 },
32328 "scripts": {
32329 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32330 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32331 "lint": "npm run jscs && npm run jshint",
32332 "test": "npm run lint && npm run unit",
32333 "unit": "istanbul test _mocha --reporter=spec test/index.js",
32334 "version": "grunt dist && git add dist/"
32335 },
32336 "version": "6.3.3"
32337}
32338
32339},{}],56:[function(require,module,exports){
32340(function (Buffer){
32341'use strict';
32342
32343var isHexPrefixed = require('is-hex-prefixed');
32344var stripHexPrefix = require('strip-hex-prefix');
32345
32346/**
32347 * Pads a `String` to have an even length
32348 * @param {String} value
32349 * @return {String} output
32350 */
32351function padToEven(value) {
32352 var a = value; // eslint-disable-line
32353
32354 if (typeof a !== 'string') {
32355 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
32356 }
32357
32358 if (a.length % 2) {
32359 a = '0' + a;
32360 }
32361
32362 return a;
32363}
32364
32365/**
32366 * Converts a `Number` into a hex `String`
32367 * @param {Number} i
32368 * @return {String}
32369 */
32370function intToHex(i) {
32371 var hex = i.toString(16); // eslint-disable-line
32372
32373 return '0x' + padToEven(hex);
32374}
32375
32376/**
32377 * Converts an `Number` to a `Buffer`
32378 * @param {Number} i
32379 * @return {Buffer}
32380 */
32381function intToBuffer(i) {
32382 var hex = intToHex(i);
32383
32384 return new Buffer(hex.slice(2), 'hex');
32385}
32386
32387/**
32388 * Get the binary size of a string
32389 * @param {String} str
32390 * @return {Number}
32391 */
32392function getBinarySize(str) {
32393 if (typeof str !== 'string') {
32394 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
32395 }
32396
32397 return Buffer.byteLength(str, 'utf8');
32398}
32399
32400/**
32401 * Returns TRUE if the first specified array contains all elements
32402 * from the second one. FALSE otherwise.
32403 *
32404 * @param {array} superset
32405 * @param {array} subset
32406 *
32407 * @returns {boolean}
32408 */
32409function arrayContainsArray(superset, subset, some) {
32410 if (Array.isArray(superset) !== true) {
32411 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
32412 }
32413 if (Array.isArray(subset) !== true) {
32414 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
32415 }
32416
32417 return subset[Boolean(some) && 'some' || 'every'](function (value) {
32418 return superset.indexOf(value) >= 0;
32419 });
32420}
32421
32422/**
32423 * Should be called to get utf8 from it's hex representation
32424 *
32425 * @method toUtf8
32426 * @param {String} string in hex
32427 * @returns {String} ascii string representation of hex value
32428 */
32429function toUtf8(hex) {
32430 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
32431
32432 return bufferValue.toString('utf8');
32433}
32434
32435/**
32436 * Should be called to get ascii from it's hex representation
32437 *
32438 * @method toAscii
32439 * @param {String} string in hex
32440 * @returns {String} ascii string representation of hex value
32441 */
32442function toAscii(hex) {
32443 var str = ''; // eslint-disable-line
32444 var i = 0,
32445 l = hex.length; // eslint-disable-line
32446
32447 if (hex.substring(0, 2) === '0x') {
32448 i = 2;
32449 }
32450
32451 for (; i < l; i += 2) {
32452 var code = parseInt(hex.substr(i, 2), 16);
32453 str += String.fromCharCode(code);
32454 }
32455
32456 return str;
32457}
32458
32459/**
32460 * Should be called to get hex representation (prefixed by 0x) of utf8 string
32461 *
32462 * @method fromUtf8
32463 * @param {String} string
32464 * @param {Number} optional padding
32465 * @returns {String} hex representation of input string
32466 */
32467function fromUtf8(stringValue) {
32468 var str = new Buffer(stringValue, 'utf8');
32469
32470 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
32471}
32472
32473/**
32474 * Should be called to get hex representation (prefixed by 0x) of ascii string
32475 *
32476 * @method fromAscii
32477 * @param {String} string
32478 * @param {Number} optional padding
32479 * @returns {String} hex representation of input string
32480 */
32481function fromAscii(stringValue) {
32482 var hex = ''; // eslint-disable-line
32483 for (var i = 0; i < stringValue.length; i++) {
32484 // eslint-disable-line
32485 var code = stringValue.charCodeAt(i);
32486 var n = code.toString(16);
32487 hex += n.length < 2 ? '0' + n : n;
32488 }
32489
32490 return '0x' + hex;
32491}
32492
32493/**
32494 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
32495 *
32496 * @method getKeys get specific key from inner object array of objects
32497 * @param {String} params
32498 * @param {String} key
32499 * @param {Boolean} allowEmpty
32500 * @returns {Array} output just a simple array of output keys
32501 */
32502function getKeys(params, key, allowEmpty) {
32503 if (!Array.isArray(params)) {
32504 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
32505 }
32506 if (typeof key !== 'string') {
32507 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
32508 }
32509
32510 var result = []; // eslint-disable-line
32511
32512 for (var i = 0; i < params.length; i++) {
32513 // eslint-disable-line
32514 var value = params[i][key]; // eslint-disable-line
32515 if (allowEmpty && !value) {
32516 value = '';
32517 } else if (typeof value !== 'string') {
32518 throw new Error('invalid abi');
32519 }
32520 result.push(value);
32521 }
32522
32523 return result;
32524}
32525
32526/**
32527 * Is the string a hex string.
32528 *
32529 * @method check if string is hex string of specific length
32530 * @param {String} value
32531 * @param {Number} length
32532 * @returns {Boolean} output the string is a hex string
32533 */
32534function isHexString(value, length) {
32535 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
32536 return false;
32537 }
32538
32539 if (length && value.length !== 2 + 2 * length) {
32540 return false;
32541 }
32542
32543 return true;
32544}
32545
32546module.exports = {
32547 arrayContainsArray: arrayContainsArray,
32548 intToBuffer: intToBuffer,
32549 getBinarySize: getBinarySize,
32550 isHexPrefixed: isHexPrefixed,
32551 stripHexPrefix: stripHexPrefix,
32552 padToEven: padToEven,
32553 intToHex: intToHex,
32554 fromAscii: fromAscii,
32555 fromUtf8: fromUtf8,
32556 toAscii: toAscii,
32557 toUtf8: toUtf8,
32558 getKeys: getKeys,
32559 isHexString: isHexString
32560};
32561}).call(this,require("buffer").Buffer)
32562},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
32563var hash = exports;
32564
32565hash.utils = require('./hash/utils');
32566hash.common = require('./hash/common');
32567hash.sha = require('./hash/sha');
32568hash.ripemd = require('./hash/ripemd');
32569hash.hmac = require('./hash/hmac');
32570
32571// Proxy hash functions to the main object
32572hash.sha1 = hash.sha.sha1;
32573hash.sha256 = hash.sha.sha256;
32574hash.sha224 = hash.sha.sha224;
32575hash.sha384 = hash.sha.sha384;
32576hash.sha512 = hash.sha.sha512;
32577hash.ripemd160 = hash.ripemd.ripemd160;
32578
32579},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
32580var hash = require('../hash');
32581var utils = hash.utils;
32582var assert = utils.assert;
32583
32584function BlockHash() {
32585 this.pending = null;
32586 this.pendingTotal = 0;
32587 this.blockSize = this.constructor.blockSize;
32588 this.outSize = this.constructor.outSize;
32589 this.hmacStrength = this.constructor.hmacStrength;
32590 this.padLength = this.constructor.padLength / 8;
32591 this.endian = 'big';
32592
32593 this._delta8 = this.blockSize / 8;
32594 this._delta32 = this.blockSize / 32;
32595}
32596exports.BlockHash = BlockHash;
32597
32598BlockHash.prototype.update = function update(msg, enc) {
32599 // Convert message to array, pad it, and join into 32bit blocks
32600 msg = utils.toArray(msg, enc);
32601 if (!this.pending)
32602 this.pending = msg;
32603 else
32604 this.pending = this.pending.concat(msg);
32605 this.pendingTotal += msg.length;
32606
32607 // Enough data, try updating
32608 if (this.pending.length >= this._delta8) {
32609 msg = this.pending;
32610
32611 // Process pending data in blocks
32612 var r = msg.length % this._delta8;
32613 this.pending = msg.slice(msg.length - r, msg.length);
32614 if (this.pending.length === 0)
32615 this.pending = null;
32616
32617 msg = utils.join32(msg, 0, msg.length - r, this.endian);
32618 for (var i = 0; i < msg.length; i += this._delta32)
32619 this._update(msg, i, i + this._delta32);
32620 }
32621
32622 return this;
32623};
32624
32625BlockHash.prototype.digest = function digest(enc) {
32626 this.update(this._pad());
32627 assert(this.pending === null);
32628
32629 return this._digest(enc);
32630};
32631
32632BlockHash.prototype._pad = function pad() {
32633 var len = this.pendingTotal;
32634 var bytes = this._delta8;
32635 var k = bytes - ((len + this.padLength) % bytes);
32636 var res = new Array(k + this.padLength);
32637 res[0] = 0x80;
32638 for (var i = 1; i < k; i++)
32639 res[i] = 0;
32640
32641 // Append length
32642 len <<= 3;
32643 if (this.endian === 'big') {
32644 for (var t = 8; t < this.padLength; t++)
32645 res[i++] = 0;
32646
32647 res[i++] = 0;
32648 res[i++] = 0;
32649 res[i++] = 0;
32650 res[i++] = 0;
32651 res[i++] = (len >>> 24) & 0xff;
32652 res[i++] = (len >>> 16) & 0xff;
32653 res[i++] = (len >>> 8) & 0xff;
32654 res[i++] = len & 0xff;
32655 } else {
32656 res[i++] = len & 0xff;
32657 res[i++] = (len >>> 8) & 0xff;
32658 res[i++] = (len >>> 16) & 0xff;
32659 res[i++] = (len >>> 24) & 0xff;
32660 res[i++] = 0;
32661 res[i++] = 0;
32662 res[i++] = 0;
32663 res[i++] = 0;
32664
32665 for (var t = 8; t < this.padLength; t++)
32666 res[i++] = 0;
32667 }
32668
32669 return res;
32670};
32671
32672},{"../hash":57}],59:[function(require,module,exports){
32673var hmac = exports;
32674
32675var hash = require('../hash');
32676var utils = hash.utils;
32677var assert = utils.assert;
32678
32679function Hmac(hash, key, enc) {
32680 if (!(this instanceof Hmac))
32681 return new Hmac(hash, key, enc);
32682 this.Hash = hash;
32683 this.blockSize = hash.blockSize / 8;
32684 this.outSize = hash.outSize / 8;
32685 this.inner = null;
32686 this.outer = null;
32687
32688 this._init(utils.toArray(key, enc));
32689}
32690module.exports = Hmac;
32691
32692Hmac.prototype._init = function init(key) {
32693 // Shorten key, if needed
32694 if (key.length > this.blockSize)
32695 key = new this.Hash().update(key).digest();
32696 assert(key.length <= this.blockSize);
32697
32698 // Add padding to key
32699 for (var i = key.length; i < this.blockSize; i++)
32700 key.push(0);
32701
32702 for (var i = 0; i < key.length; i++)
32703 key[i] ^= 0x36;
32704 this.inner = new this.Hash().update(key);
32705
32706 // 0x36 ^ 0x5c = 0x6a
32707 for (var i = 0; i < key.length; i++)
32708 key[i] ^= 0x6a;
32709 this.outer = new this.Hash().update(key);
32710};
32711
32712Hmac.prototype.update = function update(msg, enc) {
32713 this.inner.update(msg, enc);
32714 return this;
32715};
32716
32717Hmac.prototype.digest = function digest(enc) {
32718 this.outer.update(this.inner.digest());
32719 return this.outer.digest(enc);
32720};
32721
32722},{"../hash":57}],60:[function(require,module,exports){
32723var hash = require('../hash');
32724var utils = hash.utils;
32725
32726var rotl32 = utils.rotl32;
32727var sum32 = utils.sum32;
32728var sum32_3 = utils.sum32_3;
32729var sum32_4 = utils.sum32_4;
32730var BlockHash = hash.common.BlockHash;
32731
32732function RIPEMD160() {
32733 if (!(this instanceof RIPEMD160))
32734 return new RIPEMD160();
32735
32736 BlockHash.call(this);
32737
32738 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
32739 this.endian = 'little';
32740}
32741utils.inherits(RIPEMD160, BlockHash);
32742exports.ripemd160 = RIPEMD160;
32743
32744RIPEMD160.blockSize = 512;
32745RIPEMD160.outSize = 160;
32746RIPEMD160.hmacStrength = 192;
32747RIPEMD160.padLength = 64;
32748
32749RIPEMD160.prototype._update = function update(msg, start) {
32750 var A = this.h[0];
32751 var B = this.h[1];
32752 var C = this.h[2];
32753 var D = this.h[3];
32754 var E = this.h[4];
32755 var Ah = A;
32756 var Bh = B;
32757 var Ch = C;
32758 var Dh = D;
32759 var Eh = E;
32760 for (var j = 0; j < 80; j++) {
32761 var T = sum32(
32762 rotl32(
32763 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
32764 s[j]),
32765 E);
32766 A = E;
32767 E = D;
32768 D = rotl32(C, 10);
32769 C = B;
32770 B = T;
32771 T = sum32(
32772 rotl32(
32773 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
32774 sh[j]),
32775 Eh);
32776 Ah = Eh;
32777 Eh = Dh;
32778 Dh = rotl32(Ch, 10);
32779 Ch = Bh;
32780 Bh = T;
32781 }
32782 T = sum32_3(this.h[1], C, Dh);
32783 this.h[1] = sum32_3(this.h[2], D, Eh);
32784 this.h[2] = sum32_3(this.h[3], E, Ah);
32785 this.h[3] = sum32_3(this.h[4], A, Bh);
32786 this.h[4] = sum32_3(this.h[0], B, Ch);
32787 this.h[0] = T;
32788};
32789
32790RIPEMD160.prototype._digest = function digest(enc) {
32791 if (enc === 'hex')
32792 return utils.toHex32(this.h, 'little');
32793 else
32794 return utils.split32(this.h, 'little');
32795};
32796
32797function f(j, x, y, z) {
32798 if (j <= 15)
32799 return x ^ y ^ z;
32800 else if (j <= 31)
32801 return (x & y) | ((~x) & z);
32802 else if (j <= 47)
32803 return (x | (~y)) ^ z;
32804 else if (j <= 63)
32805 return (x & z) | (y & (~z));
32806 else
32807 return x ^ (y | (~z));
32808}
32809
32810function K(j) {
32811 if (j <= 15)
32812 return 0x00000000;
32813 else if (j <= 31)
32814 return 0x5a827999;
32815 else if (j <= 47)
32816 return 0x6ed9eba1;
32817 else if (j <= 63)
32818 return 0x8f1bbcdc;
32819 else
32820 return 0xa953fd4e;
32821}
32822
32823function Kh(j) {
32824 if (j <= 15)
32825 return 0x50a28be6;
32826 else if (j <= 31)
32827 return 0x5c4dd124;
32828 else if (j <= 47)
32829 return 0x6d703ef3;
32830 else if (j <= 63)
32831 return 0x7a6d76e9;
32832 else
32833 return 0x00000000;
32834}
32835
32836var r = [
32837 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
32838 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
32839 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
32840 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
32841 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
32842];
32843
32844var rh = [
32845 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
32846 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
32847 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
32848 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
32849 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
32850];
32851
32852var s = [
32853 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
32854 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
32855 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
32856 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
32857 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
32858];
32859
32860var sh = [
32861 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
32862 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
32863 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
32864 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
32865 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
32866];
32867
32868},{"../hash":57}],61:[function(require,module,exports){
32869var hash = require('../hash');
32870var utils = hash.utils;
32871var assert = utils.assert;
32872
32873var rotr32 = utils.rotr32;
32874var rotl32 = utils.rotl32;
32875var sum32 = utils.sum32;
32876var sum32_4 = utils.sum32_4;
32877var sum32_5 = utils.sum32_5;
32878var rotr64_hi = utils.rotr64_hi;
32879var rotr64_lo = utils.rotr64_lo;
32880var shr64_hi = utils.shr64_hi;
32881var shr64_lo = utils.shr64_lo;
32882var sum64 = utils.sum64;
32883var sum64_hi = utils.sum64_hi;
32884var sum64_lo = utils.sum64_lo;
32885var sum64_4_hi = utils.sum64_4_hi;
32886var sum64_4_lo = utils.sum64_4_lo;
32887var sum64_5_hi = utils.sum64_5_hi;
32888var sum64_5_lo = utils.sum64_5_lo;
32889var BlockHash = hash.common.BlockHash;
32890
32891var sha256_K = [
32892 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
32893 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
32894 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
32895 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
32896 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
32897 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
32898 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
32899 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
32900 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
32901 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
32902 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
32903 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
32904 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
32905 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
32906 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
32907 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
32908];
32909
32910var sha512_K = [
32911 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
32912 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
32913 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
32914 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
32915 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
32916 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
32917 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
32918 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
32919 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
32920 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
32921 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
32922 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
32923 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
32924 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
32925 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
32926 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
32927 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
32928 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
32929 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
32930 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
32931 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
32932 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
32933 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
32934 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
32935 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
32936 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
32937 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
32938 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
32939 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
32940 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
32941 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
32942 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
32943 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
32944 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
32945 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
32946 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
32947 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
32948 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
32949 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
32950 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
32951];
32952
32953var sha1_K = [
32954 0x5A827999, 0x6ED9EBA1,
32955 0x8F1BBCDC, 0xCA62C1D6
32956];
32957
32958function SHA256() {
32959 if (!(this instanceof SHA256))
32960 return new SHA256();
32961
32962 BlockHash.call(this);
32963 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
32964 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
32965 this.k = sha256_K;
32966 this.W = new Array(64);
32967}
32968utils.inherits(SHA256, BlockHash);
32969exports.sha256 = SHA256;
32970
32971SHA256.blockSize = 512;
32972SHA256.outSize = 256;
32973SHA256.hmacStrength = 192;
32974SHA256.padLength = 64;
32975
32976SHA256.prototype._update = function _update(msg, start) {
32977 var W = this.W;
32978
32979 for (var i = 0; i < 16; i++)
32980 W[i] = msg[start + i];
32981 for (; i < W.length; i++)
32982 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
32983
32984 var a = this.h[0];
32985 var b = this.h[1];
32986 var c = this.h[2];
32987 var d = this.h[3];
32988 var e = this.h[4];
32989 var f = this.h[5];
32990 var g = this.h[6];
32991 var h = this.h[7];
32992
32993 assert(this.k.length === W.length);
32994 for (var i = 0; i < W.length; i++) {
32995 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
32996 var T2 = sum32(s0_256(a), maj32(a, b, c));
32997 h = g;
32998 g = f;
32999 f = e;
33000 e = sum32(d, T1);
33001 d = c;
33002 c = b;
33003 b = a;
33004 a = sum32(T1, T2);
33005 }
33006
33007 this.h[0] = sum32(this.h[0], a);
33008 this.h[1] = sum32(this.h[1], b);
33009 this.h[2] = sum32(this.h[2], c);
33010 this.h[3] = sum32(this.h[3], d);
33011 this.h[4] = sum32(this.h[4], e);
33012 this.h[5] = sum32(this.h[5], f);
33013 this.h[6] = sum32(this.h[6], g);
33014 this.h[7] = sum32(this.h[7], h);
33015};
33016
33017SHA256.prototype._digest = function digest(enc) {
33018 if (enc === 'hex')
33019 return utils.toHex32(this.h, 'big');
33020 else
33021 return utils.split32(this.h, 'big');
33022};
33023
33024function SHA224() {
33025 if (!(this instanceof SHA224))
33026 return new SHA224();
33027
33028 SHA256.call(this);
33029 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33030 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33031}
33032utils.inherits(SHA224, SHA256);
33033exports.sha224 = SHA224;
33034
33035SHA224.blockSize = 512;
33036SHA224.outSize = 224;
33037SHA224.hmacStrength = 192;
33038SHA224.padLength = 64;
33039
33040SHA224.prototype._digest = function digest(enc) {
33041 // Just truncate output
33042 if (enc === 'hex')
33043 return utils.toHex32(this.h.slice(0, 7), 'big');
33044 else
33045 return utils.split32(this.h.slice(0, 7), 'big');
33046};
33047
33048function SHA512() {
33049 if (!(this instanceof SHA512))
33050 return new SHA512();
33051
33052 BlockHash.call(this);
33053 this.h = [ 0x6a09e667, 0xf3bcc908,
33054 0xbb67ae85, 0x84caa73b,
33055 0x3c6ef372, 0xfe94f82b,
33056 0xa54ff53a, 0x5f1d36f1,
33057 0x510e527f, 0xade682d1,
33058 0x9b05688c, 0x2b3e6c1f,
33059 0x1f83d9ab, 0xfb41bd6b,
33060 0x5be0cd19, 0x137e2179 ];
33061 this.k = sha512_K;
33062 this.W = new Array(160);
33063}
33064utils.inherits(SHA512, BlockHash);
33065exports.sha512 = SHA512;
33066
33067SHA512.blockSize = 1024;
33068SHA512.outSize = 512;
33069SHA512.hmacStrength = 192;
33070SHA512.padLength = 128;
33071
33072SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33073 var W = this.W;
33074
33075 // 32 x 32bit words
33076 for (var i = 0; i < 32; i++)
33077 W[i] = msg[start + i];
33078 for (; i < W.length; i += 2) {
33079 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33080 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33081 var c1_hi = W[i - 14]; // i - 7
33082 var c1_lo = W[i - 13];
33083 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33084 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33085 var c3_hi = W[i - 32]; // i - 16
33086 var c3_lo = W[i - 31];
33087
33088 W[i] = sum64_4_hi(c0_hi, c0_lo,
33089 c1_hi, c1_lo,
33090 c2_hi, c2_lo,
33091 c3_hi, c3_lo);
33092 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33093 c1_hi, c1_lo,
33094 c2_hi, c2_lo,
33095 c3_hi, c3_lo);
33096 }
33097};
33098
33099SHA512.prototype._update = function _update(msg, start) {
33100 this._prepareBlock(msg, start);
33101
33102 var W = this.W;
33103
33104 var ah = this.h[0];
33105 var al = this.h[1];
33106 var bh = this.h[2];
33107 var bl = this.h[3];
33108 var ch = this.h[4];
33109 var cl = this.h[5];
33110 var dh = this.h[6];
33111 var dl = this.h[7];
33112 var eh = this.h[8];
33113 var el = this.h[9];
33114 var fh = this.h[10];
33115 var fl = this.h[11];
33116 var gh = this.h[12];
33117 var gl = this.h[13];
33118 var hh = this.h[14];
33119 var hl = this.h[15];
33120
33121 assert(this.k.length === W.length);
33122 for (var i = 0; i < W.length; i += 2) {
33123 var c0_hi = hh;
33124 var c0_lo = hl;
33125 var c1_hi = s1_512_hi(eh, el);
33126 var c1_lo = s1_512_lo(eh, el);
33127 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33128 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33129 var c3_hi = this.k[i];
33130 var c3_lo = this.k[i + 1];
33131 var c4_hi = W[i];
33132 var c4_lo = W[i + 1];
33133
33134 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33135 c1_hi, c1_lo,
33136 c2_hi, c2_lo,
33137 c3_hi, c3_lo,
33138 c4_hi, c4_lo);
33139 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33140 c1_hi, c1_lo,
33141 c2_hi, c2_lo,
33142 c3_hi, c3_lo,
33143 c4_hi, c4_lo);
33144
33145 var c0_hi = s0_512_hi(ah, al);
33146 var c0_lo = s0_512_lo(ah, al);
33147 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33148 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33149
33150 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33151 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33152
33153 hh = gh;
33154 hl = gl;
33155
33156 gh = fh;
33157 gl = fl;
33158
33159 fh = eh;
33160 fl = el;
33161
33162 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33163 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33164
33165 dh = ch;
33166 dl = cl;
33167
33168 ch = bh;
33169 cl = bl;
33170
33171 bh = ah;
33172 bl = al;
33173
33174 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33175 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33176 }
33177
33178 sum64(this.h, 0, ah, al);
33179 sum64(this.h, 2, bh, bl);
33180 sum64(this.h, 4, ch, cl);
33181 sum64(this.h, 6, dh, dl);
33182 sum64(this.h, 8, eh, el);
33183 sum64(this.h, 10, fh, fl);
33184 sum64(this.h, 12, gh, gl);
33185 sum64(this.h, 14, hh, hl);
33186};
33187
33188SHA512.prototype._digest = function digest(enc) {
33189 if (enc === 'hex')
33190 return utils.toHex32(this.h, 'big');
33191 else
33192 return utils.split32(this.h, 'big');
33193};
33194
33195function SHA384() {
33196 if (!(this instanceof SHA384))
33197 return new SHA384();
33198
33199 SHA512.call(this);
33200 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
33201 0x629a292a, 0x367cd507,
33202 0x9159015a, 0x3070dd17,
33203 0x152fecd8, 0xf70e5939,
33204 0x67332667, 0xffc00b31,
33205 0x8eb44a87, 0x68581511,
33206 0xdb0c2e0d, 0x64f98fa7,
33207 0x47b5481d, 0xbefa4fa4 ];
33208}
33209utils.inherits(SHA384, SHA512);
33210exports.sha384 = SHA384;
33211
33212SHA384.blockSize = 1024;
33213SHA384.outSize = 384;
33214SHA384.hmacStrength = 192;
33215SHA384.padLength = 128;
33216
33217SHA384.prototype._digest = function digest(enc) {
33218 if (enc === 'hex')
33219 return utils.toHex32(this.h.slice(0, 12), 'big');
33220 else
33221 return utils.split32(this.h.slice(0, 12), 'big');
33222};
33223
33224function SHA1() {
33225 if (!(this instanceof SHA1))
33226 return new SHA1();
33227
33228 BlockHash.call(this);
33229 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
33230 0x10325476, 0xc3d2e1f0 ];
33231 this.W = new Array(80);
33232}
33233
33234utils.inherits(SHA1, BlockHash);
33235exports.sha1 = SHA1;
33236
33237SHA1.blockSize = 512;
33238SHA1.outSize = 160;
33239SHA1.hmacStrength = 80;
33240SHA1.padLength = 64;
33241
33242SHA1.prototype._update = function _update(msg, start) {
33243 var W = this.W;
33244
33245 for (var i = 0; i < 16; i++)
33246 W[i] = msg[start + i];
33247
33248 for(; i < W.length; i++)
33249 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
33250
33251 var a = this.h[0];
33252 var b = this.h[1];
33253 var c = this.h[2];
33254 var d = this.h[3];
33255 var e = this.h[4];
33256
33257 for (var i = 0; i < W.length; i++) {
33258 var s = ~~(i / 20);
33259 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
33260 e = d;
33261 d = c;
33262 c = rotl32(b, 30);
33263 b = a;
33264 a = t;
33265 }
33266
33267 this.h[0] = sum32(this.h[0], a);
33268 this.h[1] = sum32(this.h[1], b);
33269 this.h[2] = sum32(this.h[2], c);
33270 this.h[3] = sum32(this.h[3], d);
33271 this.h[4] = sum32(this.h[4], e);
33272};
33273
33274SHA1.prototype._digest = function digest(enc) {
33275 if (enc === 'hex')
33276 return utils.toHex32(this.h, 'big');
33277 else
33278 return utils.split32(this.h, 'big');
33279};
33280
33281function ch32(x, y, z) {
33282 return (x & y) ^ ((~x) & z);
33283}
33284
33285function maj32(x, y, z) {
33286 return (x & y) ^ (x & z) ^ (y & z);
33287}
33288
33289function p32(x, y, z) {
33290 return x ^ y ^ z;
33291}
33292
33293function s0_256(x) {
33294 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
33295}
33296
33297function s1_256(x) {
33298 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
33299}
33300
33301function g0_256(x) {
33302 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
33303}
33304
33305function g1_256(x) {
33306 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
33307}
33308
33309function ft_1(s, x, y, z) {
33310 if (s === 0)
33311 return ch32(x, y, z);
33312 if (s === 1 || s === 3)
33313 return p32(x, y, z);
33314 if (s === 2)
33315 return maj32(x, y, z);
33316}
33317
33318function ch64_hi(xh, xl, yh, yl, zh, zl) {
33319 var r = (xh & yh) ^ ((~xh) & zh);
33320 if (r < 0)
33321 r += 0x100000000;
33322 return r;
33323}
33324
33325function ch64_lo(xh, xl, yh, yl, zh, zl) {
33326 var r = (xl & yl) ^ ((~xl) & zl);
33327 if (r < 0)
33328 r += 0x100000000;
33329 return r;
33330}
33331
33332function maj64_hi(xh, xl, yh, yl, zh, zl) {
33333 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
33334 if (r < 0)
33335 r += 0x100000000;
33336 return r;
33337}
33338
33339function maj64_lo(xh, xl, yh, yl, zh, zl) {
33340 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
33341 if (r < 0)
33342 r += 0x100000000;
33343 return r;
33344}
33345
33346function s0_512_hi(xh, xl) {
33347 var c0_hi = rotr64_hi(xh, xl, 28);
33348 var c1_hi = rotr64_hi(xl, xh, 2); // 34
33349 var c2_hi = rotr64_hi(xl, xh, 7); // 39
33350
33351 var r = c0_hi ^ c1_hi ^ c2_hi;
33352 if (r < 0)
33353 r += 0x100000000;
33354 return r;
33355}
33356
33357function s0_512_lo(xh, xl) {
33358 var c0_lo = rotr64_lo(xh, xl, 28);
33359 var c1_lo = rotr64_lo(xl, xh, 2); // 34
33360 var c2_lo = rotr64_lo(xl, xh, 7); // 39
33361
33362 var r = c0_lo ^ c1_lo ^ c2_lo;
33363 if (r < 0)
33364 r += 0x100000000;
33365 return r;
33366}
33367
33368function s1_512_hi(xh, xl) {
33369 var c0_hi = rotr64_hi(xh, xl, 14);
33370 var c1_hi = rotr64_hi(xh, xl, 18);
33371 var c2_hi = rotr64_hi(xl, xh, 9); // 41
33372
33373 var r = c0_hi ^ c1_hi ^ c2_hi;
33374 if (r < 0)
33375 r += 0x100000000;
33376 return r;
33377}
33378
33379function s1_512_lo(xh, xl) {
33380 var c0_lo = rotr64_lo(xh, xl, 14);
33381 var c1_lo = rotr64_lo(xh, xl, 18);
33382 var c2_lo = rotr64_lo(xl, xh, 9); // 41
33383
33384 var r = c0_lo ^ c1_lo ^ c2_lo;
33385 if (r < 0)
33386 r += 0x100000000;
33387 return r;
33388}
33389
33390function g0_512_hi(xh, xl) {
33391 var c0_hi = rotr64_hi(xh, xl, 1);
33392 var c1_hi = rotr64_hi(xh, xl, 8);
33393 var c2_hi = shr64_hi(xh, xl, 7);
33394
33395 var r = c0_hi ^ c1_hi ^ c2_hi;
33396 if (r < 0)
33397 r += 0x100000000;
33398 return r;
33399}
33400
33401function g0_512_lo(xh, xl) {
33402 var c0_lo = rotr64_lo(xh, xl, 1);
33403 var c1_lo = rotr64_lo(xh, xl, 8);
33404 var c2_lo = shr64_lo(xh, xl, 7);
33405
33406 var r = c0_lo ^ c1_lo ^ c2_lo;
33407 if (r < 0)
33408 r += 0x100000000;
33409 return r;
33410}
33411
33412function g1_512_hi(xh, xl) {
33413 var c0_hi = rotr64_hi(xh, xl, 19);
33414 var c1_hi = rotr64_hi(xl, xh, 29); // 61
33415 var c2_hi = shr64_hi(xh, xl, 6);
33416
33417 var r = c0_hi ^ c1_hi ^ c2_hi;
33418 if (r < 0)
33419 r += 0x100000000;
33420 return r;
33421}
33422
33423function g1_512_lo(xh, xl) {
33424 var c0_lo = rotr64_lo(xh, xl, 19);
33425 var c1_lo = rotr64_lo(xl, xh, 29); // 61
33426 var c2_lo = shr64_lo(xh, xl, 6);
33427
33428 var r = c0_lo ^ c1_lo ^ c2_lo;
33429 if (r < 0)
33430 r += 0x100000000;
33431 return r;
33432}
33433
33434},{"../hash":57}],62:[function(require,module,exports){
33435var utils = exports;
33436var inherits = require('inherits');
33437
33438function toArray(msg, enc) {
33439 if (Array.isArray(msg))
33440 return msg.slice();
33441 if (!msg)
33442 return [];
33443 var res = [];
33444 if (typeof msg === 'string') {
33445 if (!enc) {
33446 for (var i = 0; i < msg.length; i++) {
33447 var c = msg.charCodeAt(i);
33448 var hi = c >> 8;
33449 var lo = c & 0xff;
33450 if (hi)
33451 res.push(hi, lo);
33452 else
33453 res.push(lo);
33454 }
33455 } else if (enc === 'hex') {
33456 msg = msg.replace(/[^a-z0-9]+/ig, '');
33457 if (msg.length % 2 !== 0)
33458 msg = '0' + msg;
33459 for (var i = 0; i < msg.length; i += 2)
33460 res.push(parseInt(msg[i] + msg[i + 1], 16));
33461 }
33462 } else {
33463 for (var i = 0; i < msg.length; i++)
33464 res[i] = msg[i] | 0;
33465 }
33466 return res;
33467}
33468utils.toArray = toArray;
33469
33470function toHex(msg) {
33471 var res = '';
33472 for (var i = 0; i < msg.length; i++)
33473 res += zero2(msg[i].toString(16));
33474 return res;
33475}
33476utils.toHex = toHex;
33477
33478function htonl(w) {
33479 var res = (w >>> 24) |
33480 ((w >>> 8) & 0xff00) |
33481 ((w << 8) & 0xff0000) |
33482 ((w & 0xff) << 24);
33483 return res >>> 0;
33484}
33485utils.htonl = htonl;
33486
33487function toHex32(msg, endian) {
33488 var res = '';
33489 for (var i = 0; i < msg.length; i++) {
33490 var w = msg[i];
33491 if (endian === 'little')
33492 w = htonl(w);
33493 res += zero8(w.toString(16));
33494 }
33495 return res;
33496}
33497utils.toHex32 = toHex32;
33498
33499function zero2(word) {
33500 if (word.length === 1)
33501 return '0' + word;
33502 else
33503 return word;
33504}
33505utils.zero2 = zero2;
33506
33507function zero8(word) {
33508 if (word.length === 7)
33509 return '0' + word;
33510 else if (word.length === 6)
33511 return '00' + word;
33512 else if (word.length === 5)
33513 return '000' + word;
33514 else if (word.length === 4)
33515 return '0000' + word;
33516 else if (word.length === 3)
33517 return '00000' + word;
33518 else if (word.length === 2)
33519 return '000000' + word;
33520 else if (word.length === 1)
33521 return '0000000' + word;
33522 else
33523 return word;
33524}
33525utils.zero8 = zero8;
33526
33527function join32(msg, start, end, endian) {
33528 var len = end - start;
33529 assert(len % 4 === 0);
33530 var res = new Array(len / 4);
33531 for (var i = 0, k = start; i < res.length; i++, k += 4) {
33532 var w;
33533 if (endian === 'big')
33534 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
33535 else
33536 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
33537 res[i] = w >>> 0;
33538 }
33539 return res;
33540}
33541utils.join32 = join32;
33542
33543function split32(msg, endian) {
33544 var res = new Array(msg.length * 4);
33545 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
33546 var m = msg[i];
33547 if (endian === 'big') {
33548 res[k] = m >>> 24;
33549 res[k + 1] = (m >>> 16) & 0xff;
33550 res[k + 2] = (m >>> 8) & 0xff;
33551 res[k + 3] = m & 0xff;
33552 } else {
33553 res[k + 3] = m >>> 24;
33554 res[k + 2] = (m >>> 16) & 0xff;
33555 res[k + 1] = (m >>> 8) & 0xff;
33556 res[k] = m & 0xff;
33557 }
33558 }
33559 return res;
33560}
33561utils.split32 = split32;
33562
33563function rotr32(w, b) {
33564 return (w >>> b) | (w << (32 - b));
33565}
33566utils.rotr32 = rotr32;
33567
33568function rotl32(w, b) {
33569 return (w << b) | (w >>> (32 - b));
33570}
33571utils.rotl32 = rotl32;
33572
33573function sum32(a, b) {
33574 return (a + b) >>> 0;
33575}
33576utils.sum32 = sum32;
33577
33578function sum32_3(a, b, c) {
33579 return (a + b + c) >>> 0;
33580}
33581utils.sum32_3 = sum32_3;
33582
33583function sum32_4(a, b, c, d) {
33584 return (a + b + c + d) >>> 0;
33585}
33586utils.sum32_4 = sum32_4;
33587
33588function sum32_5(a, b, c, d, e) {
33589 return (a + b + c + d + e) >>> 0;
33590}
33591utils.sum32_5 = sum32_5;
33592
33593function assert(cond, msg) {
33594 if (!cond)
33595 throw new Error(msg || 'Assertion failed');
33596}
33597utils.assert = assert;
33598
33599utils.inherits = inherits;
33600
33601function sum64(buf, pos, ah, al) {
33602 var bh = buf[pos];
33603 var bl = buf[pos + 1];
33604
33605 var lo = (al + bl) >>> 0;
33606 var hi = (lo < al ? 1 : 0) + ah + bh;
33607 buf[pos] = hi >>> 0;
33608 buf[pos + 1] = lo;
33609}
33610exports.sum64 = sum64;
33611
33612function sum64_hi(ah, al, bh, bl) {
33613 var lo = (al + bl) >>> 0;
33614 var hi = (lo < al ? 1 : 0) + ah + bh;
33615 return hi >>> 0;
33616};
33617exports.sum64_hi = sum64_hi;
33618
33619function sum64_lo(ah, al, bh, bl) {
33620 var lo = al + bl;
33621 return lo >>> 0;
33622};
33623exports.sum64_lo = sum64_lo;
33624
33625function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
33626 var carry = 0;
33627 var lo = al;
33628 lo = (lo + bl) >>> 0;
33629 carry += lo < al ? 1 : 0;
33630 lo = (lo + cl) >>> 0;
33631 carry += lo < cl ? 1 : 0;
33632 lo = (lo + dl) >>> 0;
33633 carry += lo < dl ? 1 : 0;
33634
33635 var hi = ah + bh + ch + dh + carry;
33636 return hi >>> 0;
33637};
33638exports.sum64_4_hi = sum64_4_hi;
33639
33640function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
33641 var lo = al + bl + cl + dl;
33642 return lo >>> 0;
33643};
33644exports.sum64_4_lo = sum64_4_lo;
33645
33646function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
33647 var carry = 0;
33648 var lo = al;
33649 lo = (lo + bl) >>> 0;
33650 carry += lo < al ? 1 : 0;
33651 lo = (lo + cl) >>> 0;
33652 carry += lo < cl ? 1 : 0;
33653 lo = (lo + dl) >>> 0;
33654 carry += lo < dl ? 1 : 0;
33655 lo = (lo + el) >>> 0;
33656 carry += lo < el ? 1 : 0;
33657
33658 var hi = ah + bh + ch + dh + eh + carry;
33659 return hi >>> 0;
33660};
33661exports.sum64_5_hi = sum64_5_hi;
33662
33663function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
33664 var lo = al + bl + cl + dl + el;
33665
33666 return lo >>> 0;
33667};
33668exports.sum64_5_lo = sum64_5_lo;
33669
33670function rotr64_hi(ah, al, num) {
33671 var r = (al << (32 - num)) | (ah >>> num);
33672 return r >>> 0;
33673};
33674exports.rotr64_hi = rotr64_hi;
33675
33676function rotr64_lo(ah, al, num) {
33677 var r = (ah << (32 - num)) | (al >>> num);
33678 return r >>> 0;
33679};
33680exports.rotr64_lo = rotr64_lo;
33681
33682function shr64_hi(ah, al, num) {
33683 return ah >>> num;
33684};
33685exports.shr64_hi = shr64_hi;
33686
33687function shr64_lo(ah, al, num) {
33688 var r = (ah << (32 - num)) | (al >>> num);
33689 return r >>> 0;
33690};
33691exports.shr64_lo = shr64_lo;
33692
33693},{"inherits":63}],63:[function(require,module,exports){
33694arguments[4][9][0].apply(exports,arguments)
33695},{"dup":9}],64:[function(require,module,exports){
33696/**
33697 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
33698 * @param {String} str the string input value
33699 * @return {Boolean} a boolean if it is or is not hex prefixed
33700 * @throws if the str input is not a string
33701 */
33702module.exports = function isHexPrefixed(str) {
33703 if (typeof str !== 'string') {
33704 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
33705 }
33706
33707 return str.slice(0, 2) === '0x';
33708}
33709
33710},{}],65:[function(require,module,exports){
33711'use strict'
33712module.exports = require('./lib/api')(require('./lib/keccak'))
33713
33714},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
33715'use strict'
33716var createKeccak = require('./keccak')
33717var createShake = require('./shake')
33718
33719module.exports = function (KeccakState) {
33720 var Keccak = createKeccak(KeccakState)
33721 var Shake = createShake(KeccakState)
33722
33723 return function (algorithm, options) {
33724 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
33725 switch (hash) {
33726 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
33727 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
33728 case 'keccak384': return new Keccak(832, 768, null, 384, options)
33729 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
33730
33731 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
33732 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
33733 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
33734 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
33735
33736 case 'shake128': return new Shake(1344, 256, 0x1f, options)
33737 case 'shake256': return new Shake(1088, 512, 0x1f, options)
33738
33739 default: throw new Error('Invald algorithm: ' + algorithm)
33740 }
33741 }
33742}
33743
33744},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
33745(function (Buffer){
33746'use strict'
33747var Transform = require('stream').Transform
33748var inherits = require('inherits')
33749
33750module.exports = function (KeccakState) {
33751 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
33752 Transform.call(this, options)
33753
33754 this._rate = rate
33755 this._capacity = capacity
33756 this._delimitedSuffix = delimitedSuffix
33757 this._hashBitLength = hashBitLength
33758 this._options = options
33759
33760 this._state = new KeccakState()
33761 this._state.initialize(rate, capacity)
33762 this._finalized = false
33763 }
33764
33765 inherits(Keccak, Transform)
33766
33767 Keccak.prototype._transform = function (chunk, encoding, callback) {
33768 var error = null
33769 try {
33770 this.update(chunk, encoding)
33771 } catch (err) {
33772 error = err
33773 }
33774
33775 callback(error)
33776 }
33777
33778 Keccak.prototype._flush = function (callback) {
33779 var error = null
33780 try {
33781 this.push(this.digest())
33782 } catch (err) {
33783 error = err
33784 }
33785
33786 callback(error)
33787 }
33788
33789 Keccak.prototype.update = function (data, encoding) {
33790 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
33791 if (this._finalized) throw new Error('Digest already called')
33792 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
33793
33794 this._state.absorb(data)
33795
33796 return this
33797 }
33798
33799 Keccak.prototype.digest = function (encoding) {
33800 if (this._finalized) throw new Error('Digest already called')
33801 this._finalized = true
33802
33803 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
33804 var digest = this._state.squeeze(this._hashBitLength / 8)
33805 if (encoding !== undefined) digest = digest.toString(encoding)
33806
33807 this._resetState()
33808
33809 return digest
33810 }
33811
33812 // remove result from memory
33813 Keccak.prototype._resetState = function () {
33814 this._state.initialize(this._rate, this._capacity)
33815 return this
33816 }
33817
33818 // because sometimes we need hash right now and little later
33819 Keccak.prototype._clone = function () {
33820 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
33821 this._state.copy(clone._state)
33822 clone._finalized = this._finalized
33823
33824 return clone
33825 }
33826
33827 return Keccak
33828}
33829
33830}).call(this,require("buffer").Buffer)
33831},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
33832(function (Buffer){
33833'use strict'
33834var Transform = require('stream').Transform
33835var inherits = require('inherits')
33836
33837module.exports = function (KeccakState) {
33838 function Shake (rate, capacity, delimitedSuffix, options) {
33839 Transform.call(this, options)
33840
33841 this._rate = rate
33842 this._capacity = capacity
33843 this._delimitedSuffix = delimitedSuffix
33844 this._options = options
33845
33846 this._state = new KeccakState()
33847 this._state.initialize(rate, capacity)
33848 this._finalized = false
33849 }
33850
33851 inherits(Shake, Transform)
33852
33853 Shake.prototype._transform = function (chunk, encoding, callback) {
33854 var error = null
33855 try {
33856 this.update(chunk, encoding)
33857 } catch (err) {
33858 error = err
33859 }
33860
33861 callback(error)
33862 }
33863
33864 Shake.prototype._flush = function () {}
33865
33866 Shake.prototype._read = function (size) {
33867 this.push(this.squeeze(size))
33868 }
33869
33870 Shake.prototype.update = function (data, encoding) {
33871 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
33872 if (this._finalized) throw new Error('Squeeze already called')
33873 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
33874
33875 this._state.absorb(data)
33876
33877 return this
33878 }
33879
33880 Shake.prototype.squeeze = function (dataByteLength, encoding) {
33881 if (!this._finalized) {
33882 this._finalized = true
33883 this._state.absorbLastFewBits(this._delimitedSuffix)
33884 }
33885
33886 var data = this._state.squeeze(dataByteLength)
33887 if (encoding !== undefined) data = data.toString(encoding)
33888
33889 return data
33890 }
33891
33892 Shake.prototype._resetState = function () {
33893 this._state.initialize(this._rate, this._capacity)
33894 return this
33895 }
33896
33897 Shake.prototype._clone = function () {
33898 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
33899 this._state.copy(clone._state)
33900 clone._finalized = this._finalized
33901
33902 return clone
33903 }
33904
33905 return Shake
33906}
33907
33908}).call(this,require("buffer").Buffer)
33909},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
33910'use strict'
33911var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
33912
33913exports.p1600 = function (s) {
33914 for (var round = 0; round < 24; ++round) {
33915 // theta
33916 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
33917 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
33918 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
33919 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
33920 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
33921 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
33922 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
33923 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
33924 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
33925 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
33926
33927 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
33928 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
33929 var t1slo0 = s[0] ^ lo
33930 var t1shi0 = s[1] ^ hi
33931 var t1slo5 = s[10] ^ lo
33932 var t1shi5 = s[11] ^ hi
33933 var t1slo10 = s[20] ^ lo
33934 var t1shi10 = s[21] ^ hi
33935 var t1slo15 = s[30] ^ lo
33936 var t1shi15 = s[31] ^ hi
33937 var t1slo20 = s[40] ^ lo
33938 var t1shi20 = s[41] ^ hi
33939 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
33940 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
33941 var t1slo1 = s[2] ^ lo
33942 var t1shi1 = s[3] ^ hi
33943 var t1slo6 = s[12] ^ lo
33944 var t1shi6 = s[13] ^ hi
33945 var t1slo11 = s[22] ^ lo
33946 var t1shi11 = s[23] ^ hi
33947 var t1slo16 = s[32] ^ lo
33948 var t1shi16 = s[33] ^ hi
33949 var t1slo21 = s[42] ^ lo
33950 var t1shi21 = s[43] ^ hi
33951 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
33952 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
33953 var t1slo2 = s[4] ^ lo
33954 var t1shi2 = s[5] ^ hi
33955 var t1slo7 = s[14] ^ lo
33956 var t1shi7 = s[15] ^ hi
33957 var t1slo12 = s[24] ^ lo
33958 var t1shi12 = s[25] ^ hi
33959 var t1slo17 = s[34] ^ lo
33960 var t1shi17 = s[35] ^ hi
33961 var t1slo22 = s[44] ^ lo
33962 var t1shi22 = s[45] ^ hi
33963 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
33964 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
33965 var t1slo3 = s[6] ^ lo
33966 var t1shi3 = s[7] ^ hi
33967 var t1slo8 = s[16] ^ lo
33968 var t1shi8 = s[17] ^ hi
33969 var t1slo13 = s[26] ^ lo
33970 var t1shi13 = s[27] ^ hi
33971 var t1slo18 = s[36] ^ lo
33972 var t1shi18 = s[37] ^ hi
33973 var t1slo23 = s[46] ^ lo
33974 var t1shi23 = s[47] ^ hi
33975 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
33976 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
33977 var t1slo4 = s[8] ^ lo
33978 var t1shi4 = s[9] ^ hi
33979 var t1slo9 = s[18] ^ lo
33980 var t1shi9 = s[19] ^ hi
33981 var t1slo14 = s[28] ^ lo
33982 var t1shi14 = s[29] ^ hi
33983 var t1slo19 = s[38] ^ lo
33984 var t1shi19 = s[39] ^ hi
33985 var t1slo24 = s[48] ^ lo
33986 var t1shi24 = s[49] ^ hi
33987
33988 // rho & pi
33989 var t2slo0 = t1slo0
33990 var t2shi0 = t1shi0
33991 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
33992 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
33993 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
33994 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
33995 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
33996 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
33997 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
33998 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
33999 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34000 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34001 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34002 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34003 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34004 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34005 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34006 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34007 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34008 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34009 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34010 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34011 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34012 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34013 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34014 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34015 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34016 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34017 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34018 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34019 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34020 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34021 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34022 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34023 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34024 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34025 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34026 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34027 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34028 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34029 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34030 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34031 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34032 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34033 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34034 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34035 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34036 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34037 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34038 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34039
34040 // chi
34041 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34042 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34043 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34044 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34045 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34046 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34047 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34048 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34049 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34050 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34051 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34052 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34053 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34054 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34055 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34056 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34057 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34058 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34059 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34060 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34061 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34062 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34063 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34064 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34065 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34066 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34067 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34068 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34069 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34070 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34071 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34072 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34073 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34074 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34075 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34076 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34077 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34078 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34079 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34080 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34081 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34082 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34083 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34084 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34085 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34086 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34087 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34088 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34089 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34090 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34091
34092 // iota
34093 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34094 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34095 }
34096}
34097
34098},{}],70:[function(require,module,exports){
34099(function (Buffer){
34100'use strict'
34101var keccakState = require('./keccak-state-unroll')
34102
34103function Keccak () {
34104 // much faster than `new Array(50)`
34105 this.state = [
34106 0, 0, 0, 0, 0,
34107 0, 0, 0, 0, 0,
34108 0, 0, 0, 0, 0,
34109 0, 0, 0, 0, 0,
34110 0, 0, 0, 0, 0
34111 ]
34112
34113 this.blockSize = null
34114 this.count = 0
34115 this.squeezing = false
34116}
34117
34118Keccak.prototype.initialize = function (rate, capacity) {
34119 for (var i = 0; i < 50; ++i) this.state[i] = 0
34120 this.blockSize = rate / 8
34121 this.count = 0
34122 this.squeezing = false
34123}
34124
34125Keccak.prototype.absorb = function (data) {
34126 for (var i = 0; i < data.length; ++i) {
34127 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34128 this.count += 1
34129 if (this.count === this.blockSize) {
34130 keccakState.p1600(this.state)
34131 this.count = 0
34132 }
34133 }
34134}
34135
34136Keccak.prototype.absorbLastFewBits = function (bits) {
34137 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34138 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34139 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34140 keccakState.p1600(this.state)
34141 this.count = 0
34142 this.squeezing = true
34143}
34144
34145Keccak.prototype.squeeze = function (length) {
34146 if (!this.squeezing) this.absorbLastFewBits(0x01)
34147
34148 var output = Buffer.allocUnsafe(length)
34149 for (var i = 0; i < length; ++i) {
34150 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34151 this.count += 1
34152 if (this.count === this.blockSize) {
34153 keccakState.p1600(this.state)
34154 this.count = 0
34155 }
34156 }
34157
34158 return output
34159}
34160
34161Keccak.prototype.copy = function (dest) {
34162 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34163 dest.blockSize = this.blockSize
34164 dest.count = this.count
34165 dest.squeezing = this.squeezing
34166}
34167
34168module.exports = Keccak
34169
34170}).call(this,require("buffer").Buffer)
34171},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34172(function (Buffer){
34173/*
34174CryptoJS v3.1.2
34175code.google.com/p/crypto-js
34176(c) 2009-2013 by Jeff Mott. All rights reserved.
34177code.google.com/p/crypto-js/wiki/License
34178*/
34179/** @preserve
34180(c) 2012 by Cédric Mesnil. All rights reserved.
34181
34182Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
34183
34184 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34185 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
34186
34187THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34188*/
34189
34190// constants table
34191var zl = [
34192 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
34193 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
34194 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
34195 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
34196 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
34197]
34198
34199var zr = [
34200 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
34201 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
34202 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
34203 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34204 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
34205]
34206
34207var sl = [
34208 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
34209 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
34210 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
34211 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
34212 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
34213]
34214
34215var sr = [
34216 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
34217 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
34218 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
34219 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
34220 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
34221]
34222
34223var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
34224var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
34225
34226function bytesToWords (bytes) {
34227 var words = []
34228 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
34229 words[b >>> 5] |= bytes[i] << (24 - b % 32)
34230 }
34231 return words
34232}
34233
34234function wordsToBytes (words) {
34235 var bytes = []
34236 for (var b = 0; b < words.length * 32; b += 8) {
34237 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
34238 }
34239 return bytes
34240}
34241
34242function processBlock (H, M, offset) {
34243 // swap endian
34244 for (var i = 0; i < 16; i++) {
34245 var offset_i = offset + i
34246 var M_offset_i = M[offset_i]
34247
34248 // Swap
34249 M[offset_i] = (
34250 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
34251 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
34252 )
34253 }
34254
34255 // Working variables
34256 var al, bl, cl, dl, el
34257 var ar, br, cr, dr, er
34258
34259 ar = al = H[0]
34260 br = bl = H[1]
34261 cr = cl = H[2]
34262 dr = dl = H[3]
34263 er = el = H[4]
34264
34265 // computation
34266 var t
34267 for (i = 0; i < 80; i += 1) {
34268 t = (al + M[offset + zl[i]]) | 0
34269 if (i < 16) {
34270 t += f1(bl, cl, dl) + hl[0]
34271 } else if (i < 32) {
34272 t += f2(bl, cl, dl) + hl[1]
34273 } else if (i < 48) {
34274 t += f3(bl, cl, dl) + hl[2]
34275 } else if (i < 64) {
34276 t += f4(bl, cl, dl) + hl[3]
34277 } else {// if (i<80) {
34278 t += f5(bl, cl, dl) + hl[4]
34279 }
34280 t = t | 0
34281 t = rotl(t, sl[i])
34282 t = (t + el) | 0
34283 al = el
34284 el = dl
34285 dl = rotl(cl, 10)
34286 cl = bl
34287 bl = t
34288
34289 t = (ar + M[offset + zr[i]]) | 0
34290 if (i < 16) {
34291 t += f5(br, cr, dr) + hr[0]
34292 } else if (i < 32) {
34293 t += f4(br, cr, dr) + hr[1]
34294 } else if (i < 48) {
34295 t += f3(br, cr, dr) + hr[2]
34296 } else if (i < 64) {
34297 t += f2(br, cr, dr) + hr[3]
34298 } else {// if (i<80) {
34299 t += f1(br, cr, dr) + hr[4]
34300 }
34301
34302 t = t | 0
34303 t = rotl(t, sr[i])
34304 t = (t + er) | 0
34305 ar = er
34306 er = dr
34307 dr = rotl(cr, 10)
34308 cr = br
34309 br = t
34310 }
34311
34312 // intermediate hash value
34313 t = (H[1] + cl + dr) | 0
34314 H[1] = (H[2] + dl + er) | 0
34315 H[2] = (H[3] + el + ar) | 0
34316 H[3] = (H[4] + al + br) | 0
34317 H[4] = (H[0] + bl + cr) | 0
34318 H[0] = t
34319}
34320
34321function f1 (x, y, z) {
34322 return ((x) ^ (y) ^ (z))
34323}
34324
34325function f2 (x, y, z) {
34326 return (((x) & (y)) | ((~x) & (z)))
34327}
34328
34329function f3 (x, y, z) {
34330 return (((x) | (~(y))) ^ (z))
34331}
34332
34333function f4 (x, y, z) {
34334 return (((x) & (z)) | ((y) & (~(z))))
34335}
34336
34337function f5 (x, y, z) {
34338 return ((x) ^ ((y) | (~(z))))
34339}
34340
34341function rotl (x, n) {
34342 return (x << n) | (x >>> (32 - n))
34343}
34344
34345function ripemd160 (message) {
34346 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
34347
34348 if (typeof message === 'string') {
34349 message = new Buffer(message, 'utf8')
34350 }
34351
34352 var m = bytesToWords(message)
34353
34354 var nBitsLeft = message.length * 8
34355 var nBitsTotal = message.length * 8
34356
34357 // Add padding
34358 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
34359 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
34360 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
34361 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
34362 )
34363
34364 for (var i = 0; i < m.length; i += 16) {
34365 processBlock(H, m, i)
34366 }
34367
34368 // swap endian
34369 for (i = 0; i < 5; i++) {
34370 // shortcut
34371 var H_i = H[i]
34372
34373 // Swap
34374 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
34375 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
34376 }
34377
34378 var digestbytes = wordsToBytes(H)
34379 return new Buffer(digestbytes)
34380}
34381
34382module.exports = ripemd160
34383
34384}).call(this,require("buffer").Buffer)
34385},{"buffer":5}],72:[function(require,module,exports){
34386(function (Buffer){
34387const assert = require('assert')
34388/**
34389 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
34390 * This function takes in a data, convert it to buffer if not, and a length for recursion
34391 *
34392 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34393 * @returns {Buffer} - returns buffer of encoded data
34394 **/
34395exports.encode = function (input) {
34396 if (input instanceof Array) {
34397 var output = []
34398 for (var i = 0; i < input.length; i++) {
34399 output.push(exports.encode(input[i]))
34400 }
34401 var buf = Buffer.concat(output)
34402 return Buffer.concat([encodeLength(buf.length, 192), buf])
34403 } else {
34404 input = toBuffer(input)
34405 if (input.length === 1 && input[0] < 128) {
34406 return input
34407 } else {
34408 return Buffer.concat([encodeLength(input.length, 128), input])
34409 }
34410 }
34411}
34412
34413function safeParseInt (v, base) {
34414 if (v.slice(0, 2) === '00') {
34415 throw (new Error('invalid RLP: extra zeros'))
34416 }
34417
34418 return parseInt(v, base)
34419}
34420
34421function encodeLength (len, offset) {
34422 if (len < 56) {
34423 return new Buffer([len + offset])
34424 } else {
34425 var hexLength = intToHex(len)
34426 var lLength = hexLength.length / 2
34427 var firstByte = intToHex(offset + 55 + lLength)
34428 return new Buffer(firstByte + hexLength, 'hex')
34429 }
34430}
34431
34432/**
34433 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
34434 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34435 * @returns {Array} - returns decode Array of Buffers containg the original message
34436 **/
34437exports.decode = function (input, stream) {
34438 if (!input || input.length === 0) {
34439 return new Buffer([])
34440 }
34441
34442 input = toBuffer(input)
34443 var decoded = _decode(input)
34444
34445 if (stream) {
34446 return decoded
34447 }
34448
34449 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
34450 return decoded.data
34451}
34452
34453exports.getLength = function (input) {
34454 if (!input || input.length === 0) {
34455 return new Buffer([])
34456 }
34457
34458 input = toBuffer(input)
34459 var firstByte = input[0]
34460 if (firstByte <= 0x7f) {
34461 return input.length
34462 } else if (firstByte <= 0xb7) {
34463 return firstByte - 0x7f
34464 } else if (firstByte <= 0xbf) {
34465 return firstByte - 0xb6
34466 } else if (firstByte <= 0xf7) {
34467 // a list between 0-55 bytes long
34468 return firstByte - 0xbf
34469 } else {
34470 // a list over 55 bytes long
34471 var llength = firstByte - 0xf6
34472 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34473 return llength + length
34474 }
34475}
34476
34477function _decode (input) {
34478 var length, llength, data, innerRemainder, d
34479 var decoded = []
34480 var firstByte = input[0]
34481
34482 if (firstByte <= 0x7f) {
34483 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
34484 return {
34485 data: input.slice(0, 1),
34486 remainder: input.slice(1)
34487 }
34488 } else if (firstByte <= 0xb7) {
34489 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
34490 // The range of the first byte is [0x80, 0xb7]
34491 length = firstByte - 0x7f
34492
34493 // set 0x80 null to 0
34494 if (firstByte === 0x80) {
34495 data = new Buffer([])
34496 } else {
34497 data = input.slice(1, length)
34498 }
34499
34500 if (length === 2 && data[0] < 0x80) {
34501 throw new Error('invalid rlp encoding: byte must be less 0x80')
34502 }
34503
34504 return {
34505 data: data,
34506 remainder: input.slice(length)
34507 }
34508 } else if (firstByte <= 0xbf) {
34509 llength = firstByte - 0xb6
34510 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34511 data = input.slice(llength, length + llength)
34512 if (data.length < length) {
34513 throw (new Error('invalid RLP'))
34514 }
34515
34516 return {
34517 data: data,
34518 remainder: input.slice(length + llength)
34519 }
34520 } else if (firstByte <= 0xf7) {
34521 // a list between 0-55 bytes long
34522 length = firstByte - 0xbf
34523 innerRemainder = input.slice(1, length)
34524 while (innerRemainder.length) {
34525 d = _decode(innerRemainder)
34526 decoded.push(d.data)
34527 innerRemainder = d.remainder
34528 }
34529
34530 return {
34531 data: decoded,
34532 remainder: input.slice(length)
34533 }
34534 } else {
34535 // a list over 55 bytes long
34536 llength = firstByte - 0xf6
34537 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34538 var totalLength = llength + length
34539 if (totalLength > input.length) {
34540 throw new Error('invalid rlp: total length is larger than the data')
34541 }
34542
34543 innerRemainder = input.slice(llength, totalLength)
34544 if (innerRemainder.length === 0) {
34545 throw new Error('invalid rlp, List has a invalid length')
34546 }
34547
34548 while (innerRemainder.length) {
34549 d = _decode(innerRemainder)
34550 decoded.push(d.data)
34551 innerRemainder = d.remainder
34552 }
34553 return {
34554 data: decoded,
34555 remainder: input.slice(totalLength)
34556 }
34557 }
34558}
34559
34560function isHexPrefixed (str) {
34561 return str.slice(0, 2) === '0x'
34562}
34563
34564// Removes 0x from a given String
34565function stripHexPrefix (str) {
34566 if (typeof str !== 'string') {
34567 return str
34568 }
34569 return isHexPrefixed(str) ? str.slice(2) : str
34570}
34571
34572function intToHex (i) {
34573 var hex = i.toString(16)
34574 if (hex.length % 2) {
34575 hex = '0' + hex
34576 }
34577
34578 return hex
34579}
34580
34581function padToEven (a) {
34582 if (a.length % 2) a = '0' + a
34583 return a
34584}
34585
34586function intToBuffer (i) {
34587 var hex = intToHex(i)
34588 return new Buffer(hex, 'hex')
34589}
34590
34591function toBuffer (v) {
34592 if (!Buffer.isBuffer(v)) {
34593 if (typeof v === 'string') {
34594 if (isHexPrefixed(v)) {
34595 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
34596 } else {
34597 v = new Buffer(v)
34598 }
34599 } else if (typeof v === 'number') {
34600 if (!v) {
34601 v = new Buffer([])
34602 } else {
34603 v = intToBuffer(v)
34604 }
34605 } else if (v === null || v === undefined) {
34606 v = new Buffer([])
34607 } else if (v.toArray) {
34608 // converts a BN to a Buffer
34609 v = new Buffer(v.toArray())
34610 } else {
34611 throw new Error('invalid type')
34612 }
34613 }
34614 return v
34615}
34616
34617}).call(this,require("buffer").Buffer)
34618},{"assert":1,"buffer":5}],73:[function(require,module,exports){
34619'use strict'
34620module.exports = require('./lib')(require('./lib/elliptic'))
34621
34622},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
34623(function (Buffer){
34624'use strict'
34625var toString = Object.prototype.toString
34626
34627// TypeError
34628exports.isArray = function (value, message) {
34629 if (!Array.isArray(value)) throw TypeError(message)
34630}
34631
34632exports.isBoolean = function (value, message) {
34633 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
34634}
34635
34636exports.isBuffer = function (value, message) {
34637 if (!Buffer.isBuffer(value)) throw TypeError(message)
34638}
34639
34640exports.isFunction = function (value, message) {
34641 if (toString.call(value) !== '[object Function]') throw TypeError(message)
34642}
34643
34644exports.isNumber = function (value, message) {
34645 if (toString.call(value) !== '[object Number]') throw TypeError(message)
34646}
34647
34648exports.isObject = function (value, message) {
34649 if (toString.call(value) !== '[object Object]') throw TypeError(message)
34650}
34651
34652// RangeError
34653exports.isBufferLength = function (buffer, length, message) {
34654 if (buffer.length !== length) throw RangeError(message)
34655}
34656
34657exports.isBufferLength2 = function (buffer, length1, length2, message) {
34658 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
34659}
34660
34661exports.isLengthGTZero = function (value, message) {
34662 if (value.length === 0) throw RangeError(message)
34663}
34664
34665exports.isNumberInInterval = function (number, x, y, message) {
34666 if (number <= x || number >= y) throw RangeError(message)
34667}
34668
34669}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
34670},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
34671(function (Buffer){
34672'use strict'
34673var bip66 = require('bip66')
34674
34675var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
34676 // begin
34677 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
34678 // private key
34679 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34680 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34681 // middle
34682 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
34683 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34684 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34685 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
34686 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
34687 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
34688 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34689 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
34690 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
34691 // public key
34692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34693 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34694 0x00
34695])
34696
34697var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
34698 // begin
34699 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
34700 // private key
34701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34703 // middle
34704 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
34705 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34706 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34707 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
34708 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
34709 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
34710 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
34711 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
34712 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34713 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
34714 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
34715 // public key
34716 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34717 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34719 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34720 0x00
34721])
34722
34723var ZERO_BUFFER_32 = new Buffer([
34724 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34725 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
34726])
34727
34728exports.privateKeyExport = function (privateKey, publicKey, compressed) {
34729 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
34730 privateKey.copy(result, compressed ? 8 : 9)
34731 publicKey.copy(result, compressed ? 181 : 214)
34732 return result
34733}
34734
34735exports.privateKeyImport = function (privateKey) {
34736 var length = privateKey.length
34737
34738 // sequence header
34739 var index = 0
34740 if (length < index + 1 || privateKey[index] !== 0x30) return
34741 index += 1
34742
34743 // sequence length constructor
34744 if (length < index + 1 || !(privateKey[index] & 0x80)) return
34745
34746 var lenb = privateKey[index] & 0x7f
34747 index += 1
34748 if (lenb < 1 || lenb > 2) return
34749 if (length < index + lenb) return
34750
34751 // sequence length
34752 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
34753 index += lenb
34754 if (length < index + len) return
34755
34756 // sequence element 0: version number (=1)
34757 if (length < index + 3 ||
34758 privateKey[index] !== 0x02 ||
34759 privateKey[index + 1] !== 0x01 ||
34760 privateKey[index + 2] !== 0x01) {
34761 return
34762 }
34763 index += 3
34764
34765 // sequence element 1: octet string, up to 32 bytes
34766 if (length < index + 2 ||
34767 privateKey[index] !== 0x04 ||
34768 privateKey[index + 1] > 0x20 ||
34769 length < index + 2 + privateKey[index + 1]) {
34770 return
34771 }
34772
34773 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
34774}
34775
34776exports.signatureExport = function (sigObj) {
34777 var r = Buffer.concat([new Buffer([0]), sigObj.r])
34778 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
34779
34780 var s = Buffer.concat([new Buffer([0]), sigObj.s])
34781 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
34782
34783 return bip66.encode(r.slice(posR), s.slice(posS))
34784}
34785
34786exports.signatureImport = function (sig) {
34787 var r = new Buffer(ZERO_BUFFER_32)
34788 var s = new Buffer(ZERO_BUFFER_32)
34789
34790 try {
34791 var sigObj = bip66.decode(sig)
34792 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
34793 if (sigObj.r.length > 32) throw new Error('R length is too long')
34794 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
34795 if (sigObj.s.length > 32) throw new Error('S length is too long')
34796 } catch (err) {
34797 return
34798 }
34799
34800 sigObj.r.copy(r, 32 - sigObj.r.length)
34801 sigObj.s.copy(s, 32 - sigObj.s.length)
34802
34803 return { r: r, s: s }
34804}
34805
34806exports.signatureImportLax = function (sig) {
34807 var r = new Buffer(ZERO_BUFFER_32)
34808 var s = new Buffer(ZERO_BUFFER_32)
34809
34810 var length = sig.length
34811 var index = 0
34812
34813 // sequence tag byte
34814 if (sig[index++] !== 0x30) return
34815
34816 // sequence length byte
34817 var lenbyte = sig[index++]
34818 if (lenbyte & 0x80) {
34819 index += lenbyte - 0x80
34820 if (index > length) return
34821 }
34822
34823 // sequence tag byte for r
34824 if (sig[index++] !== 0x02) return
34825
34826 // length for r
34827 var rlen = sig[index++]
34828 if (rlen & 0x80) {
34829 lenbyte = rlen - 0x80
34830 if (index + lenbyte > length) return
34831 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
34832 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
34833 }
34834 if (rlen > length - index) return
34835 var rindex = index
34836 index += rlen
34837
34838 // sequence tag byte for s
34839 if (sig[index++] !== 0x02) return
34840
34841 // length for s
34842 var slen = sig[index++]
34843 if (slen & 0x80) {
34844 lenbyte = slen - 0x80
34845 if (index + lenbyte > length) return
34846 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
34847 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
34848 }
34849 if (slen > length - index) return
34850 var sindex = index
34851 index += slen
34852
34853 // ignore leading zeros in r
34854 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
34855 // copy r value
34856 if (rlen > 32) return
34857 var rvalue = sig.slice(rindex, rindex + rlen)
34858 rvalue.copy(r, 32 - rvalue.length)
34859
34860 // ignore leading zeros in s
34861 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
34862 // copy s value
34863 if (slen > 32) return
34864 var svalue = sig.slice(sindex, sindex + slen)
34865 svalue.copy(s, 32 - svalue.length)
34866
34867 return { r: r, s: s }
34868}
34869
34870}).call(this,require("buffer").Buffer)
34871},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
34872(function (Buffer){
34873'use strict'
34874var createHash = require('create-hash')
34875var BN = require('bn.js')
34876var EC = require('elliptic').ec
34877
34878var messages = require('../messages.json')
34879
34880var ec = new EC('secp256k1')
34881var ecparams = ec.curve
34882
34883function loadCompressedPublicKey (first, xBuffer) {
34884 var x = new BN(xBuffer)
34885
34886 // overflow
34887 if (x.cmp(ecparams.p) >= 0) return null
34888 x = x.toRed(ecparams.red)
34889
34890 // compute corresponding Y
34891 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
34892 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
34893
34894 return ec.keyPair({ pub: { x: x, y: y } })
34895}
34896
34897function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
34898 var x = new BN(xBuffer)
34899 var y = new BN(yBuffer)
34900
34901 // overflow
34902 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
34903
34904 x = x.toRed(ecparams.red)
34905 y = y.toRed(ecparams.red)
34906
34907 // is odd flag
34908 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
34909
34910 // x*x*x + b = y*y
34911 var x3 = x.redSqr().redIMul(x)
34912 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
34913
34914 return ec.keyPair({ pub: { x: x, y: y } })
34915}
34916
34917function loadPublicKey (publicKey) {
34918 var first = publicKey[0]
34919 switch (first) {
34920 case 0x02:
34921 case 0x03:
34922 if (publicKey.length !== 33) return null
34923 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
34924 case 0x04:
34925 case 0x06:
34926 case 0x07:
34927 if (publicKey.length !== 65) return null
34928 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
34929 default:
34930 return null
34931 }
34932}
34933
34934exports.privateKeyVerify = function (privateKey) {
34935 var bn = new BN(privateKey)
34936 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
34937}
34938
34939exports.privateKeyExport = function (privateKey, compressed) {
34940 var d = new BN(privateKey)
34941 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
34942
34943 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
34944}
34945
34946exports.privateKeyTweakAdd = function (privateKey, tweak) {
34947 var bn = new BN(tweak)
34948 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
34949
34950 bn.iadd(new BN(privateKey))
34951 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
34952 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
34953
34954 return bn.toArrayLike(Buffer, 'be', 32)
34955}
34956
34957exports.privateKeyTweakMul = function (privateKey, tweak) {
34958 var bn = new BN(tweak)
34959 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
34960
34961 bn.imul(new BN(privateKey))
34962 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
34963
34964 return bn.toArrayLike(Buffer, 'be', 32)
34965}
34966
34967exports.publicKeyCreate = function (privateKey, compressed) {
34968 var d = new BN(privateKey)
34969 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
34970
34971 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
34972}
34973
34974exports.publicKeyConvert = function (publicKey, compressed) {
34975 var pair = loadPublicKey(publicKey)
34976 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
34977
34978 return new Buffer(pair.getPublic(compressed, true))
34979}
34980
34981exports.publicKeyVerify = function (publicKey) {
34982 return loadPublicKey(publicKey) !== null
34983}
34984
34985exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
34986 var pair = loadPublicKey(publicKey)
34987 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
34988
34989 tweak = new BN(tweak)
34990 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
34991
34992 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
34993}
34994
34995exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
34996 var pair = loadPublicKey(publicKey)
34997 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
34998
34999 tweak = new BN(tweak)
35000 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
35001
35002 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35003}
35004
35005exports.publicKeyCombine = function (publicKeys, compressed) {
35006 var pairs = new Array(publicKeys.length)
35007 for (var i = 0; i < publicKeys.length; ++i) {
35008 pairs[i] = loadPublicKey(publicKeys[i])
35009 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35010 }
35011
35012 var point = pairs[0].pub
35013 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35014 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
35015
35016 return new Buffer(point.encode(true, compressed))
35017}
35018
35019exports.signatureNormalize = function (signature) {
35020 var r = new BN(signature.slice(0, 32))
35021 var s = new BN(signature.slice(32, 64))
35022 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35023
35024 var result = new Buffer(signature)
35025 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35026
35027 return result
35028}
35029
35030exports.signatureExport = function (signature) {
35031 var r = signature.slice(0, 32)
35032 var s = signature.slice(32, 64)
35033 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35034
35035 return { r: r, s: s }
35036}
35037
35038exports.signatureImport = function (sigObj) {
35039 var r = new BN(sigObj.r)
35040 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35041
35042 var s = new BN(sigObj.s)
35043 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35044
35045 return Buffer.concat([
35046 r.toArrayLike(Buffer, 'be', 32),
35047 s.toArrayLike(Buffer, 'be', 32)
35048 ])
35049}
35050
35051exports.sign = function (message, privateKey, noncefn, data) {
35052 if (typeof noncefn === 'function') {
35053 var getNonce = noncefn
35054 noncefn = function (counter) {
35055 var nonce = getNonce(message, privateKey, null, data, counter)
35056 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
35057
35058 return new BN(nonce)
35059 }
35060 }
35061
35062 var d = new BN(privateKey)
35063 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
35064
35065 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35066 return {
35067 signature: Buffer.concat([
35068 result.r.toArrayLike(Buffer, 'be', 32),
35069 result.s.toArrayLike(Buffer, 'be', 32)
35070 ]),
35071 recovery: result.recoveryParam
35072 }
35073}
35074
35075exports.verify = function (message, signature, publicKey) {
35076 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35077
35078 var sigr = new BN(sigObj.r)
35079 var sigs = new BN(sigObj.s)
35080 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35081 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
35082
35083 var pair = loadPublicKey(publicKey)
35084 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35085
35086 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35087}
35088
35089exports.recover = function (message, signature, recovery, compressed) {
35090 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35091
35092 var sigr = new BN(sigObj.r)
35093 var sigs = new BN(sigObj.s)
35094 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35095
35096 try {
35097 if (sigr.isZero() || sigs.isZero()) throw new Error()
35098
35099 var point = ec.recoverPubKey(message, sigObj, recovery)
35100 return new Buffer(point.encode(true, compressed))
35101 } catch (err) {
35102 throw new Error(messages.ECDSA_RECOVER_FAIL)
35103 }
35104}
35105
35106exports.ecdh = function (publicKey, privateKey) {
35107 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35108 return createHash('sha256').update(shared).digest()
35109}
35110
35111exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35112 var pair = loadPublicKey(publicKey)
35113 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35114
35115 var scalar = new BN(privateKey)
35116 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35117
35118 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
35119}
35120
35121}).call(this,require("buffer").Buffer)
35122},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35123'use strict'
35124var assert = require('./assert')
35125var der = require('./der')
35126var messages = require('./messages.json')
35127
35128function initCompressedValue (value, defaultValue) {
35129 if (value === undefined) return defaultValue
35130
35131 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35132 return value
35133}
35134
35135module.exports = function (secp256k1) {
35136 return {
35137 privateKeyVerify: function (privateKey) {
35138 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35139 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35140 },
35141
35142 privateKeyExport: function (privateKey, compressed) {
35143 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35144 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35145
35146 compressed = initCompressedValue(compressed, true)
35147 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
35148
35149 return der.privateKeyExport(privateKey, publicKey, compressed)
35150 },
35151
35152 privateKeyImport: function (privateKey) {
35153 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35154
35155 privateKey = der.privateKeyImport(privateKey)
35156 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
35157
35158 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35159 },
35160
35161 privateKeyTweakAdd: function (privateKey, tweak) {
35162 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35163 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35164
35165 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35166 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35167
35168 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35169 },
35170
35171 privateKeyTweakMul: function (privateKey, tweak) {
35172 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35173 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35174
35175 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35176 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35177
35178 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35179 },
35180
35181 publicKeyCreate: function (privateKey, compressed) {
35182 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35183 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35184
35185 compressed = initCompressedValue(compressed, true)
35186
35187 return secp256k1.publicKeyCreate(privateKey, compressed)
35188 },
35189
35190 publicKeyConvert: function (publicKey, compressed) {
35191 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35192 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35193
35194 compressed = initCompressedValue(compressed, true)
35195
35196 return secp256k1.publicKeyConvert(publicKey, compressed)
35197 },
35198
35199 publicKeyVerify: function (publicKey) {
35200 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35201 return secp256k1.publicKeyVerify(publicKey)
35202 },
35203
35204 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
35205 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35206 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35207
35208 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35209 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35210
35211 compressed = initCompressedValue(compressed, true)
35212
35213 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
35214 },
35215
35216 publicKeyTweakMul: function (publicKey, tweak, compressed) {
35217 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35218 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35219
35220 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35221 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35222
35223 compressed = initCompressedValue(compressed, true)
35224
35225 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
35226 },
35227
35228 publicKeyCombine: function (publicKeys, compressed) {
35229 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
35230 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
35231 for (var i = 0; i < publicKeys.length; ++i) {
35232 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
35233 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35234 }
35235
35236 compressed = initCompressedValue(compressed, true)
35237
35238 return secp256k1.publicKeyCombine(publicKeys, compressed)
35239 },
35240
35241 signatureNormalize: function (signature) {
35242 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35243 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35244
35245 return secp256k1.signatureNormalize(signature)
35246 },
35247
35248 signatureExport: function (signature) {
35249 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35250 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35251
35252 var sigObj = secp256k1.signatureExport(signature)
35253 return der.signatureExport(sigObj)
35254 },
35255
35256 signatureImport: function (sig) {
35257 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35258 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35259
35260 var sigObj = der.signatureImport(sig)
35261 if (sigObj) return secp256k1.signatureImport(sigObj)
35262
35263 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35264 },
35265
35266 signatureImportLax: function (sig) {
35267 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35268 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35269
35270 var sigObj = der.signatureImportLax(sig)
35271 if (sigObj) return secp256k1.signatureImport(sigObj)
35272
35273 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35274 },
35275
35276 sign: function (message, privateKey, options) {
35277 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35278 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35279
35280 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35281 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35282
35283 var data = null
35284 var noncefn = null
35285 if (options !== undefined) {
35286 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
35287
35288 if (options.data !== undefined) {
35289 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
35290 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
35291 data = options.data
35292 }
35293
35294 if (options.noncefn !== undefined) {
35295 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
35296 noncefn = options.noncefn
35297 }
35298 }
35299
35300 return secp256k1.sign(message, privateKey, noncefn, data)
35301 },
35302
35303 verify: function (message, signature, publicKey) {
35304 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35305 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35306
35307 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35308 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35309
35310 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35311 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35312
35313 return secp256k1.verify(message, signature, publicKey)
35314 },
35315
35316 recover: function (message, signature, recovery, compressed) {
35317 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35318 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35319
35320 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35321 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35322
35323 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
35324 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
35325
35326 compressed = initCompressedValue(compressed, true)
35327
35328 return secp256k1.recover(message, signature, recovery, compressed)
35329 },
35330
35331 ecdh: function (publicKey, privateKey) {
35332 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35333 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35334
35335 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35336 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35337
35338 return secp256k1.ecdh(publicKey, privateKey)
35339 },
35340
35341 ecdhUnsafe: function (publicKey, privateKey, compressed) {
35342 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35343 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35344
35345 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35346 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35347
35348 compressed = initCompressedValue(compressed, true)
35349
35350 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
35351 }
35352 }
35353}
35354
35355},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
35356module.exports={
35357 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
35358 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
35359 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
35360 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
35361 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35362 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
35363 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
35364 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
35365 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
35366 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
35367 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
35368 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
35369 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
35370 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
35371 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35372 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
35373 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
35374 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
35375 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
35376 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
35377 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
35378 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
35379 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
35380 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
35381 "MSG32_TYPE_INVALID": "message should be a Buffer",
35382 "MSG32_LENGTH_INVALID": "message length is invalid",
35383 "OPTIONS_TYPE_INVALID": "options should be an Object",
35384 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
35385 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
35386 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
35387 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
35388 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
35389 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
35390 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
35391}
35392
35393},{}],79:[function(require,module,exports){
35394(function (Buffer){
35395// prototype class for hash functions
35396function Hash (blockSize, finalSize) {
35397 this._block = new Buffer(blockSize)
35398 this._finalSize = finalSize
35399 this._blockSize = blockSize
35400 this._len = 0
35401 this._s = 0
35402}
35403
35404Hash.prototype.update = function (data, enc) {
35405 if (typeof data === 'string') {
35406 enc = enc || 'utf8'
35407 data = new Buffer(data, enc)
35408 }
35409
35410 var l = this._len += data.length
35411 var s = this._s || 0
35412 var f = 0
35413 var buffer = this._block
35414
35415 while (s < l) {
35416 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
35417 var ch = (t - f)
35418
35419 for (var i = 0; i < ch; i++) {
35420 buffer[(s % this._blockSize) + i] = data[i + f]
35421 }
35422
35423 s += ch
35424 f += ch
35425
35426 if ((s % this._blockSize) === 0) {
35427 this._update(buffer)
35428 }
35429 }
35430 this._s = s
35431
35432 return this
35433}
35434
35435Hash.prototype.digest = function (enc) {
35436 // Suppose the length of the message M, in bits, is l
35437 var l = this._len * 8
35438
35439 // Append the bit 1 to the end of the message
35440 this._block[this._len % this._blockSize] = 0x80
35441
35442 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
35443 this._block.fill(0, this._len % this._blockSize + 1)
35444
35445 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
35446 this._update(this._block)
35447 this._block.fill(0)
35448 }
35449
35450 // to this append the block which is equal to the number l written in binary
35451 // TODO: handle case where l is > Math.pow(2, 29)
35452 this._block.writeInt32BE(l, this._blockSize - 4)
35453
35454 var hash = this._update(this._block) || this._hash()
35455
35456 return enc ? hash.toString(enc) : hash
35457}
35458
35459Hash.prototype._update = function () {
35460 throw new Error('_update must be implemented by subclass')
35461}
35462
35463module.exports = Hash
35464
35465}).call(this,require("buffer").Buffer)
35466},{"buffer":5}],80:[function(require,module,exports){
35467var exports = module.exports = function SHA (algorithm) {
35468 algorithm = algorithm.toLowerCase()
35469
35470 var Algorithm = exports[algorithm]
35471 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
35472
35473 return new Algorithm()
35474}
35475
35476exports.sha = require('./sha')
35477exports.sha1 = require('./sha1')
35478exports.sha224 = require('./sha224')
35479exports.sha256 = require('./sha256')
35480exports.sha384 = require('./sha384')
35481exports.sha512 = require('./sha512')
35482
35483},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
35484(function (Buffer){
35485/*
35486 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
35487 * in FIPS PUB 180-1
35488 * This source code is derived from sha1.js of the same repository.
35489 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
35490 * operation was added.
35491 */
35492
35493var inherits = require('inherits')
35494var Hash = require('./hash')
35495
35496var K = [
35497 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35498]
35499
35500var W = new Array(80)
35501
35502function Sha () {
35503 this.init()
35504 this._w = W
35505
35506 Hash.call(this, 64, 56)
35507}
35508
35509inherits(Sha, Hash)
35510
35511Sha.prototype.init = function () {
35512 this._a = 0x67452301
35513 this._b = 0xefcdab89
35514 this._c = 0x98badcfe
35515 this._d = 0x10325476
35516 this._e = 0xc3d2e1f0
35517
35518 return this
35519}
35520
35521function rotl5 (num) {
35522 return (num << 5) | (num >>> 27)
35523}
35524
35525function rotl30 (num) {
35526 return (num << 30) | (num >>> 2)
35527}
35528
35529function ft (s, b, c, d) {
35530 if (s === 0) return (b & c) | ((~b) & d)
35531 if (s === 2) return (b & c) | (b & d) | (c & d)
35532 return b ^ c ^ d
35533}
35534
35535Sha.prototype._update = function (M) {
35536 var W = this._w
35537
35538 var a = this._a | 0
35539 var b = this._b | 0
35540 var c = this._c | 0
35541 var d = this._d | 0
35542 var e = this._e | 0
35543
35544 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35545 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
35546
35547 for (var j = 0; j < 80; ++j) {
35548 var s = ~~(j / 20)
35549 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35550
35551 e = d
35552 d = c
35553 c = rotl30(b)
35554 b = a
35555 a = t
35556 }
35557
35558 this._a = (a + this._a) | 0
35559 this._b = (b + this._b) | 0
35560 this._c = (c + this._c) | 0
35561 this._d = (d + this._d) | 0
35562 this._e = (e + this._e) | 0
35563}
35564
35565Sha.prototype._hash = function () {
35566 var H = new Buffer(20)
35567
35568 H.writeInt32BE(this._a | 0, 0)
35569 H.writeInt32BE(this._b | 0, 4)
35570 H.writeInt32BE(this._c | 0, 8)
35571 H.writeInt32BE(this._d | 0, 12)
35572 H.writeInt32BE(this._e | 0, 16)
35573
35574 return H
35575}
35576
35577module.exports = Sha
35578
35579}).call(this,require("buffer").Buffer)
35580},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
35581(function (Buffer){
35582/*
35583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
35584 * in FIPS PUB 180-1
35585 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
35586 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35587 * Distributed under the BSD License
35588 * See http://pajhome.org.uk/crypt/md5 for details.
35589 */
35590
35591var inherits = require('inherits')
35592var Hash = require('./hash')
35593
35594var K = [
35595 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35596]
35597
35598var W = new Array(80)
35599
35600function Sha1 () {
35601 this.init()
35602 this._w = W
35603
35604 Hash.call(this, 64, 56)
35605}
35606
35607inherits(Sha1, Hash)
35608
35609Sha1.prototype.init = function () {
35610 this._a = 0x67452301
35611 this._b = 0xefcdab89
35612 this._c = 0x98badcfe
35613 this._d = 0x10325476
35614 this._e = 0xc3d2e1f0
35615
35616 return this
35617}
35618
35619function rotl1 (num) {
35620 return (num << 1) | (num >>> 31)
35621}
35622
35623function rotl5 (num) {
35624 return (num << 5) | (num >>> 27)
35625}
35626
35627function rotl30 (num) {
35628 return (num << 30) | (num >>> 2)
35629}
35630
35631function ft (s, b, c, d) {
35632 if (s === 0) return (b & c) | ((~b) & d)
35633 if (s === 2) return (b & c) | (b & d) | (c & d)
35634 return b ^ c ^ d
35635}
35636
35637Sha1.prototype._update = function (M) {
35638 var W = this._w
35639
35640 var a = this._a | 0
35641 var b = this._b | 0
35642 var c = this._c | 0
35643 var d = this._d | 0
35644 var e = this._e | 0
35645
35646 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35647 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
35648
35649 for (var j = 0; j < 80; ++j) {
35650 var s = ~~(j / 20)
35651 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35652
35653 e = d
35654 d = c
35655 c = rotl30(b)
35656 b = a
35657 a = t
35658 }
35659
35660 this._a = (a + this._a) | 0
35661 this._b = (b + this._b) | 0
35662 this._c = (c + this._c) | 0
35663 this._d = (d + this._d) | 0
35664 this._e = (e + this._e) | 0
35665}
35666
35667Sha1.prototype._hash = function () {
35668 var H = new Buffer(20)
35669
35670 H.writeInt32BE(this._a | 0, 0)
35671 H.writeInt32BE(this._b | 0, 4)
35672 H.writeInt32BE(this._c | 0, 8)
35673 H.writeInt32BE(this._d | 0, 12)
35674 H.writeInt32BE(this._e | 0, 16)
35675
35676 return H
35677}
35678
35679module.exports = Sha1
35680
35681}).call(this,require("buffer").Buffer)
35682},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
35683(function (Buffer){
35684/**
35685 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35686 * in FIPS 180-2
35687 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35688 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35689 *
35690 */
35691
35692var inherits = require('inherits')
35693var Sha256 = require('./sha256')
35694var Hash = require('./hash')
35695
35696var W = new Array(64)
35697
35698function Sha224 () {
35699 this.init()
35700
35701 this._w = W // new Array(64)
35702
35703 Hash.call(this, 64, 56)
35704}
35705
35706inherits(Sha224, Sha256)
35707
35708Sha224.prototype.init = function () {
35709 this._a = 0xc1059ed8
35710 this._b = 0x367cd507
35711 this._c = 0x3070dd17
35712 this._d = 0xf70e5939
35713 this._e = 0xffc00b31
35714 this._f = 0x68581511
35715 this._g = 0x64f98fa7
35716 this._h = 0xbefa4fa4
35717
35718 return this
35719}
35720
35721Sha224.prototype._hash = function () {
35722 var H = new Buffer(28)
35723
35724 H.writeInt32BE(this._a, 0)
35725 H.writeInt32BE(this._b, 4)
35726 H.writeInt32BE(this._c, 8)
35727 H.writeInt32BE(this._d, 12)
35728 H.writeInt32BE(this._e, 16)
35729 H.writeInt32BE(this._f, 20)
35730 H.writeInt32BE(this._g, 24)
35731
35732 return H
35733}
35734
35735module.exports = Sha224
35736
35737}).call(this,require("buffer").Buffer)
35738},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
35739(function (Buffer){
35740/**
35741 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35742 * in FIPS 180-2
35743 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35744 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35745 *
35746 */
35747
35748var inherits = require('inherits')
35749var Hash = require('./hash')
35750
35751var K = [
35752 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
35753 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
35754 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
35755 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
35756 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
35757 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
35758 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
35759 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
35760 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
35761 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
35762 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
35763 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
35764 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
35765 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
35766 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
35767 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
35768]
35769
35770var W = new Array(64)
35771
35772function Sha256 () {
35773 this.init()
35774
35775 this._w = W // new Array(64)
35776
35777 Hash.call(this, 64, 56)
35778}
35779
35780inherits(Sha256, Hash)
35781
35782Sha256.prototype.init = function () {
35783 this._a = 0x6a09e667
35784 this._b = 0xbb67ae85
35785 this._c = 0x3c6ef372
35786 this._d = 0xa54ff53a
35787 this._e = 0x510e527f
35788 this._f = 0x9b05688c
35789 this._g = 0x1f83d9ab
35790 this._h = 0x5be0cd19
35791
35792 return this
35793}
35794
35795function ch (x, y, z) {
35796 return z ^ (x & (y ^ z))
35797}
35798
35799function maj (x, y, z) {
35800 return (x & y) | (z & (x | y))
35801}
35802
35803function sigma0 (x) {
35804 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
35805}
35806
35807function sigma1 (x) {
35808 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
35809}
35810
35811function gamma0 (x) {
35812 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
35813}
35814
35815function gamma1 (x) {
35816 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
35817}
35818
35819Sha256.prototype._update = function (M) {
35820 var W = this._w
35821
35822 var a = this._a | 0
35823 var b = this._b | 0
35824 var c = this._c | 0
35825 var d = this._d | 0
35826 var e = this._e | 0
35827 var f = this._f | 0
35828 var g = this._g | 0
35829 var h = this._h | 0
35830
35831 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35832 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
35833
35834 for (var j = 0; j < 64; ++j) {
35835 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
35836 var T2 = (sigma0(a) + maj(a, b, c)) | 0
35837
35838 h = g
35839 g = f
35840 f = e
35841 e = (d + T1) | 0
35842 d = c
35843 c = b
35844 b = a
35845 a = (T1 + T2) | 0
35846 }
35847
35848 this._a = (a + this._a) | 0
35849 this._b = (b + this._b) | 0
35850 this._c = (c + this._c) | 0
35851 this._d = (d + this._d) | 0
35852 this._e = (e + this._e) | 0
35853 this._f = (f + this._f) | 0
35854 this._g = (g + this._g) | 0
35855 this._h = (h + this._h) | 0
35856}
35857
35858Sha256.prototype._hash = function () {
35859 var H = new Buffer(32)
35860
35861 H.writeInt32BE(this._a, 0)
35862 H.writeInt32BE(this._b, 4)
35863 H.writeInt32BE(this._c, 8)
35864 H.writeInt32BE(this._d, 12)
35865 H.writeInt32BE(this._e, 16)
35866 H.writeInt32BE(this._f, 20)
35867 H.writeInt32BE(this._g, 24)
35868 H.writeInt32BE(this._h, 28)
35869
35870 return H
35871}
35872
35873module.exports = Sha256
35874
35875}).call(this,require("buffer").Buffer)
35876},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
35877(function (Buffer){
35878var inherits = require('inherits')
35879var SHA512 = require('./sha512')
35880var Hash = require('./hash')
35881
35882var W = new Array(160)
35883
35884function Sha384 () {
35885 this.init()
35886 this._w = W
35887
35888 Hash.call(this, 128, 112)
35889}
35890
35891inherits(Sha384, SHA512)
35892
35893Sha384.prototype.init = function () {
35894 this._ah = 0xcbbb9d5d
35895 this._bh = 0x629a292a
35896 this._ch = 0x9159015a
35897 this._dh = 0x152fecd8
35898 this._eh = 0x67332667
35899 this._fh = 0x8eb44a87
35900 this._gh = 0xdb0c2e0d
35901 this._hh = 0x47b5481d
35902
35903 this._al = 0xc1059ed8
35904 this._bl = 0x367cd507
35905 this._cl = 0x3070dd17
35906 this._dl = 0xf70e5939
35907 this._el = 0xffc00b31
35908 this._fl = 0x68581511
35909 this._gl = 0x64f98fa7
35910 this._hl = 0xbefa4fa4
35911
35912 return this
35913}
35914
35915Sha384.prototype._hash = function () {
35916 var H = new Buffer(48)
35917
35918 function writeInt64BE (h, l, offset) {
35919 H.writeInt32BE(h, offset)
35920 H.writeInt32BE(l, offset + 4)
35921 }
35922
35923 writeInt64BE(this._ah, this._al, 0)
35924 writeInt64BE(this._bh, this._bl, 8)
35925 writeInt64BE(this._ch, this._cl, 16)
35926 writeInt64BE(this._dh, this._dl, 24)
35927 writeInt64BE(this._eh, this._el, 32)
35928 writeInt64BE(this._fh, this._fl, 40)
35929
35930 return H
35931}
35932
35933module.exports = Sha384
35934
35935}).call(this,require("buffer").Buffer)
35936},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
35937(function (Buffer){
35938var inherits = require('inherits')
35939var Hash = require('./hash')
35940
35941var K = [
35942 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35943 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35944 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35945 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35946 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35947 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35948 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35949 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35950 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35951 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35952 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35953 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35954 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35955 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35956 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35957 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35958 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35959 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35960 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35961 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35962 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35963 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35964 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35965 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35966 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35967 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35968 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35969 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35970 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35971 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35972 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35973 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35974 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35975 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35976 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35977 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
35978 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
35979 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
35980 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
35981 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
35982]
35983
35984var W = new Array(160)
35985
35986function Sha512 () {
35987 this.init()
35988 this._w = W
35989
35990 Hash.call(this, 128, 112)
35991}
35992
35993inherits(Sha512, Hash)
35994
35995Sha512.prototype.init = function () {
35996 this._ah = 0x6a09e667
35997 this._bh = 0xbb67ae85
35998 this._ch = 0x3c6ef372
35999 this._dh = 0xa54ff53a
36000 this._eh = 0x510e527f
36001 this._fh = 0x9b05688c
36002 this._gh = 0x1f83d9ab
36003 this._hh = 0x5be0cd19
36004
36005 this._al = 0xf3bcc908
36006 this._bl = 0x84caa73b
36007 this._cl = 0xfe94f82b
36008 this._dl = 0x5f1d36f1
36009 this._el = 0xade682d1
36010 this._fl = 0x2b3e6c1f
36011 this._gl = 0xfb41bd6b
36012 this._hl = 0x137e2179
36013
36014 return this
36015}
36016
36017function Ch (x, y, z) {
36018 return z ^ (x & (y ^ z))
36019}
36020
36021function maj (x, y, z) {
36022 return (x & y) | (z & (x | y))
36023}
36024
36025function sigma0 (x, xl) {
36026 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36027}
36028
36029function sigma1 (x, xl) {
36030 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36031}
36032
36033function Gamma0 (x, xl) {
36034 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
36035}
36036
36037function Gamma0l (x, xl) {
36038 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36039}
36040
36041function Gamma1 (x, xl) {
36042 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
36043}
36044
36045function Gamma1l (x, xl) {
36046 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
36047}
36048
36049function getCarry (a, b) {
36050 return (a >>> 0) < (b >>> 0) ? 1 : 0
36051}
36052
36053Sha512.prototype._update = function (M) {
36054 var W = this._w
36055
36056 var ah = this._ah | 0
36057 var bh = this._bh | 0
36058 var ch = this._ch | 0
36059 var dh = this._dh | 0
36060 var eh = this._eh | 0
36061 var fh = this._fh | 0
36062 var gh = this._gh | 0
36063 var hh = this._hh | 0
36064
36065 var al = this._al | 0
36066 var bl = this._bl | 0
36067 var cl = this._cl | 0
36068 var dl = this._dl | 0
36069 var el = this._el | 0
36070 var fl = this._fl | 0
36071 var gl = this._gl | 0
36072 var hl = this._hl | 0
36073
36074 for (var i = 0; i < 32; i += 2) {
36075 W[i] = M.readInt32BE(i * 4)
36076 W[i + 1] = M.readInt32BE(i * 4 + 4)
36077 }
36078 for (; i < 160; i += 2) {
36079 var xh = W[i - 15 * 2]
36080 var xl = W[i - 15 * 2 + 1]
36081 var gamma0 = Gamma0(xh, xl)
36082 var gamma0l = Gamma0l(xl, xh)
36083
36084 xh = W[i - 2 * 2]
36085 xl = W[i - 2 * 2 + 1]
36086 var gamma1 = Gamma1(xh, xl)
36087 var gamma1l = Gamma1l(xl, xh)
36088
36089 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36090 var Wi7h = W[i - 7 * 2]
36091 var Wi7l = W[i - 7 * 2 + 1]
36092
36093 var Wi16h = W[i - 16 * 2]
36094 var Wi16l = W[i - 16 * 2 + 1]
36095
36096 var Wil = (gamma0l + Wi7l) | 0
36097 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36098 Wil = (Wil + gamma1l) | 0
36099 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36100 Wil = (Wil + Wi16l) | 0
36101 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
36102
36103 W[i] = Wih
36104 W[i + 1] = Wil
36105 }
36106
36107 for (var j = 0; j < 160; j += 2) {
36108 Wih = W[j]
36109 Wil = W[j + 1]
36110
36111 var majh = maj(ah, bh, ch)
36112 var majl = maj(al, bl, cl)
36113
36114 var sigma0h = sigma0(ah, al)
36115 var sigma0l = sigma0(al, ah)
36116 var sigma1h = sigma1(eh, el)
36117 var sigma1l = sigma1(el, eh)
36118
36119 // t1 = h + sigma1 + ch + K[j] + W[j]
36120 var Kih = K[j]
36121 var Kil = K[j + 1]
36122
36123 var chh = Ch(eh, fh, gh)
36124 var chl = Ch(el, fl, gl)
36125
36126 var t1l = (hl + sigma1l) | 0
36127 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36128 t1l = (t1l + chl) | 0
36129 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36130 t1l = (t1l + Kil) | 0
36131 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36132 t1l = (t1l + Wil) | 0
36133 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
36134
36135 // t2 = sigma0 + maj
36136 var t2l = (sigma0l + majl) | 0
36137 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
36138
36139 hh = gh
36140 hl = gl
36141 gh = fh
36142 gl = fl
36143 fh = eh
36144 fl = el
36145 el = (dl + t1l) | 0
36146 eh = (dh + t1h + getCarry(el, dl)) | 0
36147 dh = ch
36148 dl = cl
36149 ch = bh
36150 cl = bl
36151 bh = ah
36152 bl = al
36153 al = (t1l + t2l) | 0
36154 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36155 }
36156
36157 this._al = (this._al + al) | 0
36158 this._bl = (this._bl + bl) | 0
36159 this._cl = (this._cl + cl) | 0
36160 this._dl = (this._dl + dl) | 0
36161 this._el = (this._el + el) | 0
36162 this._fl = (this._fl + fl) | 0
36163 this._gl = (this._gl + gl) | 0
36164 this._hl = (this._hl + hl) | 0
36165
36166 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36167 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36168 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36169 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36170 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36171 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36172 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36173 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
36174}
36175
36176Sha512.prototype._hash = function () {
36177 var H = new Buffer(64)
36178
36179 function writeInt64BE (h, l, offset) {
36180 H.writeInt32BE(h, offset)
36181 H.writeInt32BE(l, offset + 4)
36182 }
36183
36184 writeInt64BE(this._ah, this._al, 0)
36185 writeInt64BE(this._bh, this._bl, 8)
36186 writeInt64BE(this._ch, this._cl, 16)
36187 writeInt64BE(this._dh, this._dl, 24)
36188 writeInt64BE(this._eh, this._el, 32)
36189 writeInt64BE(this._fh, this._fl, 40)
36190 writeInt64BE(this._gh, this._gl, 48)
36191 writeInt64BE(this._hh, this._hl, 56)
36192
36193 return H
36194}
36195
36196module.exports = Sha512
36197
36198}).call(this,require("buffer").Buffer)
36199},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
36200var isHexPrefixed = require('is-hex-prefixed');
36201
36202/**
36203 * Removes '0x' from a given `String` is present
36204 * @param {String} str the string value
36205 * @return {String|Optional} a string by pass if necessary
36206 */
36207module.exports = function stripHexPrefix(str) {
36208 if (typeof str !== 'string') {
36209 return str;
36210 }
36211
36212 return isHexPrefixed(str) ? str.slice(2) : str;
36213}
36214
36215},{"is-hex-prefixed":64}]},{},[31])(31)
36216});</script>
13661 <script>// Select components from sjcl to suit the crypto operations bip39 requires. 36217 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13662 36218
13663//// base.js 36219//// base.js
@@ -19209,6 +41765,15 @@ window.Entropy = new (function() {
19209 if (useHardenedAddresses) { 41765 if (useHardenedAddresses) {
19210 indexText = indexText + "'"; 41766 indexText = indexText + "'";
19211 } 41767 }
41768 // Ethereum values are different
41769 if (networks[DOM.network.val()].name == "Ethereum") {
41770 var privKeyBuffer = key.privKey.d.toBuffer();
41771 privkey = privKeyBuffer.toString('hex');
41772 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
41773 var hexAddress = addressBuffer.toString('hex');
41774 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
41775 address = ethUtil.addHexPrefix(checksumAddress);
41776 }
19212 addAddressToList(indexText, address, pubkey, privkey); 41777 addAddressToList(indexText, address, pubkey, privkey);
19213 }, 50) 41778 }, 50)
19214 } 41779 }
@@ -19768,6 +42333,13 @@ window.Entropy = new (function() {
19768 DOM.bip44coin.val(6); 42333 DOM.bip44coin.val(6);
19769 }, 42334 },
19770 }, 42335 },
42336 {
42337 name: "Ethereum",
42338 onSelect: function() {
42339 network = bitcoin.networks.bitcoin;
42340 DOM.bip44coin.val(60);
42341 },
42342 },
19771 ] 42343 ]
19772 42344
19773 init(); 42345 init();
diff --git a/compile.py b/compile.py
index 1ab3328..442ee8b 100644
--- a/compile.py
+++ b/compile.py
@@ -45,4 +45,4 @@ f = open('bip39-standalone.html', 'w')
45f.write(page) 45f.write(page)
46f.close() 46f.close()
47 47
48print "%s - DONE" % datetime.datetime.now() 48print("%s - DONE" % datetime.datetime.now())
diff --git a/readme.md b/readme.md
index 6926e70..ba3a165 100644
--- a/readme.md
+++ b/readme.md
@@ -28,6 +28,28 @@ import private keys into a wallet or supply someone with a list of addresses.
28 28
29The BIP32 keys can be used at [bip32.org](https://bip32.org) if desired. 29The BIP32 keys can be used at [bip32.org](https://bip32.org) if desired.
30 30
31## Donations
32
33Since this project is the efforts of many people, most of which don't appear in
34the obvious places like code or issues, donating to the project itself causes
35significant operational difficulties.
36
37As a result, if you would like to support this project financially you are
38encouraged to donate to one of the many groups that makes the internet a place
39amenable to projects such as this one.
40
41[Donation-accepting organizations and projects](https://en.bitcoin.it/wiki/Donation-accepting_organizations_and_projects)
42
43If the list is too difficult to choose from, the EFF is a good choice.
44
45[Electronic Frontier Foundation](https://supporters.eff.org/donate)
46
47or for a direct bitcoin address, consider donating to the
48[Free Software Foundation](https://www.fsf.org/about/ways-to-donate/)
49at 1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN
50
51![alt text](https://static.fsf.org/nosvn/images/bitcoin_qrcodes/fsf.png "FSF Bitcoin Address")
52
31## Making changes 53## Making changes
32 54
33Please do not make modifications to `bip39-standalone.html`, since they will 55Please do not make modifications to `bip39-standalone.html`, since they will
diff --git a/src/index.html b/src/index.html
index 1c2ffcf..7dc53a7 100644
--- a/src/index.html
+++ b/src/index.html
@@ -182,9 +182,9 @@
182 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label> 182 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
183 <div class="col-sm-9"> 183 <div class="col-sm-9">
184 <select class="mnemonic-length form-control"> 184 <select class="mnemonic-length form-control">
185 <option value="raw" data-translate>From entropy length (3 words per 32 bits)</option> 185 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
186 <option value="12">12 <span data-translate>Words</span></option> 186 <option value="12">12 <span data-translate>Words</span></option>
187 <option value="15" selected>15 <span data-translate>Words</option> 187 <option value="15">15 <span data-translate>Words</option>
188 <option value="18">18 <span data-translate>Words</span></option> 188 <option value="18">18 <span data-translate>Words</span></option>
189 <option value="21">21 <span data-translate>Words</span></option> 189 <option value="21">21 <span data-translate>Words</span></option>
190 <option value="24">24 <span data-translate>Words</span></option> 190 <option value="24">24 <span data-translate>Words</span></option>
@@ -666,12 +666,14 @@
666 <td class="privkey"><span data-show-qr></span></td> 666 <td class="privkey"><span data-show-qr></span></td>
667 </tr> 667 </tr>
668 </script> 668 </script>
669 <script src="js/polyfill.es6.js"></script>
669 <script src="js/jquery.min.js"></script> 670 <script src="js/jquery.min.js"></script>
670 <script src="js/bootstrap.min.js"></script> 671 <script src="js/bootstrap.min.js"></script>
671 <script src="js/levenshtein.js"></script> 672 <script src="js/levenshtein.js"></script>
672 <script src="js/jquery.qrcode.min.js"></script> 673 <script src="js/jquery.qrcode.min.js"></script>
673 <script src="js/bitcoinjs-1-5-7.js"></script> 674 <script src="js/bitcoinjs-1-5-7.js"></script>
674 <script src="js/bitcoinjs-extensions.js"></script> 675 <script src="js/bitcoinjs-extensions.js"></script>
676 <script src="js/ethereumjs-util.js"></script>
675 <script src="js/sjcl-bip39.js"></script> 677 <script src="js/sjcl-bip39.js"></script>
676 <script src="js/translate.js"></script> 678 <script src="js/translate.js"></script>
677 <script src="js/phrases_en.js"></script> 679 <script src="js/phrases_en.js"></script>
diff --git a/src/js/ethereumjs-util.js b/src/js/ethereumjs-util.js
new file mode 100644
index 0000000..533a0c3
--- /dev/null
+++ b/src/js/ethereumjs-util.js
@@ -0,0 +1,18762 @@
1(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2(function (global){
3'use strict';
4
5// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
6// original notice:
7
8/*!
9 * The buffer module from node.js, for the browser.
10 *
11 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
12 * @license MIT
13 */
14function compare(a, b) {
15 if (a === b) {
16 return 0;
17 }
18
19 var x = a.length;
20 var y = b.length;
21
22 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23 if (a[i] !== b[i]) {
24 x = a[i];
25 y = b[i];
26 break;
27 }
28 }
29
30 if (x < y) {
31 return -1;
32 }
33 if (y < x) {
34 return 1;
35 }
36 return 0;
37}
38function isBuffer(b) {
39 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
40 return global.Buffer.isBuffer(b);
41 }
42 return !!(b != null && b._isBuffer);
43}
44
45// based on node assert, original notice:
46
47// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
48//
49// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
50//
51// Originally from narwhal.js (http://narwhaljs.org)
52// Copyright (c) 2009 Thomas Robinson <280north.com>
53//
54// Permission is hereby granted, free of charge, to any person obtaining a copy
55// of this software and associated documentation files (the 'Software'), to
56// deal in the Software without restriction, including without limitation the
57// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
58// sell copies of the Software, and to permit persons to whom the Software is
59// furnished to do so, subject to the following conditions:
60//
61// The above copyright notice and this permission notice shall be included in
62// all copies or substantial portions of the Software.
63//
64// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
65// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
66// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
67// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
68// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
69// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
70
71var util = require('util/');
72var hasOwn = Object.prototype.hasOwnProperty;
73var pSlice = Array.prototype.slice;
74var functionsHaveNames = (function () {
75 return function foo() {}.name === 'foo';
76}());
77function pToString (obj) {
78 return Object.prototype.toString.call(obj);
79}
80function isView(arrbuf) {
81 if (isBuffer(arrbuf)) {
82 return false;
83 }
84 if (typeof global.ArrayBuffer !== 'function') {
85 return false;
86 }
87 if (typeof ArrayBuffer.isView === 'function') {
88 return ArrayBuffer.isView(arrbuf);
89 }
90 if (!arrbuf) {
91 return false;
92 }
93 if (arrbuf instanceof DataView) {
94 return true;
95 }
96 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
97 return true;
98 }
99 return false;
100}
101// 1. The assert module provides functions that throw
102// AssertionError's when particular conditions are not met. The
103// assert module must conform to the following interface.
104
105var assert = module.exports = ok;
106
107// 2. The AssertionError is defined in assert.
108// new assert.AssertionError({ message: message,
109// actual: actual,
110// expected: expected })
111
112var regex = /\s*function\s+([^\(\s]*)\s*/;
113// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
114function getName(func) {
115 if (!util.isFunction(func)) {
116 return;
117 }
118 if (functionsHaveNames) {
119 return func.name;
120 }
121 var str = func.toString();
122 var match = str.match(regex);
123 return match && match[1];
124}
125assert.AssertionError = function AssertionError(options) {
126 this.name = 'AssertionError';
127 this.actual = options.actual;
128 this.expected = options.expected;
129 this.operator = options.operator;
130 if (options.message) {
131 this.message = options.message;
132 this.generatedMessage = false;
133 } else {
134 this.message = getMessage(this);
135 this.generatedMessage = true;
136 }
137 var stackStartFunction = options.stackStartFunction || fail;
138 if (Error.captureStackTrace) {
139 Error.captureStackTrace(this, stackStartFunction);
140 } else {
141 // non v8 browsers so we can have a stacktrace
142 var err = new Error();
143 if (err.stack) {
144 var out = err.stack;
145
146 // try to strip useless frames
147 var fn_name = getName(stackStartFunction);
148 var idx = out.indexOf('\n' + fn_name);
149 if (idx >= 0) {
150 // once we have located the function frame
151 // we need to strip out everything before it (and its line)
152 var next_line = out.indexOf('\n', idx + 1);
153 out = out.substring(next_line + 1);
154 }
155
156 this.stack = out;
157 }
158 }
159};
160
161// assert.AssertionError instanceof Error
162util.inherits(assert.AssertionError, Error);
163
164function truncate(s, n) {
165 if (typeof s === 'string') {
166 return s.length < n ? s : s.slice(0, n);
167 } else {
168 return s;
169 }
170}
171function inspect(something) {
172 if (functionsHaveNames || !util.isFunction(something)) {
173 return util.inspect(something);
174 }
175 var rawname = getName(something);
176 var name = rawname ? ': ' + rawname : '';
177 return '[Function' + name + ']';
178}
179function getMessage(self) {
180 return truncate(inspect(self.actual), 128) + ' ' +
181 self.operator + ' ' +
182 truncate(inspect(self.expected), 128);
183}
184
185// At present only the three keys mentioned above are used and
186// understood by the spec. Implementations or sub modules can pass
187// other keys to the AssertionError's constructor - they will be
188// ignored.
189
190// 3. All of the following functions must throw an AssertionError
191// when a corresponding condition is not met, with a message that
192// may be undefined if not provided. All assertion methods provide
193// both the actual and expected values to the assertion error for
194// display purposes.
195
196function fail(actual, expected, message, operator, stackStartFunction) {
197 throw new assert.AssertionError({
198 message: message,
199 actual: actual,
200 expected: expected,
201 operator: operator,
202 stackStartFunction: stackStartFunction
203 });
204}
205
206// EXTENSION! allows for well behaved errors defined elsewhere.
207assert.fail = fail;
208
209// 4. Pure assertion tests whether a value is truthy, as determined
210// by !!guard.
211// assert.ok(guard, message_opt);
212// This statement is equivalent to assert.equal(true, !!guard,
213// message_opt);. To test strictly for the value true, use
214// assert.strictEqual(true, guard, message_opt);.
215
216function ok(value, message) {
217 if (!value) fail(value, true, message, '==', assert.ok);
218}
219assert.ok = ok;
220
221// 5. The equality assertion tests shallow, coercive equality with
222// ==.
223// assert.equal(actual, expected, message_opt);
224
225assert.equal = function equal(actual, expected, message) {
226 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
227};
228
229// 6. The non-equality assertion tests for whether two objects are not equal
230// with != assert.notEqual(actual, expected, message_opt);
231
232assert.notEqual = function notEqual(actual, expected, message) {
233 if (actual == expected) {
234 fail(actual, expected, message, '!=', assert.notEqual);
235 }
236};
237
238// 7. The equivalence assertion tests a deep equality relation.
239// assert.deepEqual(actual, expected, message_opt);
240
241assert.deepEqual = function deepEqual(actual, expected, message) {
242 if (!_deepEqual(actual, expected, false)) {
243 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
244 }
245};
246
247assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
248 if (!_deepEqual(actual, expected, true)) {
249 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
250 }
251};
252
253function _deepEqual(actual, expected, strict, memos) {
254 // 7.1. All identical values are equivalent, as determined by ===.
255 if (actual === expected) {
256 return true;
257 } else if (isBuffer(actual) && isBuffer(expected)) {
258 return compare(actual, expected) === 0;
259
260 // 7.2. If the expected value is a Date object, the actual value is
261 // equivalent if it is also a Date object that refers to the same time.
262 } else if (util.isDate(actual) && util.isDate(expected)) {
263 return actual.getTime() === expected.getTime();
264
265 // 7.3 If the expected value is a RegExp object, the actual value is
266 // equivalent if it is also a RegExp object with the same source and
267 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
268 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
269 return actual.source === expected.source &&
270 actual.global === expected.global &&
271 actual.multiline === expected.multiline &&
272 actual.lastIndex === expected.lastIndex &&
273 actual.ignoreCase === expected.ignoreCase;
274
275 // 7.4. Other pairs that do not both pass typeof value == 'object',
276 // equivalence is determined by ==.
277 } else if ((actual === null || typeof actual !== 'object') &&
278 (expected === null || typeof expected !== 'object')) {
279 return strict ? actual === expected : actual == expected;
280
281 // If both values are instances of typed arrays, wrap their underlying
282 // ArrayBuffers in a Buffer each to increase performance
283 // This optimization requires the arrays to have the same type as checked by
284 // Object.prototype.toString (aka pToString). Never perform binary
285 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
286 // bit patterns are not identical.
287 } else if (isView(actual) && isView(expected) &&
288 pToString(actual) === pToString(expected) &&
289 !(actual instanceof Float32Array ||
290 actual instanceof Float64Array)) {
291 return compare(new Uint8Array(actual.buffer),
292 new Uint8Array(expected.buffer)) === 0;
293
294 // 7.5 For all other Object pairs, including Array objects, equivalence is
295 // determined by having the same number of owned properties (as verified
296 // with Object.prototype.hasOwnProperty.call), the same set of keys
297 // (although not necessarily the same order), equivalent values for every
298 // corresponding key, and an identical 'prototype' property. Note: this
299 // accounts for both named and indexed properties on Arrays.
300 } else if (isBuffer(actual) !== isBuffer(expected)) {
301 return false;
302 } else {
303 memos = memos || {actual: [], expected: []};
304
305 var actualIndex = memos.actual.indexOf(actual);
306 if (actualIndex !== -1) {
307 if (actualIndex === memos.expected.indexOf(expected)) {
308 return true;
309 }
310 }
311
312 memos.actual.push(actual);
313 memos.expected.push(expected);
314
315 return objEquiv(actual, expected, strict, memos);
316 }
317}
318
319function isArguments(object) {
320 return Object.prototype.toString.call(object) == '[object Arguments]';
321}
322
323function objEquiv(a, b, strict, actualVisitedObjects) {
324 if (a === null || a === undefined || b === null || b === undefined)
325 return false;
326 // if one is a primitive, the other must be same
327 if (util.isPrimitive(a) || util.isPrimitive(b))
328 return a === b;
329 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
330 return false;
331 var aIsArgs = isArguments(a);
332 var bIsArgs = isArguments(b);
333 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
334 return false;
335 if (aIsArgs) {
336 a = pSlice.call(a);
337 b = pSlice.call(b);
338 return _deepEqual(a, b, strict);
339 }
340 var ka = objectKeys(a);
341 var kb = objectKeys(b);
342 var key, i;
343 // having the same number of owned properties (keys incorporates
344 // hasOwnProperty)
345 if (ka.length !== kb.length)
346 return false;
347 //the same set of keys (although not necessarily the same order),
348 ka.sort();
349 kb.sort();
350 //~~~cheap key test
351 for (i = ka.length - 1; i >= 0; i--) {
352 if (ka[i] !== kb[i])
353 return false;
354 }
355 //equivalent values for every corresponding key, and
356 //~~~possibly expensive deep test
357 for (i = ka.length - 1; i >= 0; i--) {
358 key = ka[i];
359 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
360 return false;
361 }
362 return true;
363}
364
365// 8. The non-equivalence assertion tests for any deep inequality.
366// assert.notDeepEqual(actual, expected, message_opt);
367
368assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
369 if (_deepEqual(actual, expected, false)) {
370 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
371 }
372};
373
374assert.notDeepStrictEqual = notDeepStrictEqual;
375function notDeepStrictEqual(actual, expected, message) {
376 if (_deepEqual(actual, expected, true)) {
377 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
378 }
379}
380
381
382// 9. The strict equality assertion tests strict equality, as determined by ===.
383// assert.strictEqual(actual, expected, message_opt);
384
385assert.strictEqual = function strictEqual(actual, expected, message) {
386 if (actual !== expected) {
387 fail(actual, expected, message, '===', assert.strictEqual);
388 }
389};
390
391// 10. The strict non-equality assertion tests for strict inequality, as
392// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
393
394assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
395 if (actual === expected) {
396 fail(actual, expected, message, '!==', assert.notStrictEqual);
397 }
398};
399
400function expectedException(actual, expected) {
401 if (!actual || !expected) {
402 return false;
403 }
404
405 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
406 return expected.test(actual);
407 }
408
409 try {
410 if (actual instanceof expected) {
411 return true;
412 }
413 } catch (e) {
414 // Ignore. The instanceof check doesn't work for arrow functions.
415 }
416
417 if (Error.isPrototypeOf(expected)) {
418 return false;
419 }
420
421 return expected.call({}, actual) === true;
422}
423
424function _tryBlock(block) {
425 var error;
426 try {
427 block();
428 } catch (e) {
429 error = e;
430 }
431 return error;
432}
433
434function _throws(shouldThrow, block, expected, message) {
435 var actual;
436
437 if (typeof block !== 'function') {
438 throw new TypeError('"block" argument must be a function');
439 }
440
441 if (typeof expected === 'string') {
442 message = expected;
443 expected = null;
444 }
445
446 actual = _tryBlock(block);
447
448 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
449 (message ? ' ' + message : '.');
450
451 if (shouldThrow && !actual) {
452 fail(actual, expected, 'Missing expected exception' + message);
453 }
454
455 var userProvidedMessage = typeof message === 'string';
456 var isUnwantedException = !shouldThrow && util.isError(actual);
457 var isUnexpectedException = !shouldThrow && actual && !expected;
458
459 if ((isUnwantedException &&
460 userProvidedMessage &&
461 expectedException(actual, expected)) ||
462 isUnexpectedException) {
463 fail(actual, expected, 'Got unwanted exception' + message);
464 }
465
466 if ((shouldThrow && actual && expected &&
467 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
468 throw actual;
469 }
470}
471
472// 11. Expected to throw an error:
473// assert.throws(block, Error_opt, message_opt);
474
475assert.throws = function(block, /*optional*/error, /*optional*/message) {
476 _throws(true, block, error, message);
477};
478
479// EXTENSION! This is annoying to write outside this module.
480assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
481 _throws(false, block, error, message);
482};
483
484assert.ifError = function(err) { if (err) throw err; };
485
486var objectKeys = Object.keys || function (obj) {
487 var keys = [];
488 for (var key in obj) {
489 if (hasOwn.call(obj, key)) keys.push(key);
490 }
491 return keys;
492};
493
494}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
495},{"util/":30}],2:[function(require,module,exports){
496'use strict'
497
498exports.byteLength = byteLength
499exports.toByteArray = toByteArray
500exports.fromByteArray = fromByteArray
501
502var lookup = []
503var revLookup = []
504var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
505
506var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
507for (var i = 0, len = code.length; i < len; ++i) {
508 lookup[i] = code[i]
509 revLookup[code.charCodeAt(i)] = i
510}
511
512revLookup['-'.charCodeAt(0)] = 62
513revLookup['_'.charCodeAt(0)] = 63
514
515function placeHoldersCount (b64) {
516 var len = b64.length
517 if (len % 4 > 0) {
518 throw new Error('Invalid string. Length must be a multiple of 4')
519 }
520
521 // the number of equal signs (place holders)
522 // if there are two placeholders, than the two characters before it
523 // represent one byte
524 // if there is only one, then the three characters before it represent 2 bytes
525 // this is just a cheap hack to not do indexOf twice
526 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
527}
528
529function byteLength (b64) {
530 // base64 is 4/3 + up to two characters of the original data
531 return b64.length * 3 / 4 - placeHoldersCount(b64)
532}
533
534function toByteArray (b64) {
535 var i, j, l, tmp, placeHolders, arr
536 var len = b64.length
537 placeHolders = placeHoldersCount(b64)
538
539 arr = new Arr(len * 3 / 4 - placeHolders)
540
541 // if there are placeholders, only get up to the last complete 4 chars
542 l = placeHolders > 0 ? len - 4 : len
543
544 var L = 0
545
546 for (i = 0, j = 0; i < l; i += 4, j += 3) {
547 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
548 arr[L++] = (tmp >> 16) & 0xFF
549 arr[L++] = (tmp >> 8) & 0xFF
550 arr[L++] = tmp & 0xFF
551 }
552
553 if (placeHolders === 2) {
554 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
555 arr[L++] = tmp & 0xFF
556 } else if (placeHolders === 1) {
557 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
558 arr[L++] = (tmp >> 8) & 0xFF
559 arr[L++] = tmp & 0xFF
560 }
561
562 return arr
563}
564
565function tripletToBase64 (num) {
566 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
567}
568
569function encodeChunk (uint8, start, end) {
570 var tmp
571 var output = []
572 for (var i = start; i < end; i += 3) {
573 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
574 output.push(tripletToBase64(tmp))
575 }
576 return output.join('')
577}
578
579function fromByteArray (uint8) {
580 var tmp
581 var len = uint8.length
582 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
583 var output = ''
584 var parts = []
585 var maxChunkLength = 16383 // must be multiple of 3
586
587 // go through the array every three bytes, we'll deal with trailing stuff later
588 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
589 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
590 }
591
592 // pad the end with zeros, but make sure to not forget the extra bytes
593 if (extraBytes === 1) {
594 tmp = uint8[len - 1]
595 output += lookup[tmp >> 2]
596 output += lookup[(tmp << 4) & 0x3F]
597 output += '=='
598 } else if (extraBytes === 2) {
599 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
600 output += lookup[tmp >> 10]
601 output += lookup[(tmp >> 4) & 0x3F]
602 output += lookup[(tmp << 2) & 0x3F]
603 output += '='
604 }
605
606 parts.push(output)
607
608 return parts.join('')
609}
610
611},{}],3:[function(require,module,exports){
612
613},{}],4:[function(require,module,exports){
614(function (global){
615'use strict';
616
617var buffer = require('buffer');
618var Buffer = buffer.Buffer;
619var SlowBuffer = buffer.SlowBuffer;
620var MAX_LEN = buffer.kMaxLength || 2147483647;
621exports.alloc = function alloc(size, fill, encoding) {
622 if (typeof Buffer.alloc === 'function') {
623 return Buffer.alloc(size, fill, encoding);
624 }
625 if (typeof encoding === 'number') {
626 throw new TypeError('encoding must not be number');
627 }
628 if (typeof size !== 'number') {
629 throw new TypeError('size must be a number');
630 }
631 if (size > MAX_LEN) {
632 throw new RangeError('size is too large');
633 }
634 var enc = encoding;
635 var _fill = fill;
636 if (_fill === undefined) {
637 enc = undefined;
638 _fill = 0;
639 }
640 var buf = new Buffer(size);
641 if (typeof _fill === 'string') {
642 var fillBuf = new Buffer(_fill, enc);
643 var flen = fillBuf.length;
644 var i = -1;
645 while (++i < size) {
646 buf[i] = fillBuf[i % flen];
647 }
648 } else {
649 buf.fill(_fill);
650 }
651 return buf;
652}
653exports.allocUnsafe = function allocUnsafe(size) {
654 if (typeof Buffer.allocUnsafe === 'function') {
655 return Buffer.allocUnsafe(size);
656 }
657 if (typeof size !== 'number') {
658 throw new TypeError('size must be a number');
659 }
660 if (size > MAX_LEN) {
661 throw new RangeError('size is too large');
662 }
663 return new Buffer(size);
664}
665exports.from = function from(value, encodingOrOffset, length) {
666 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
667 return Buffer.from(value, encodingOrOffset, length);
668 }
669 if (typeof value === 'number') {
670 throw new TypeError('"value" argument must not be a number');
671 }
672 if (typeof value === 'string') {
673 return new Buffer(value, encodingOrOffset);
674 }
675 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
676 var offset = encodingOrOffset;
677 if (arguments.length === 1) {
678 return new Buffer(value);
679 }
680 if (typeof offset === 'undefined') {
681 offset = 0;
682 }
683 var len = length;
684 if (typeof len === 'undefined') {
685 len = value.byteLength - offset;
686 }
687 if (offset >= value.byteLength) {
688 throw new RangeError('\'offset\' is out of bounds');
689 }
690 if (len > value.byteLength - offset) {
691 throw new RangeError('\'length\' is out of bounds');
692 }
693 return new Buffer(value.slice(offset, offset + len));
694 }
695 if (Buffer.isBuffer(value)) {
696 var out = new Buffer(value.length);
697 value.copy(out, 0, 0, value.length);
698 return out;
699 }
700 if (value) {
701 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
702 return new Buffer(value);
703 }
704 if (value.type === 'Buffer' && Array.isArray(value.data)) {
705 return new Buffer(value.data);
706 }
707 }
708
709 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
710}
711exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
712 if (typeof Buffer.allocUnsafeSlow === 'function') {
713 return Buffer.allocUnsafeSlow(size);
714 }
715 if (typeof size !== 'number') {
716 throw new TypeError('size must be a number');
717 }
718 if (size >= MAX_LEN) {
719 throw new RangeError('size is too large');
720 }
721 return new SlowBuffer(size);
722}
723
724}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
725},{"buffer":5}],5:[function(require,module,exports){
726/*!
727 * The buffer module from node.js, for the browser.
728 *
729 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
730 * @license MIT
731 */
732/* eslint-disable no-proto */
733
734'use strict'
735
736var base64 = require('base64-js')
737var ieee754 = require('ieee754')
738
739exports.Buffer = Buffer
740exports.SlowBuffer = SlowBuffer
741exports.INSPECT_MAX_BYTES = 50
742
743var K_MAX_LENGTH = 0x7fffffff
744exports.kMaxLength = K_MAX_LENGTH
745
746/**
747 * If `Buffer.TYPED_ARRAY_SUPPORT`:
748 * === true Use Uint8Array implementation (fastest)
749 * === false Print warning and recommend using `buffer` v4.x which has an Object
750 * implementation (most compatible, even IE6)
751 *
752 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
753 * Opera 11.6+, iOS 4.2+.
754 *
755 * We report that the browser does not support typed arrays if the are not subclassable
756 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
757 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
758 * for __proto__ and has a buggy typed array implementation.
759 */
760Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
761
762if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
763 typeof console.error === 'function') {
764 console.error(
765 'This browser lacks typed array (Uint8Array) support which is required by ' +
766 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
767 )
768}
769
770function typedArraySupport () {
771 // Can typed array instances can be augmented?
772 try {
773 var arr = new Uint8Array(1)
774 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
775 return arr.foo() === 42
776 } catch (e) {
777 return false
778 }
779}
780
781function createBuffer (length) {
782 if (length > K_MAX_LENGTH) {
783 throw new RangeError('Invalid typed array length')
784 }
785 // Return an augmented `Uint8Array` instance
786 var buf = new Uint8Array(length)
787 buf.__proto__ = Buffer.prototype
788 return buf
789}
790
791/**
792 * The Buffer constructor returns instances of `Uint8Array` that have their
793 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
794 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
795 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
796 * returns a single octet.
797 *
798 * The `Uint8Array` prototype remains unmodified.
799 */
800
801function Buffer (arg, encodingOrOffset, length) {
802 // Common case.
803 if (typeof arg === 'number') {
804 if (typeof encodingOrOffset === 'string') {
805 throw new Error(
806 'If encoding is specified then the first argument must be a string'
807 )
808 }
809 return allocUnsafe(arg)
810 }
811 return from(arg, encodingOrOffset, length)
812}
813
814// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
815if (typeof Symbol !== 'undefined' && Symbol.species &&
816 Buffer[Symbol.species] === Buffer) {
817 Object.defineProperty(Buffer, Symbol.species, {
818 value: null,
819 configurable: true,
820 enumerable: false,
821 writable: false
822 })
823}
824
825Buffer.poolSize = 8192 // not used by this implementation
826
827function from (value, encodingOrOffset, length) {
828 if (typeof value === 'number') {
829 throw new TypeError('"value" argument must not be a number')
830 }
831
832 if (value instanceof ArrayBuffer) {
833 return fromArrayBuffer(value, encodingOrOffset, length)
834 }
835
836 if (typeof value === 'string') {
837 return fromString(value, encodingOrOffset)
838 }
839
840 return fromObject(value)
841}
842
843/**
844 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
845 * if value is a number.
846 * Buffer.from(str[, encoding])
847 * Buffer.from(array)
848 * Buffer.from(buffer)
849 * Buffer.from(arrayBuffer[, byteOffset[, length]])
850 **/
851Buffer.from = function (value, encodingOrOffset, length) {
852 return from(value, encodingOrOffset, length)
853}
854
855// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
856// https://github.com/feross/buffer/pull/148
857Buffer.prototype.__proto__ = Uint8Array.prototype
858Buffer.__proto__ = Uint8Array
859
860function assertSize (size) {
861 if (typeof size !== 'number') {
862 throw new TypeError('"size" argument must be a number')
863 } else if (size < 0) {
864 throw new RangeError('"size" argument must not be negative')
865 }
866}
867
868function alloc (size, fill, encoding) {
869 assertSize(size)
870 if (size <= 0) {
871 return createBuffer(size)
872 }
873 if (fill !== undefined) {
874 // Only pay attention to encoding if it's a string. This
875 // prevents accidentally sending in a number that would
876 // be interpretted as a start offset.
877 return typeof encoding === 'string'
878 ? createBuffer(size).fill(fill, encoding)
879 : createBuffer(size).fill(fill)
880 }
881 return createBuffer(size)
882}
883
884/**
885 * Creates a new filled Buffer instance.
886 * alloc(size[, fill[, encoding]])
887 **/
888Buffer.alloc = function (size, fill, encoding) {
889 return alloc(size, fill, encoding)
890}
891
892function allocUnsafe (size) {
893 assertSize(size)
894 return createBuffer(size < 0 ? 0 : checked(size) | 0)
895}
896
897/**
898 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
899 * */
900Buffer.allocUnsafe = function (size) {
901 return allocUnsafe(size)
902}
903/**
904 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
905 */
906Buffer.allocUnsafeSlow = function (size) {
907 return allocUnsafe(size)
908}
909
910function fromString (string, encoding) {
911 if (typeof encoding !== 'string' || encoding === '') {
912 encoding = 'utf8'
913 }
914
915 if (!Buffer.isEncoding(encoding)) {
916 throw new TypeError('"encoding" must be a valid string encoding')
917 }
918
919 var length = byteLength(string, encoding) | 0
920 var buf = createBuffer(length)
921
922 var actual = buf.write(string, encoding)
923
924 if (actual !== length) {
925 // Writing a hex string, for example, that contains invalid characters will
926 // cause everything after the first invalid character to be ignored. (e.g.
927 // 'abxxcd' will be treated as 'ab')
928 buf = buf.slice(0, actual)
929 }
930
931 return buf
932}
933
934function fromArrayLike (array) {
935 var length = array.length < 0 ? 0 : checked(array.length) | 0
936 var buf = createBuffer(length)
937 for (var i = 0; i < length; i += 1) {
938 buf[i] = array[i] & 255
939 }
940 return buf
941}
942
943function fromArrayBuffer (array, byteOffset, length) {
944 if (byteOffset < 0 || array.byteLength < byteOffset) {
945 throw new RangeError('\'offset\' is out of bounds')
946 }
947
948 if (array.byteLength < byteOffset + (length || 0)) {
949 throw new RangeError('\'length\' is out of bounds')
950 }
951
952 var buf
953 if (byteOffset === undefined && length === undefined) {
954 buf = new Uint8Array(array)
955 } else if (length === undefined) {
956 buf = new Uint8Array(array, byteOffset)
957 } else {
958 buf = new Uint8Array(array, byteOffset, length)
959 }
960
961 // Return an augmented `Uint8Array` instance
962 buf.__proto__ = Buffer.prototype
963 return buf
964}
965
966function fromObject (obj) {
967 if (Buffer.isBuffer(obj)) {
968 var len = checked(obj.length) | 0
969 var buf = createBuffer(len)
970
971 if (buf.length === 0) {
972 return buf
973 }
974
975 obj.copy(buf, 0, 0, len)
976 return buf
977 }
978
979 if (obj) {
980 if (ArrayBuffer.isView(obj) || 'length' in obj) {
981 if (typeof obj.length !== 'number' || isnan(obj.length)) {
982 return createBuffer(0)
983 }
984 return fromArrayLike(obj)
985 }
986
987 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
988 return fromArrayLike(obj.data)
989 }
990 }
991
992 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
993}
994
995function checked (length) {
996 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
997 // length is NaN (which is otherwise coerced to zero.)
998 if (length >= K_MAX_LENGTH) {
999 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
1000 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
1001 }
1002 return length | 0
1003}
1004
1005function SlowBuffer (length) {
1006 if (+length != length) { // eslint-disable-line eqeqeq
1007 length = 0
1008 }
1009 return Buffer.alloc(+length)
1010}
1011
1012Buffer.isBuffer = function isBuffer (b) {
1013 return b != null && b._isBuffer === true
1014}
1015
1016Buffer.compare = function compare (a, b) {
1017 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
1018 throw new TypeError('Arguments must be Buffers')
1019 }
1020
1021 if (a === b) return 0
1022
1023 var x = a.length
1024 var y = b.length
1025
1026 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
1027 if (a[i] !== b[i]) {
1028 x = a[i]
1029 y = b[i]
1030 break
1031 }
1032 }
1033
1034 if (x < y) return -1
1035 if (y < x) return 1
1036 return 0
1037}
1038
1039Buffer.isEncoding = function isEncoding (encoding) {
1040 switch (String(encoding).toLowerCase()) {
1041 case 'hex':
1042 case 'utf8':
1043 case 'utf-8':
1044 case 'ascii':
1045 case 'latin1':
1046 case 'binary':
1047 case 'base64':
1048 case 'ucs2':
1049 case 'ucs-2':
1050 case 'utf16le':
1051 case 'utf-16le':
1052 return true
1053 default:
1054 return false
1055 }
1056}
1057
1058Buffer.concat = function concat (list, length) {
1059 if (!Array.isArray(list)) {
1060 throw new TypeError('"list" argument must be an Array of Buffers')
1061 }
1062
1063 if (list.length === 0) {
1064 return Buffer.alloc(0)
1065 }
1066
1067 var i
1068 if (length === undefined) {
1069 length = 0
1070 for (i = 0; i < list.length; ++i) {
1071 length += list[i].length
1072 }
1073 }
1074
1075 var buffer = Buffer.allocUnsafe(length)
1076 var pos = 0
1077 for (i = 0; i < list.length; ++i) {
1078 var buf = list[i]
1079 if (!Buffer.isBuffer(buf)) {
1080 throw new TypeError('"list" argument must be an Array of Buffers')
1081 }
1082 buf.copy(buffer, pos)
1083 pos += buf.length
1084 }
1085 return buffer
1086}
1087
1088function byteLength (string, encoding) {
1089 if (Buffer.isBuffer(string)) {
1090 return string.length
1091 }
1092 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
1093 return string.byteLength
1094 }
1095 if (typeof string !== 'string') {
1096 string = '' + string
1097 }
1098
1099 var len = string.length
1100 if (len === 0) return 0
1101
1102 // Use a for loop to avoid recursion
1103 var loweredCase = false
1104 for (;;) {
1105 switch (encoding) {
1106 case 'ascii':
1107 case 'latin1':
1108 case 'binary':
1109 return len
1110 case 'utf8':
1111 case 'utf-8':
1112 case undefined:
1113 return utf8ToBytes(string).length
1114 case 'ucs2':
1115 case 'ucs-2':
1116 case 'utf16le':
1117 case 'utf-16le':
1118 return len * 2
1119 case 'hex':
1120 return len >>> 1
1121 case 'base64':
1122 return base64ToBytes(string).length
1123 default:
1124 if (loweredCase) return utf8ToBytes(string).length // assume utf8
1125 encoding = ('' + encoding).toLowerCase()
1126 loweredCase = true
1127 }
1128 }
1129}
1130Buffer.byteLength = byteLength
1131
1132function slowToString (encoding, start, end) {
1133 var loweredCase = false
1134
1135 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
1136 // property of a typed array.
1137
1138 // This behaves neither like String nor Uint8Array in that we set start/end
1139 // to their upper/lower bounds if the value passed is out of range.
1140 // undefined is handled specially as per ECMA-262 6th Edition,
1141 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
1142 if (start === undefined || start < 0) {
1143 start = 0
1144 }
1145 // Return early if start > this.length. Done here to prevent potential uint32
1146 // coercion fail below.
1147 if (start > this.length) {
1148 return ''
1149 }
1150
1151 if (end === undefined || end > this.length) {
1152 end = this.length
1153 }
1154
1155 if (end <= 0) {
1156 return ''
1157 }
1158
1159 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
1160 end >>>= 0
1161 start >>>= 0
1162
1163 if (end <= start) {
1164 return ''
1165 }
1166
1167 if (!encoding) encoding = 'utf8'
1168
1169 while (true) {
1170 switch (encoding) {
1171 case 'hex':
1172 return hexSlice(this, start, end)
1173
1174 case 'utf8':
1175 case 'utf-8':
1176 return utf8Slice(this, start, end)
1177
1178 case 'ascii':
1179 return asciiSlice(this, start, end)
1180
1181 case 'latin1':
1182 case 'binary':
1183 return latin1Slice(this, start, end)
1184
1185 case 'base64':
1186 return base64Slice(this, start, end)
1187
1188 case 'ucs2':
1189 case 'ucs-2':
1190 case 'utf16le':
1191 case 'utf-16le':
1192 return utf16leSlice(this, start, end)
1193
1194 default:
1195 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
1196 encoding = (encoding + '').toLowerCase()
1197 loweredCase = true
1198 }
1199 }
1200}
1201
1202// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
1203// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
1204// reliably in a browserify context because there could be multiple different
1205// copies of the 'buffer' package in use. This method works even for Buffer
1206// instances that were created from another copy of the `buffer` package.
1207// See: https://github.com/feross/buffer/issues/154
1208Buffer.prototype._isBuffer = true
1209
1210function swap (b, n, m) {
1211 var i = b[n]
1212 b[n] = b[m]
1213 b[m] = i
1214}
1215
1216Buffer.prototype.swap16 = function swap16 () {
1217 var len = this.length
1218 if (len % 2 !== 0) {
1219 throw new RangeError('Buffer size must be a multiple of 16-bits')
1220 }
1221 for (var i = 0; i < len; i += 2) {
1222 swap(this, i, i + 1)
1223 }
1224 return this
1225}
1226
1227Buffer.prototype.swap32 = function swap32 () {
1228 var len = this.length
1229 if (len % 4 !== 0) {
1230 throw new RangeError('Buffer size must be a multiple of 32-bits')
1231 }
1232 for (var i = 0; i < len; i += 4) {
1233 swap(this, i, i + 3)
1234 swap(this, i + 1, i + 2)
1235 }
1236 return this
1237}
1238
1239Buffer.prototype.swap64 = function swap64 () {
1240 var len = this.length
1241 if (len % 8 !== 0) {
1242 throw new RangeError('Buffer size must be a multiple of 64-bits')
1243 }
1244 for (var i = 0; i < len; i += 8) {
1245 swap(this, i, i + 7)
1246 swap(this, i + 1, i + 6)
1247 swap(this, i + 2, i + 5)
1248 swap(this, i + 3, i + 4)
1249 }
1250 return this
1251}
1252
1253Buffer.prototype.toString = function toString () {
1254 var length = this.length
1255 if (length === 0) return ''
1256 if (arguments.length === 0) return utf8Slice(this, 0, length)
1257 return slowToString.apply(this, arguments)
1258}
1259
1260Buffer.prototype.equals = function equals (b) {
1261 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
1262 if (this === b) return true
1263 return Buffer.compare(this, b) === 0
1264}
1265
1266Buffer.prototype.inspect = function inspect () {
1267 var str = ''
1268 var max = exports.INSPECT_MAX_BYTES
1269 if (this.length > 0) {
1270 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
1271 if (this.length > max) str += ' ... '
1272 }
1273 return '<Buffer ' + str + '>'
1274}
1275
1276Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
1277 if (!Buffer.isBuffer(target)) {
1278 throw new TypeError('Argument must be a Buffer')
1279 }
1280
1281 if (start === undefined) {
1282 start = 0
1283 }
1284 if (end === undefined) {
1285 end = target ? target.length : 0
1286 }
1287 if (thisStart === undefined) {
1288 thisStart = 0
1289 }
1290 if (thisEnd === undefined) {
1291 thisEnd = this.length
1292 }
1293
1294 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
1295 throw new RangeError('out of range index')
1296 }
1297
1298 if (thisStart >= thisEnd && start >= end) {
1299 return 0
1300 }
1301 if (thisStart >= thisEnd) {
1302 return -1
1303 }
1304 if (start >= end) {
1305 return 1
1306 }
1307
1308 start >>>= 0
1309 end >>>= 0
1310 thisStart >>>= 0
1311 thisEnd >>>= 0
1312
1313 if (this === target) return 0
1314
1315 var x = thisEnd - thisStart
1316 var y = end - start
1317 var len = Math.min(x, y)
1318
1319 var thisCopy = this.slice(thisStart, thisEnd)
1320 var targetCopy = target.slice(start, end)
1321
1322 for (var i = 0; i < len; ++i) {
1323 if (thisCopy[i] !== targetCopy[i]) {
1324 x = thisCopy[i]
1325 y = targetCopy[i]
1326 break
1327 }
1328 }
1329
1330 if (x < y) return -1
1331 if (y < x) return 1
1332 return 0
1333}
1334
1335// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
1336// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
1337//
1338// Arguments:
1339// - buffer - a Buffer to search
1340// - val - a string, Buffer, or number
1341// - byteOffset - an index into `buffer`; will be clamped to an int32
1342// - encoding - an optional encoding, relevant is val is a string
1343// - dir - true for indexOf, false for lastIndexOf
1344function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
1345 // Empty buffer means no match
1346 if (buffer.length === 0) return -1
1347
1348 // Normalize byteOffset
1349 if (typeof byteOffset === 'string') {
1350 encoding = byteOffset
1351 byteOffset = 0
1352 } else if (byteOffset > 0x7fffffff) {
1353 byteOffset = 0x7fffffff
1354 } else if (byteOffset < -0x80000000) {
1355 byteOffset = -0x80000000
1356 }
1357 byteOffset = +byteOffset // Coerce to Number.
1358 if (isNaN(byteOffset)) {
1359 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
1360 byteOffset = dir ? 0 : (buffer.length - 1)
1361 }
1362
1363 // Normalize byteOffset: negative offsets start from the end of the buffer
1364 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
1365 if (byteOffset >= buffer.length) {
1366 if (dir) return -1
1367 else byteOffset = buffer.length - 1
1368 } else if (byteOffset < 0) {
1369 if (dir) byteOffset = 0
1370 else return -1
1371 }
1372
1373 // Normalize val
1374 if (typeof val === 'string') {
1375 val = Buffer.from(val, encoding)
1376 }
1377
1378 // Finally, search either indexOf (if dir is true) or lastIndexOf
1379 if (Buffer.isBuffer(val)) {
1380 // Special case: looking for empty string/buffer always fails
1381 if (val.length === 0) {
1382 return -1
1383 }
1384 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
1385 } else if (typeof val === 'number') {
1386 val = val & 0xFF // Search for a byte value [0-255]
1387 if (typeof Uint8Array.prototype.indexOf === 'function') {
1388 if (dir) {
1389 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
1390 } else {
1391 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
1392 }
1393 }
1394 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
1395 }
1396
1397 throw new TypeError('val must be string, number or Buffer')
1398}
1399
1400function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
1401 var indexSize = 1
1402 var arrLength = arr.length
1403 var valLength = val.length
1404
1405 if (encoding !== undefined) {
1406 encoding = String(encoding).toLowerCase()
1407 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
1408 encoding === 'utf16le' || encoding === 'utf-16le') {
1409 if (arr.length < 2 || val.length < 2) {
1410 return -1
1411 }
1412 indexSize = 2
1413 arrLength /= 2
1414 valLength /= 2
1415 byteOffset /= 2
1416 }
1417 }
1418
1419 function read (buf, i) {
1420 if (indexSize === 1) {
1421 return buf[i]
1422 } else {
1423 return buf.readUInt16BE(i * indexSize)
1424 }
1425 }
1426
1427 var i
1428 if (dir) {
1429 var foundIndex = -1
1430 for (i = byteOffset; i < arrLength; i++) {
1431 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
1432 if (foundIndex === -1) foundIndex = i
1433 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
1434 } else {
1435 if (foundIndex !== -1) i -= i - foundIndex
1436 foundIndex = -1
1437 }
1438 }
1439 } else {
1440 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
1441 for (i = byteOffset; i >= 0; i--) {
1442 var found = true
1443 for (var j = 0; j < valLength; j++) {
1444 if (read(arr, i + j) !== read(val, j)) {
1445 found = false
1446 break
1447 }
1448 }
1449 if (found) return i
1450 }
1451 }
1452
1453 return -1
1454}
1455
1456Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
1457 return this.indexOf(val, byteOffset, encoding) !== -1
1458}
1459
1460Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
1461 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
1462}
1463
1464Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
1465 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
1466}
1467
1468function hexWrite (buf, string, offset, length) {
1469 offset = Number(offset) || 0
1470 var remaining = buf.length - offset
1471 if (!length) {
1472 length = remaining
1473 } else {
1474 length = Number(length)
1475 if (length > remaining) {
1476 length = remaining
1477 }
1478 }
1479
1480 // must be an even number of digits
1481 var strLen = string.length
1482 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
1483
1484 if (length > strLen / 2) {
1485 length = strLen / 2
1486 }
1487 for (var i = 0; i < length; ++i) {
1488 var parsed = parseInt(string.substr(i * 2, 2), 16)
1489 if (isNaN(parsed)) return i
1490 buf[offset + i] = parsed
1491 }
1492 return i
1493}
1494
1495function utf8Write (buf, string, offset, length) {
1496 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
1497}
1498
1499function asciiWrite (buf, string, offset, length) {
1500 return blitBuffer(asciiToBytes(string), buf, offset, length)
1501}
1502
1503function latin1Write (buf, string, offset, length) {
1504 return asciiWrite(buf, string, offset, length)
1505}
1506
1507function base64Write (buf, string, offset, length) {
1508 return blitBuffer(base64ToBytes(string), buf, offset, length)
1509}
1510
1511function ucs2Write (buf, string, offset, length) {
1512 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
1513}
1514
1515Buffer.prototype.write = function write (string, offset, length, encoding) {
1516 // Buffer#write(string)
1517 if (offset === undefined) {
1518 encoding = 'utf8'
1519 length = this.length
1520 offset = 0
1521 // Buffer#write(string, encoding)
1522 } else if (length === undefined && typeof offset === 'string') {
1523 encoding = offset
1524 length = this.length
1525 offset = 0
1526 // Buffer#write(string, offset[, length][, encoding])
1527 } else if (isFinite(offset)) {
1528 offset = offset >>> 0
1529 if (isFinite(length)) {
1530 length = length >>> 0
1531 if (encoding === undefined) encoding = 'utf8'
1532 } else {
1533 encoding = length
1534 length = undefined
1535 }
1536 } else {
1537 throw new Error(
1538 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
1539 )
1540 }
1541
1542 var remaining = this.length - offset
1543 if (length === undefined || length > remaining) length = remaining
1544
1545 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
1546 throw new RangeError('Attempt to write outside buffer bounds')
1547 }
1548
1549 if (!encoding) encoding = 'utf8'
1550
1551 var loweredCase = false
1552 for (;;) {
1553 switch (encoding) {
1554 case 'hex':
1555 return hexWrite(this, string, offset, length)
1556
1557 case 'utf8':
1558 case 'utf-8':
1559 return utf8Write(this, string, offset, length)
1560
1561 case 'ascii':
1562 return asciiWrite(this, string, offset, length)
1563
1564 case 'latin1':
1565 case 'binary':
1566 return latin1Write(this, string, offset, length)
1567
1568 case 'base64':
1569 // Warning: maxLength not taken into account in base64Write
1570 return base64Write(this, string, offset, length)
1571
1572 case 'ucs2':
1573 case 'ucs-2':
1574 case 'utf16le':
1575 case 'utf-16le':
1576 return ucs2Write(this, string, offset, length)
1577
1578 default:
1579 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
1580 encoding = ('' + encoding).toLowerCase()
1581 loweredCase = true
1582 }
1583 }
1584}
1585
1586Buffer.prototype.toJSON = function toJSON () {
1587 return {
1588 type: 'Buffer',
1589 data: Array.prototype.slice.call(this._arr || this, 0)
1590 }
1591}
1592
1593function base64Slice (buf, start, end) {
1594 if (start === 0 && end === buf.length) {
1595 return base64.fromByteArray(buf)
1596 } else {
1597 return base64.fromByteArray(buf.slice(start, end))
1598 }
1599}
1600
1601function utf8Slice (buf, start, end) {
1602 end = Math.min(buf.length, end)
1603 var res = []
1604
1605 var i = start
1606 while (i < end) {
1607 var firstByte = buf[i]
1608 var codePoint = null
1609 var bytesPerSequence = (firstByte > 0xEF) ? 4
1610 : (firstByte > 0xDF) ? 3
1611 : (firstByte > 0xBF) ? 2
1612 : 1
1613
1614 if (i + bytesPerSequence <= end) {
1615 var secondByte, thirdByte, fourthByte, tempCodePoint
1616
1617 switch (bytesPerSequence) {
1618 case 1:
1619 if (firstByte < 0x80) {
1620 codePoint = firstByte
1621 }
1622 break
1623 case 2:
1624 secondByte = buf[i + 1]
1625 if ((secondByte & 0xC0) === 0x80) {
1626 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
1627 if (tempCodePoint > 0x7F) {
1628 codePoint = tempCodePoint
1629 }
1630 }
1631 break
1632 case 3:
1633 secondByte = buf[i + 1]
1634 thirdByte = buf[i + 2]
1635 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
1636 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
1637 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
1638 codePoint = tempCodePoint
1639 }
1640 }
1641 break
1642 case 4:
1643 secondByte = buf[i + 1]
1644 thirdByte = buf[i + 2]
1645 fourthByte = buf[i + 3]
1646 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
1647 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
1648 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
1649 codePoint = tempCodePoint
1650 }
1651 }
1652 }
1653 }
1654
1655 if (codePoint === null) {
1656 // we did not generate a valid codePoint so insert a
1657 // replacement char (U+FFFD) and advance only 1 byte
1658 codePoint = 0xFFFD
1659 bytesPerSequence = 1
1660 } else if (codePoint > 0xFFFF) {
1661 // encode to utf16 (surrogate pair dance)
1662 codePoint -= 0x10000
1663 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
1664 codePoint = 0xDC00 | codePoint & 0x3FF
1665 }
1666
1667 res.push(codePoint)
1668 i += bytesPerSequence
1669 }
1670
1671 return decodeCodePointsArray(res)
1672}
1673
1674// Based on http://stackoverflow.com/a/22747272/680742, the browser with
1675// the lowest limit is Chrome, with 0x10000 args.
1676// We go 1 magnitude less, for safety
1677var MAX_ARGUMENTS_LENGTH = 0x1000
1678
1679function decodeCodePointsArray (codePoints) {
1680 var len = codePoints.length
1681 if (len <= MAX_ARGUMENTS_LENGTH) {
1682 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
1683 }
1684
1685 // Decode in chunks to avoid "call stack size exceeded".
1686 var res = ''
1687 var i = 0
1688 while (i < len) {
1689 res += String.fromCharCode.apply(
1690 String,
1691 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
1692 )
1693 }
1694 return res
1695}
1696
1697function asciiSlice (buf, start, end) {
1698 var ret = ''
1699 end = Math.min(buf.length, end)
1700
1701 for (var i = start; i < end; ++i) {
1702 ret += String.fromCharCode(buf[i] & 0x7F)
1703 }
1704 return ret
1705}
1706
1707function latin1Slice (buf, start, end) {
1708 var ret = ''
1709 end = Math.min(buf.length, end)
1710
1711 for (var i = start; i < end; ++i) {
1712 ret += String.fromCharCode(buf[i])
1713 }
1714 return ret
1715}
1716
1717function hexSlice (buf, start, end) {
1718 var len = buf.length
1719
1720 if (!start || start < 0) start = 0
1721 if (!end || end < 0 || end > len) end = len
1722
1723 var out = ''
1724 for (var i = start; i < end; ++i) {
1725 out += toHex(buf[i])
1726 }
1727 return out
1728}
1729
1730function utf16leSlice (buf, start, end) {
1731 var bytes = buf.slice(start, end)
1732 var res = ''
1733 for (var i = 0; i < bytes.length; i += 2) {
1734 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
1735 }
1736 return res
1737}
1738
1739Buffer.prototype.slice = function slice (start, end) {
1740 var len = this.length
1741 start = ~~start
1742 end = end === undefined ? len : ~~end
1743
1744 if (start < 0) {
1745 start += len
1746 if (start < 0) start = 0
1747 } else if (start > len) {
1748 start = len
1749 }
1750
1751 if (end < 0) {
1752 end += len
1753 if (end < 0) end = 0
1754 } else if (end > len) {
1755 end = len
1756 }
1757
1758 if (end < start) end = start
1759
1760 var newBuf = this.subarray(start, end)
1761 // Return an augmented `Uint8Array` instance
1762 newBuf.__proto__ = Buffer.prototype
1763 return newBuf
1764}
1765
1766/*
1767 * Need to make sure that buffer isn't trying to write out of bounds.
1768 */
1769function checkOffset (offset, ext, length) {
1770 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
1771 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
1772}
1773
1774Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
1775 offset = offset >>> 0
1776 byteLength = byteLength >>> 0
1777 if (!noAssert) checkOffset(offset, byteLength, this.length)
1778
1779 var val = this[offset]
1780 var mul = 1
1781 var i = 0
1782 while (++i < byteLength && (mul *= 0x100)) {
1783 val += this[offset + i] * mul
1784 }
1785
1786 return val
1787}
1788
1789Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
1790 offset = offset >>> 0
1791 byteLength = byteLength >>> 0
1792 if (!noAssert) {
1793 checkOffset(offset, byteLength, this.length)
1794 }
1795
1796 var val = this[offset + --byteLength]
1797 var mul = 1
1798 while (byteLength > 0 && (mul *= 0x100)) {
1799 val += this[offset + --byteLength] * mul
1800 }
1801
1802 return val
1803}
1804
1805Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1806 offset = offset >>> 0
1807 if (!noAssert) checkOffset(offset, 1, this.length)
1808 return this[offset]
1809}
1810
1811Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
1812 offset = offset >>> 0
1813 if (!noAssert) checkOffset(offset, 2, this.length)
1814 return this[offset] | (this[offset + 1] << 8)
1815}
1816
1817Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
1818 offset = offset >>> 0
1819 if (!noAssert) checkOffset(offset, 2, this.length)
1820 return (this[offset] << 8) | this[offset + 1]
1821}
1822
1823Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
1824 offset = offset >>> 0
1825 if (!noAssert) checkOffset(offset, 4, this.length)
1826
1827 return ((this[offset]) |
1828 (this[offset + 1] << 8) |
1829 (this[offset + 2] << 16)) +
1830 (this[offset + 3] * 0x1000000)
1831}
1832
1833Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
1834 offset = offset >>> 0
1835 if (!noAssert) checkOffset(offset, 4, this.length)
1836
1837 return (this[offset] * 0x1000000) +
1838 ((this[offset + 1] << 16) |
1839 (this[offset + 2] << 8) |
1840 this[offset + 3])
1841}
1842
1843Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
1844 offset = offset >>> 0
1845 byteLength = byteLength >>> 0
1846 if (!noAssert) checkOffset(offset, byteLength, this.length)
1847
1848 var val = this[offset]
1849 var mul = 1
1850 var i = 0
1851 while (++i < byteLength && (mul *= 0x100)) {
1852 val += this[offset + i] * mul
1853 }
1854 mul *= 0x80
1855
1856 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1857
1858 return val
1859}
1860
1861Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
1862 offset = offset >>> 0
1863 byteLength = byteLength >>> 0
1864 if (!noAssert) checkOffset(offset, byteLength, this.length)
1865
1866 var i = byteLength
1867 var mul = 1
1868 var val = this[offset + --i]
1869 while (i > 0 && (mul *= 0x100)) {
1870 val += this[offset + --i] * mul
1871 }
1872 mul *= 0x80
1873
1874 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1875
1876 return val
1877}
1878
1879Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
1880 offset = offset >>> 0
1881 if (!noAssert) checkOffset(offset, 1, this.length)
1882 if (!(this[offset] & 0x80)) return (this[offset])
1883 return ((0xff - this[offset] + 1) * -1)
1884}
1885
1886Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
1887 offset = offset >>> 0
1888 if (!noAssert) checkOffset(offset, 2, this.length)
1889 var val = this[offset] | (this[offset + 1] << 8)
1890 return (val & 0x8000) ? val | 0xFFFF0000 : val
1891}
1892
1893Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
1894 offset = offset >>> 0
1895 if (!noAssert) checkOffset(offset, 2, this.length)
1896 var val = this[offset + 1] | (this[offset] << 8)
1897 return (val & 0x8000) ? val | 0xFFFF0000 : val
1898}
1899
1900Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
1901 offset = offset >>> 0
1902 if (!noAssert) checkOffset(offset, 4, this.length)
1903
1904 return (this[offset]) |
1905 (this[offset + 1] << 8) |
1906 (this[offset + 2] << 16) |
1907 (this[offset + 3] << 24)
1908}
1909
1910Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
1911 offset = offset >>> 0
1912 if (!noAssert) checkOffset(offset, 4, this.length)
1913
1914 return (this[offset] << 24) |
1915 (this[offset + 1] << 16) |
1916 (this[offset + 2] << 8) |
1917 (this[offset + 3])
1918}
1919
1920Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
1921 offset = offset >>> 0
1922 if (!noAssert) checkOffset(offset, 4, this.length)
1923 return ieee754.read(this, offset, true, 23, 4)
1924}
1925
1926Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
1927 offset = offset >>> 0
1928 if (!noAssert) checkOffset(offset, 4, this.length)
1929 return ieee754.read(this, offset, false, 23, 4)
1930}
1931
1932Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
1933 offset = offset >>> 0
1934 if (!noAssert) checkOffset(offset, 8, this.length)
1935 return ieee754.read(this, offset, true, 52, 8)
1936}
1937
1938Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
1939 offset = offset >>> 0
1940 if (!noAssert) checkOffset(offset, 8, this.length)
1941 return ieee754.read(this, offset, false, 52, 8)
1942}
1943
1944function checkInt (buf, value, offset, ext, max, min) {
1945 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
1946 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
1947 if (offset + ext > buf.length) throw new RangeError('Index out of range')
1948}
1949
1950Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
1951 value = +value
1952 offset = offset >>> 0
1953 byteLength = byteLength >>> 0
1954 if (!noAssert) {
1955 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1956 checkInt(this, value, offset, byteLength, maxBytes, 0)
1957 }
1958
1959 var mul = 1
1960 var i = 0
1961 this[offset] = value & 0xFF
1962 while (++i < byteLength && (mul *= 0x100)) {
1963 this[offset + i] = (value / mul) & 0xFF
1964 }
1965
1966 return offset + byteLength
1967}
1968
1969Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
1970 value = +value
1971 offset = offset >>> 0
1972 byteLength = byteLength >>> 0
1973 if (!noAssert) {
1974 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1975 checkInt(this, value, offset, byteLength, maxBytes, 0)
1976 }
1977
1978 var i = byteLength - 1
1979 var mul = 1
1980 this[offset + i] = value & 0xFF
1981 while (--i >= 0 && (mul *= 0x100)) {
1982 this[offset + i] = (value / mul) & 0xFF
1983 }
1984
1985 return offset + byteLength
1986}
1987
1988Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
1989 value = +value
1990 offset = offset >>> 0
1991 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
1992 this[offset] = (value & 0xff)
1993 return offset + 1
1994}
1995
1996Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
1997 value = +value
1998 offset = offset >>> 0
1999 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
2000 this[offset] = (value & 0xff)
2001 this[offset + 1] = (value >>> 8)
2002 return offset + 2
2003}
2004
2005Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
2006 value = +value
2007 offset = offset >>> 0
2008 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
2009 this[offset] = (value >>> 8)
2010 this[offset + 1] = (value & 0xff)
2011 return offset + 2
2012}
2013
2014Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
2015 value = +value
2016 offset = offset >>> 0
2017 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
2018 this[offset + 3] = (value >>> 24)
2019 this[offset + 2] = (value >>> 16)
2020 this[offset + 1] = (value >>> 8)
2021 this[offset] = (value & 0xff)
2022 return offset + 4
2023}
2024
2025Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
2026 value = +value
2027 offset = offset >>> 0
2028 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
2029 this[offset] = (value >>> 24)
2030 this[offset + 1] = (value >>> 16)
2031 this[offset + 2] = (value >>> 8)
2032 this[offset + 3] = (value & 0xff)
2033 return offset + 4
2034}
2035
2036Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
2037 value = +value
2038 offset = offset >>> 0
2039 if (!noAssert) {
2040 var limit = Math.pow(2, (8 * byteLength) - 1)
2041
2042 checkInt(this, value, offset, byteLength, limit - 1, -limit)
2043 }
2044
2045 var i = 0
2046 var mul = 1
2047 var sub = 0
2048 this[offset] = value & 0xFF
2049 while (++i < byteLength && (mul *= 0x100)) {
2050 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
2051 sub = 1
2052 }
2053 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
2054 }
2055
2056 return offset + byteLength
2057}
2058
2059Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
2060 value = +value
2061 offset = offset >>> 0
2062 if (!noAssert) {
2063 var limit = Math.pow(2, (8 * byteLength) - 1)
2064
2065 checkInt(this, value, offset, byteLength, limit - 1, -limit)
2066 }
2067
2068 var i = byteLength - 1
2069 var mul = 1
2070 var sub = 0
2071 this[offset + i] = value & 0xFF
2072 while (--i >= 0 && (mul *= 0x100)) {
2073 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
2074 sub = 1
2075 }
2076 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
2077 }
2078
2079 return offset + byteLength
2080}
2081
2082Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
2083 value = +value
2084 offset = offset >>> 0
2085 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
2086 if (value < 0) value = 0xff + value + 1
2087 this[offset] = (value & 0xff)
2088 return offset + 1
2089}
2090
2091Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
2092 value = +value
2093 offset = offset >>> 0
2094 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
2095 this[offset] = (value & 0xff)
2096 this[offset + 1] = (value >>> 8)
2097 return offset + 2
2098}
2099
2100Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
2101 value = +value
2102 offset = offset >>> 0
2103 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
2104 this[offset] = (value >>> 8)
2105 this[offset + 1] = (value & 0xff)
2106 return offset + 2
2107}
2108
2109Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
2110 value = +value
2111 offset = offset >>> 0
2112 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
2113 this[offset] = (value & 0xff)
2114 this[offset + 1] = (value >>> 8)
2115 this[offset + 2] = (value >>> 16)
2116 this[offset + 3] = (value >>> 24)
2117 return offset + 4
2118}
2119
2120Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
2121 value = +value
2122 offset = offset >>> 0
2123 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
2124 if (value < 0) value = 0xffffffff + value + 1
2125 this[offset] = (value >>> 24)
2126 this[offset + 1] = (value >>> 16)
2127 this[offset + 2] = (value >>> 8)
2128 this[offset + 3] = (value & 0xff)
2129 return offset + 4
2130}
2131
2132function checkIEEE754 (buf, value, offset, ext, max, min) {
2133 if (offset + ext > buf.length) throw new RangeError('Index out of range')
2134 if (offset < 0) throw new RangeError('Index out of range')
2135}
2136
2137function writeFloat (buf, value, offset, littleEndian, noAssert) {
2138 value = +value
2139 offset = offset >>> 0
2140 if (!noAssert) {
2141 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
2142 }
2143 ieee754.write(buf, value, offset, littleEndian, 23, 4)
2144 return offset + 4
2145}
2146
2147Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
2148 return writeFloat(this, value, offset, true, noAssert)
2149}
2150
2151Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
2152 return writeFloat(this, value, offset, false, noAssert)
2153}
2154
2155function writeDouble (buf, value, offset, littleEndian, noAssert) {
2156 value = +value
2157 offset = offset >>> 0
2158 if (!noAssert) {
2159 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
2160 }
2161 ieee754.write(buf, value, offset, littleEndian, 52, 8)
2162 return offset + 8
2163}
2164
2165Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
2166 return writeDouble(this, value, offset, true, noAssert)
2167}
2168
2169Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
2170 return writeDouble(this, value, offset, false, noAssert)
2171}
2172
2173// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
2174Buffer.prototype.copy = function copy (target, targetStart, start, end) {
2175 if (!start) start = 0
2176 if (!end && end !== 0) end = this.length
2177 if (targetStart >= target.length) targetStart = target.length
2178 if (!targetStart) targetStart = 0
2179 if (end > 0 && end < start) end = start
2180
2181 // Copy 0 bytes; we're done
2182 if (end === start) return 0
2183 if (target.length === 0 || this.length === 0) return 0
2184
2185 // Fatal error conditions
2186 if (targetStart < 0) {
2187 throw new RangeError('targetStart out of bounds')
2188 }
2189 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
2190 if (end < 0) throw new RangeError('sourceEnd out of bounds')
2191
2192 // Are we oob?
2193 if (end > this.length) end = this.length
2194 if (target.length - targetStart < end - start) {
2195 end = target.length - targetStart + start
2196 }
2197
2198 var len = end - start
2199 var i
2200
2201 if (this === target && start < targetStart && targetStart < end) {
2202 // descending copy from end
2203 for (i = len - 1; i >= 0; --i) {
2204 target[i + targetStart] = this[i + start]
2205 }
2206 } else if (len < 1000) {
2207 // ascending copy from start
2208 for (i = 0; i < len; ++i) {
2209 target[i + targetStart] = this[i + start]
2210 }
2211 } else {
2212 Uint8Array.prototype.set.call(
2213 target,
2214 this.subarray(start, start + len),
2215 targetStart
2216 )
2217 }
2218
2219 return len
2220}
2221
2222// Usage:
2223// buffer.fill(number[, offset[, end]])
2224// buffer.fill(buffer[, offset[, end]])
2225// buffer.fill(string[, offset[, end]][, encoding])
2226Buffer.prototype.fill = function fill (val, start, end, encoding) {
2227 // Handle string cases:
2228 if (typeof val === 'string') {
2229 if (typeof start === 'string') {
2230 encoding = start
2231 start = 0
2232 end = this.length
2233 } else if (typeof end === 'string') {
2234 encoding = end
2235 end = this.length
2236 }
2237 if (val.length === 1) {
2238 var code = val.charCodeAt(0)
2239 if (code < 256) {
2240 val = code
2241 }
2242 }
2243 if (encoding !== undefined && typeof encoding !== 'string') {
2244 throw new TypeError('encoding must be a string')
2245 }
2246 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
2247 throw new TypeError('Unknown encoding: ' + encoding)
2248 }
2249 } else if (typeof val === 'number') {
2250 val = val & 255
2251 }
2252
2253 // Invalid ranges are not set to a default, so can range check early.
2254 if (start < 0 || this.length < start || this.length < end) {
2255 throw new RangeError('Out of range index')
2256 }
2257
2258 if (end <= start) {
2259 return this
2260 }
2261
2262 start = start >>> 0
2263 end = end === undefined ? this.length : end >>> 0
2264
2265 if (!val) val = 0
2266
2267 var i
2268 if (typeof val === 'number') {
2269 for (i = start; i < end; ++i) {
2270 this[i] = val
2271 }
2272 } else {
2273 var bytes = Buffer.isBuffer(val)
2274 ? val
2275 : new Buffer(val, encoding)
2276 var len = bytes.length
2277 for (i = 0; i < end - start; ++i) {
2278 this[i + start] = bytes[i % len]
2279 }
2280 }
2281
2282 return this
2283}
2284
2285// HELPER FUNCTIONS
2286// ================
2287
2288var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
2289
2290function base64clean (str) {
2291 // Node strips out invalid characters like \n and \t from the string, base64-js does not
2292 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
2293 // Node converts strings with length < 2 to ''
2294 if (str.length < 2) return ''
2295 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
2296 while (str.length % 4 !== 0) {
2297 str = str + '='
2298 }
2299 return str
2300}
2301
2302function stringtrim (str) {
2303 if (str.trim) return str.trim()
2304 return str.replace(/^\s+|\s+$/g, '')
2305}
2306
2307function toHex (n) {
2308 if (n < 16) return '0' + n.toString(16)
2309 return n.toString(16)
2310}
2311
2312function utf8ToBytes (string, units) {
2313 units = units || Infinity
2314 var codePoint
2315 var length = string.length
2316 var leadSurrogate = null
2317 var bytes = []
2318
2319 for (var i = 0; i < length; ++i) {
2320 codePoint = string.charCodeAt(i)
2321
2322 // is surrogate component
2323 if (codePoint > 0xD7FF && codePoint < 0xE000) {
2324 // last char was a lead
2325 if (!leadSurrogate) {
2326 // no lead yet
2327 if (codePoint > 0xDBFF) {
2328 // unexpected trail
2329 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2330 continue
2331 } else if (i + 1 === length) {
2332 // unpaired lead
2333 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2334 continue
2335 }
2336
2337 // valid lead
2338 leadSurrogate = codePoint
2339
2340 continue
2341 }
2342
2343 // 2 leads in a row
2344 if (codePoint < 0xDC00) {
2345 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2346 leadSurrogate = codePoint
2347 continue
2348 }
2349
2350 // valid surrogate pair
2351 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
2352 } else if (leadSurrogate) {
2353 // valid bmp char, but last char was a lead
2354 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2355 }
2356
2357 leadSurrogate = null
2358
2359 // encode utf8
2360 if (codePoint < 0x80) {
2361 if ((units -= 1) < 0) break
2362 bytes.push(codePoint)
2363 } else if (codePoint < 0x800) {
2364 if ((units -= 2) < 0) break
2365 bytes.push(
2366 codePoint >> 0x6 | 0xC0,
2367 codePoint & 0x3F | 0x80
2368 )
2369 } else if (codePoint < 0x10000) {
2370 if ((units -= 3) < 0) break
2371 bytes.push(
2372 codePoint >> 0xC | 0xE0,
2373 codePoint >> 0x6 & 0x3F | 0x80,
2374 codePoint & 0x3F | 0x80
2375 )
2376 } else if (codePoint < 0x110000) {
2377 if ((units -= 4) < 0) break
2378 bytes.push(
2379 codePoint >> 0x12 | 0xF0,
2380 codePoint >> 0xC & 0x3F | 0x80,
2381 codePoint >> 0x6 & 0x3F | 0x80,
2382 codePoint & 0x3F | 0x80
2383 )
2384 } else {
2385 throw new Error('Invalid code point')
2386 }
2387 }
2388
2389 return bytes
2390}
2391
2392function asciiToBytes (str) {
2393 var byteArray = []
2394 for (var i = 0; i < str.length; ++i) {
2395 // Node's code seems to be doing this and not & 0x7F..
2396 byteArray.push(str.charCodeAt(i) & 0xFF)
2397 }
2398 return byteArray
2399}
2400
2401function utf16leToBytes (str, units) {
2402 var c, hi, lo
2403 var byteArray = []
2404 for (var i = 0; i < str.length; ++i) {
2405 if ((units -= 2) < 0) break
2406
2407 c = str.charCodeAt(i)
2408 hi = c >> 8
2409 lo = c % 256
2410 byteArray.push(lo)
2411 byteArray.push(hi)
2412 }
2413
2414 return byteArray
2415}
2416
2417function base64ToBytes (str) {
2418 return base64.toByteArray(base64clean(str))
2419}
2420
2421function blitBuffer (src, dst, offset, length) {
2422 for (var i = 0; i < length; ++i) {
2423 if ((i + offset >= dst.length) || (i >= src.length)) break
2424 dst[i + offset] = src[i]
2425 }
2426 return i
2427}
2428
2429function isnan (val) {
2430 return val !== val // eslint-disable-line no-self-compare
2431}
2432
2433},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
2434(function (Buffer){
2435// Copyright Joyent, Inc. and other Node contributors.
2436//
2437// Permission is hereby granted, free of charge, to any person obtaining a
2438// copy of this software and associated documentation files (the
2439// "Software"), to deal in the Software without restriction, including
2440// without limitation the rights to use, copy, modify, merge, publish,
2441// distribute, sublicense, and/or sell copies of the Software, and to permit
2442// persons to whom the Software is furnished to do so, subject to the
2443// following conditions:
2444//
2445// The above copyright notice and this permission notice shall be included
2446// in all copies or substantial portions of the Software.
2447//
2448// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2449// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2450// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2451// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2452// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2453// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2454// USE OR OTHER DEALINGS IN THE SOFTWARE.
2455
2456// NOTE: These type checking functions intentionally don't use `instanceof`
2457// because it is fragile and can be easily faked with `Object.create()`.
2458
2459function isArray(arg) {
2460 if (Array.isArray) {
2461 return Array.isArray(arg);
2462 }
2463 return objectToString(arg) === '[object Array]';
2464}
2465exports.isArray = isArray;
2466
2467function isBoolean(arg) {
2468 return typeof arg === 'boolean';
2469}
2470exports.isBoolean = isBoolean;
2471
2472function isNull(arg) {
2473 return arg === null;
2474}
2475exports.isNull = isNull;
2476
2477function isNullOrUndefined(arg) {
2478 return arg == null;
2479}
2480exports.isNullOrUndefined = isNullOrUndefined;
2481
2482function isNumber(arg) {
2483 return typeof arg === 'number';
2484}
2485exports.isNumber = isNumber;
2486
2487function isString(arg) {
2488 return typeof arg === 'string';
2489}
2490exports.isString = isString;
2491
2492function isSymbol(arg) {
2493 return typeof arg === 'symbol';
2494}
2495exports.isSymbol = isSymbol;
2496
2497function isUndefined(arg) {
2498 return arg === void 0;
2499}
2500exports.isUndefined = isUndefined;
2501
2502function isRegExp(re) {
2503 return objectToString(re) === '[object RegExp]';
2504}
2505exports.isRegExp = isRegExp;
2506
2507function isObject(arg) {
2508 return typeof arg === 'object' && arg !== null;
2509}
2510exports.isObject = isObject;
2511
2512function isDate(d) {
2513 return objectToString(d) === '[object Date]';
2514}
2515exports.isDate = isDate;
2516
2517function isError(e) {
2518 return (objectToString(e) === '[object Error]' || e instanceof Error);
2519}
2520exports.isError = isError;
2521
2522function isFunction(arg) {
2523 return typeof arg === 'function';
2524}
2525exports.isFunction = isFunction;
2526
2527function isPrimitive(arg) {
2528 return arg === null ||
2529 typeof arg === 'boolean' ||
2530 typeof arg === 'number' ||
2531 typeof arg === 'string' ||
2532 typeof arg === 'symbol' || // ES6 symbol
2533 typeof arg === 'undefined';
2534}
2535exports.isPrimitive = isPrimitive;
2536
2537exports.isBuffer = Buffer.isBuffer;
2538
2539function objectToString(o) {
2540 return Object.prototype.toString.call(o);
2541}
2542
2543}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
2544},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
2545// Copyright Joyent, Inc. and other Node contributors.
2546//
2547// Permission is hereby granted, free of charge, to any person obtaining a
2548// copy of this software and associated documentation files (the
2549// "Software"), to deal in the Software without restriction, including
2550// without limitation the rights to use, copy, modify, merge, publish,
2551// distribute, sublicense, and/or sell copies of the Software, and to permit
2552// persons to whom the Software is furnished to do so, subject to the
2553// following conditions:
2554//
2555// The above copyright notice and this permission notice shall be included
2556// in all copies or substantial portions of the Software.
2557//
2558// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2559// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2560// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2561// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2562// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2563// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2564// USE OR OTHER DEALINGS IN THE SOFTWARE.
2565
2566function EventEmitter() {
2567 this._events = this._events || {};
2568 this._maxListeners = this._maxListeners || undefined;
2569}
2570module.exports = EventEmitter;
2571
2572// Backwards-compat with node 0.10.x
2573EventEmitter.EventEmitter = EventEmitter;
2574
2575EventEmitter.prototype._events = undefined;
2576EventEmitter.prototype._maxListeners = undefined;
2577
2578// By default EventEmitters will print a warning if more than 10 listeners are
2579// added to it. This is a useful default which helps finding memory leaks.
2580EventEmitter.defaultMaxListeners = 10;
2581
2582// Obviously not all Emitters should be limited to 10. This function allows
2583// that to be increased. Set to zero for unlimited.
2584EventEmitter.prototype.setMaxListeners = function(n) {
2585 if (!isNumber(n) || n < 0 || isNaN(n))
2586 throw TypeError('n must be a positive number');
2587 this._maxListeners = n;
2588 return this;
2589};
2590
2591EventEmitter.prototype.emit = function(type) {
2592 var er, handler, len, args, i, listeners;
2593
2594 if (!this._events)
2595 this._events = {};
2596
2597 // If there is no 'error' event listener then throw.
2598 if (type === 'error') {
2599 if (!this._events.error ||
2600 (isObject(this._events.error) && !this._events.error.length)) {
2601 er = arguments[1];
2602 if (er instanceof Error) {
2603 throw er; // Unhandled 'error' event
2604 } else {
2605 // At least give some kind of context to the user
2606 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
2607 err.context = er;
2608 throw err;
2609 }
2610 }
2611 }
2612
2613 handler = this._events[type];
2614
2615 if (isUndefined(handler))
2616 return false;
2617
2618 if (isFunction(handler)) {
2619 switch (arguments.length) {
2620 // fast cases
2621 case 1:
2622 handler.call(this);
2623 break;
2624 case 2:
2625 handler.call(this, arguments[1]);
2626 break;
2627 case 3:
2628 handler.call(this, arguments[1], arguments[2]);
2629 break;
2630 // slower
2631 default:
2632 args = Array.prototype.slice.call(arguments, 1);
2633 handler.apply(this, args);
2634 }
2635 } else if (isObject(handler)) {
2636 args = Array.prototype.slice.call(arguments, 1);
2637 listeners = handler.slice();
2638 len = listeners.length;
2639 for (i = 0; i < len; i++)
2640 listeners[i].apply(this, args);
2641 }
2642
2643 return true;
2644};
2645
2646EventEmitter.prototype.addListener = function(type, listener) {
2647 var m;
2648
2649 if (!isFunction(listener))
2650 throw TypeError('listener must be a function');
2651
2652 if (!this._events)
2653 this._events = {};
2654
2655 // To avoid recursion in the case that type === "newListener"! Before
2656 // adding it to the listeners, first emit "newListener".
2657 if (this._events.newListener)
2658 this.emit('newListener', type,
2659 isFunction(listener.listener) ?
2660 listener.listener : listener);
2661
2662 if (!this._events[type])
2663 // Optimize the case of one listener. Don't need the extra array object.
2664 this._events[type] = listener;
2665 else if (isObject(this._events[type]))
2666 // If we've already got an array, just append.
2667 this._events[type].push(listener);
2668 else
2669 // Adding the second element, need to change to array.
2670 this._events[type] = [this._events[type], listener];
2671
2672 // Check for listener leak
2673 if (isObject(this._events[type]) && !this._events[type].warned) {
2674 if (!isUndefined(this._maxListeners)) {
2675 m = this._maxListeners;
2676 } else {
2677 m = EventEmitter.defaultMaxListeners;
2678 }
2679
2680 if (m && m > 0 && this._events[type].length > m) {
2681 this._events[type].warned = true;
2682 console.error('(node) warning: possible EventEmitter memory ' +
2683 'leak detected. %d listeners added. ' +
2684 'Use emitter.setMaxListeners() to increase limit.',
2685 this._events[type].length);
2686 if (typeof console.trace === 'function') {
2687 // not supported in IE 10
2688 console.trace();
2689 }
2690 }
2691 }
2692
2693 return this;
2694};
2695
2696EventEmitter.prototype.on = EventEmitter.prototype.addListener;
2697
2698EventEmitter.prototype.once = function(type, listener) {
2699 if (!isFunction(listener))
2700 throw TypeError('listener must be a function');
2701
2702 var fired = false;
2703
2704 function g() {
2705 this.removeListener(type, g);
2706
2707 if (!fired) {
2708 fired = true;
2709 listener.apply(this, arguments);
2710 }
2711 }
2712
2713 g.listener = listener;
2714 this.on(type, g);
2715
2716 return this;
2717};
2718
2719// emits a 'removeListener' event iff the listener was removed
2720EventEmitter.prototype.removeListener = function(type, listener) {
2721 var list, position, length, i;
2722
2723 if (!isFunction(listener))
2724 throw TypeError('listener must be a function');
2725
2726 if (!this._events || !this._events[type])
2727 return this;
2728
2729 list = this._events[type];
2730 length = list.length;
2731 position = -1;
2732
2733 if (list === listener ||
2734 (isFunction(list.listener) && list.listener === listener)) {
2735 delete this._events[type];
2736 if (this._events.removeListener)
2737 this.emit('removeListener', type, listener);
2738
2739 } else if (isObject(list)) {
2740 for (i = length; i-- > 0;) {
2741 if (list[i] === listener ||
2742 (list[i].listener && list[i].listener === listener)) {
2743 position = i;
2744 break;
2745 }
2746 }
2747
2748 if (position < 0)
2749 return this;
2750
2751 if (list.length === 1) {
2752 list.length = 0;
2753 delete this._events[type];
2754 } else {
2755 list.splice(position, 1);
2756 }
2757
2758 if (this._events.removeListener)
2759 this.emit('removeListener', type, listener);
2760 }
2761
2762 return this;
2763};
2764
2765EventEmitter.prototype.removeAllListeners = function(type) {
2766 var key, listeners;
2767
2768 if (!this._events)
2769 return this;
2770
2771 // not listening for removeListener, no need to emit
2772 if (!this._events.removeListener) {
2773 if (arguments.length === 0)
2774 this._events = {};
2775 else if (this._events[type])
2776 delete this._events[type];
2777 return this;
2778 }
2779
2780 // emit removeListener for all listeners on all events
2781 if (arguments.length === 0) {
2782 for (key in this._events) {
2783 if (key === 'removeListener') continue;
2784 this.removeAllListeners(key);
2785 }
2786 this.removeAllListeners('removeListener');
2787 this._events = {};
2788 return this;
2789 }
2790
2791 listeners = this._events[type];
2792
2793 if (isFunction(listeners)) {
2794 this.removeListener(type, listeners);
2795 } else if (listeners) {
2796 // LIFO order
2797 while (listeners.length)
2798 this.removeListener(type, listeners[listeners.length - 1]);
2799 }
2800 delete this._events[type];
2801
2802 return this;
2803};
2804
2805EventEmitter.prototype.listeners = function(type) {
2806 var ret;
2807 if (!this._events || !this._events[type])
2808 ret = [];
2809 else if (isFunction(this._events[type]))
2810 ret = [this._events[type]];
2811 else
2812 ret = this._events[type].slice();
2813 return ret;
2814};
2815
2816EventEmitter.prototype.listenerCount = function(type) {
2817 if (this._events) {
2818 var evlistener = this._events[type];
2819
2820 if (isFunction(evlistener))
2821 return 1;
2822 else if (evlistener)
2823 return evlistener.length;
2824 }
2825 return 0;
2826};
2827
2828EventEmitter.listenerCount = function(emitter, type) {
2829 return emitter.listenerCount(type);
2830};
2831
2832function isFunction(arg) {
2833 return typeof arg === 'function';
2834}
2835
2836function isNumber(arg) {
2837 return typeof arg === 'number';
2838}
2839
2840function isObject(arg) {
2841 return typeof arg === 'object' && arg !== null;
2842}
2843
2844function isUndefined(arg) {
2845 return arg === void 0;
2846}
2847
2848},{}],8:[function(require,module,exports){
2849exports.read = function (buffer, offset, isLE, mLen, nBytes) {
2850 var e, m
2851 var eLen = nBytes * 8 - mLen - 1
2852 var eMax = (1 << eLen) - 1
2853 var eBias = eMax >> 1
2854 var nBits = -7
2855 var i = isLE ? (nBytes - 1) : 0
2856 var d = isLE ? -1 : 1
2857 var s = buffer[offset + i]
2858
2859 i += d
2860
2861 e = s & ((1 << (-nBits)) - 1)
2862 s >>= (-nBits)
2863 nBits += eLen
2864 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
2865
2866 m = e & ((1 << (-nBits)) - 1)
2867 e >>= (-nBits)
2868 nBits += mLen
2869 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
2870
2871 if (e === 0) {
2872 e = 1 - eBias
2873 } else if (e === eMax) {
2874 return m ? NaN : ((s ? -1 : 1) * Infinity)
2875 } else {
2876 m = m + Math.pow(2, mLen)
2877 e = e - eBias
2878 }
2879 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
2880}
2881
2882exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
2883 var e, m, c
2884 var eLen = nBytes * 8 - mLen - 1
2885 var eMax = (1 << eLen) - 1
2886 var eBias = eMax >> 1
2887 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
2888 var i = isLE ? 0 : (nBytes - 1)
2889 var d = isLE ? 1 : -1
2890 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
2891
2892 value = Math.abs(value)
2893
2894 if (isNaN(value) || value === Infinity) {
2895 m = isNaN(value) ? 1 : 0
2896 e = eMax
2897 } else {
2898 e = Math.floor(Math.log(value) / Math.LN2)
2899 if (value * (c = Math.pow(2, -e)) < 1) {
2900 e--
2901 c *= 2
2902 }
2903 if (e + eBias >= 1) {
2904 value += rt / c
2905 } else {
2906 value += rt * Math.pow(2, 1 - eBias)
2907 }
2908 if (value * c >= 2) {
2909 e++
2910 c /= 2
2911 }
2912
2913 if (e + eBias >= eMax) {
2914 m = 0
2915 e = eMax
2916 } else if (e + eBias >= 1) {
2917 m = (value * c - 1) * Math.pow(2, mLen)
2918 e = e + eBias
2919 } else {
2920 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
2921 e = 0
2922 }
2923 }
2924
2925 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
2926
2927 e = (e << mLen) | m
2928 eLen += mLen
2929 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
2930
2931 buffer[offset + i - d] |= s * 128
2932}
2933
2934},{}],9:[function(require,module,exports){
2935if (typeof Object.create === 'function') {
2936 // implementation from standard node.js 'util' module
2937 module.exports = function inherits(ctor, superCtor) {
2938 ctor.super_ = superCtor
2939 ctor.prototype = Object.create(superCtor.prototype, {
2940 constructor: {
2941 value: ctor,
2942 enumerable: false,
2943 writable: true,
2944 configurable: true
2945 }
2946 });
2947 };
2948} else {
2949 // old school shim for old browsers
2950 module.exports = function inherits(ctor, superCtor) {
2951 ctor.super_ = superCtor
2952 var TempCtor = function () {}
2953 TempCtor.prototype = superCtor.prototype
2954 ctor.prototype = new TempCtor()
2955 ctor.prototype.constructor = ctor
2956 }
2957}
2958
2959},{}],10:[function(require,module,exports){
2960/*!
2961 * Determine if an object is a Buffer
2962 *
2963 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2964 * @license MIT
2965 */
2966
2967// The _isBuffer check is for Safari 5-7 support, because it's missing
2968// Object.prototype.constructor. Remove this eventually
2969module.exports = function (obj) {
2970 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
2971}
2972
2973function isBuffer (obj) {
2974 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
2975}
2976
2977// For Node v0.10 support. Remove this eventually.
2978function isSlowBuffer (obj) {
2979 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
2980}
2981
2982},{}],11:[function(require,module,exports){
2983var toString = {}.toString;
2984
2985module.exports = Array.isArray || function (arr) {
2986 return toString.call(arr) == '[object Array]';
2987};
2988
2989},{}],12:[function(require,module,exports){
2990(function (process){
2991'use strict';
2992
2993if (!process.version ||
2994 process.version.indexOf('v0.') === 0 ||
2995 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
2996 module.exports = nextTick;
2997} else {
2998 module.exports = process.nextTick;
2999}
3000
3001function nextTick(fn, arg1, arg2, arg3) {
3002 if (typeof fn !== 'function') {
3003 throw new TypeError('"callback" argument must be a function');
3004 }
3005 var len = arguments.length;
3006 var args, i;
3007 switch (len) {
3008 case 0:
3009 case 1:
3010 return process.nextTick(fn);
3011 case 2:
3012 return process.nextTick(function afterTickOne() {
3013 fn.call(null, arg1);
3014 });
3015 case 3:
3016 return process.nextTick(function afterTickTwo() {
3017 fn.call(null, arg1, arg2);
3018 });
3019 case 4:
3020 return process.nextTick(function afterTickThree() {
3021 fn.call(null, arg1, arg2, arg3);
3022 });
3023 default:
3024 args = new Array(len - 1);
3025 i = 0;
3026 while (i < args.length) {
3027 args[i++] = arguments[i];
3028 }
3029 return process.nextTick(function afterTick() {
3030 fn.apply(null, args);
3031 });
3032 }
3033}
3034
3035}).call(this,require('_process'))
3036},{"_process":13}],13:[function(require,module,exports){
3037// shim for using process in browser
3038var process = module.exports = {};
3039
3040// cached from whatever global is present so that test runners that stub it
3041// don't break things. But we need to wrap it in a try catch in case it is
3042// wrapped in strict mode code which doesn't define any globals. It's inside a
3043// function because try/catches deoptimize in certain engines.
3044
3045var cachedSetTimeout;
3046var cachedClearTimeout;
3047
3048function defaultSetTimout() {
3049 throw new Error('setTimeout has not been defined');
3050}
3051function defaultClearTimeout () {
3052 throw new Error('clearTimeout has not been defined');
3053}
3054(function () {
3055 try {
3056 if (typeof setTimeout === 'function') {
3057 cachedSetTimeout = setTimeout;
3058 } else {
3059 cachedSetTimeout = defaultSetTimout;
3060 }
3061 } catch (e) {
3062 cachedSetTimeout = defaultSetTimout;
3063 }
3064 try {
3065 if (typeof clearTimeout === 'function') {
3066 cachedClearTimeout = clearTimeout;
3067 } else {
3068 cachedClearTimeout = defaultClearTimeout;
3069 }
3070 } catch (e) {
3071 cachedClearTimeout = defaultClearTimeout;
3072 }
3073} ())
3074function runTimeout(fun) {
3075 if (cachedSetTimeout === setTimeout) {
3076 //normal enviroments in sane situations
3077 return setTimeout(fun, 0);
3078 }
3079 // if setTimeout wasn't available but was latter defined
3080 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
3081 cachedSetTimeout = setTimeout;
3082 return setTimeout(fun, 0);
3083 }
3084 try {
3085 // when when somebody has screwed with setTimeout but no I.E. maddness
3086 return cachedSetTimeout(fun, 0);
3087 } catch(e){
3088 try {
3089 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
3090 return cachedSetTimeout.call(null, fun, 0);
3091 } catch(e){
3092 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
3093 return cachedSetTimeout.call(this, fun, 0);
3094 }
3095 }
3096
3097
3098}
3099function runClearTimeout(marker) {
3100 if (cachedClearTimeout === clearTimeout) {
3101 //normal enviroments in sane situations
3102 return clearTimeout(marker);
3103 }
3104 // if clearTimeout wasn't available but was latter defined
3105 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
3106 cachedClearTimeout = clearTimeout;
3107 return clearTimeout(marker);
3108 }
3109 try {
3110 // when when somebody has screwed with setTimeout but no I.E. maddness
3111 return cachedClearTimeout(marker);
3112 } catch (e){
3113 try {
3114 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
3115 return cachedClearTimeout.call(null, marker);
3116 } catch (e){
3117 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
3118 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
3119 return cachedClearTimeout.call(this, marker);
3120 }
3121 }
3122
3123
3124
3125}
3126var queue = [];
3127var draining = false;
3128var currentQueue;
3129var queueIndex = -1;
3130
3131function cleanUpNextTick() {
3132 if (!draining || !currentQueue) {
3133 return;
3134 }
3135 draining = false;
3136 if (currentQueue.length) {
3137 queue = currentQueue.concat(queue);
3138 } else {
3139 queueIndex = -1;
3140 }
3141 if (queue.length) {
3142 drainQueue();
3143 }
3144}
3145
3146function drainQueue() {
3147 if (draining) {
3148 return;
3149 }
3150 var timeout = runTimeout(cleanUpNextTick);
3151 draining = true;
3152
3153 var len = queue.length;
3154 while(len) {
3155 currentQueue = queue;
3156 queue = [];
3157 while (++queueIndex < len) {
3158 if (currentQueue) {
3159 currentQueue[queueIndex].run();
3160 }
3161 }
3162 queueIndex = -1;
3163 len = queue.length;
3164 }
3165 currentQueue = null;
3166 draining = false;
3167 runClearTimeout(timeout);
3168}
3169
3170process.nextTick = function (fun) {
3171 var args = new Array(arguments.length - 1);
3172 if (arguments.length > 1) {
3173 for (var i = 1; i < arguments.length; i++) {
3174 args[i - 1] = arguments[i];
3175 }
3176 }
3177 queue.push(new Item(fun, args));
3178 if (queue.length === 1 && !draining) {
3179 runTimeout(drainQueue);
3180 }
3181};
3182
3183// v8 likes predictible objects
3184function Item(fun, array) {
3185 this.fun = fun;
3186 this.array = array;
3187}
3188Item.prototype.run = function () {
3189 this.fun.apply(null, this.array);
3190};
3191process.title = 'browser';
3192process.browser = true;
3193process.env = {};
3194process.argv = [];
3195process.version = ''; // empty string to avoid regexp issues
3196process.versions = {};
3197
3198function noop() {}
3199
3200process.on = noop;
3201process.addListener = noop;
3202process.once = noop;
3203process.off = noop;
3204process.removeListener = noop;
3205process.removeAllListeners = noop;
3206process.emit = noop;
3207
3208process.binding = function (name) {
3209 throw new Error('process.binding is not supported');
3210};
3211
3212process.cwd = function () { return '/' };
3213process.chdir = function (dir) {
3214 throw new Error('process.chdir is not supported');
3215};
3216process.umask = function() { return 0; };
3217
3218},{}],14:[function(require,module,exports){
3219module.exports = require("./lib/_stream_duplex.js")
3220
3221},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
3222// a duplex stream is just a stream that is both readable and writable.
3223// Since JS doesn't have multiple prototypal inheritance, this class
3224// prototypally inherits from Readable, and then parasitically from
3225// Writable.
3226
3227'use strict';
3228
3229/*<replacement>*/
3230
3231var objectKeys = Object.keys || function (obj) {
3232 var keys = [];
3233 for (var key in obj) {
3234 keys.push(key);
3235 }return keys;
3236};
3237/*</replacement>*/
3238
3239module.exports = Duplex;
3240
3241/*<replacement>*/
3242var processNextTick = require('process-nextick-args');
3243/*</replacement>*/
3244
3245/*<replacement>*/
3246var util = require('core-util-is');
3247util.inherits = require('inherits');
3248/*</replacement>*/
3249
3250var Readable = require('./_stream_readable');
3251var Writable = require('./_stream_writable');
3252
3253util.inherits(Duplex, Readable);
3254
3255var keys = objectKeys(Writable.prototype);
3256for (var v = 0; v < keys.length; v++) {
3257 var method = keys[v];
3258 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
3259}
3260
3261function Duplex(options) {
3262 if (!(this instanceof Duplex)) return new Duplex(options);
3263
3264 Readable.call(this, options);
3265 Writable.call(this, options);
3266
3267 if (options && options.readable === false) this.readable = false;
3268
3269 if (options && options.writable === false) this.writable = false;
3270
3271 this.allowHalfOpen = true;
3272 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
3273
3274 this.once('end', onend);
3275}
3276
3277// the no-half-open enforcer
3278function onend() {
3279 // if we allow half-open state, or if the writable side ended,
3280 // then we're ok.
3281 if (this.allowHalfOpen || this._writableState.ended) return;
3282
3283 // no more data can be written.
3284 // But allow more writes to happen in this tick.
3285 processNextTick(onEndNT, this);
3286}
3287
3288function onEndNT(self) {
3289 self.end();
3290}
3291
3292function forEach(xs, f) {
3293 for (var i = 0, l = xs.length; i < l; i++) {
3294 f(xs[i], i);
3295 }
3296}
3297},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
3298// a passthrough stream.
3299// basically just the most minimal sort of Transform stream.
3300// Every written chunk gets output as-is.
3301
3302'use strict';
3303
3304module.exports = PassThrough;
3305
3306var Transform = require('./_stream_transform');
3307
3308/*<replacement>*/
3309var util = require('core-util-is');
3310util.inherits = require('inherits');
3311/*</replacement>*/
3312
3313util.inherits(PassThrough, Transform);
3314
3315function PassThrough(options) {
3316 if (!(this instanceof PassThrough)) return new PassThrough(options);
3317
3318 Transform.call(this, options);
3319}
3320
3321PassThrough.prototype._transform = function (chunk, encoding, cb) {
3322 cb(null, chunk);
3323};
3324},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
3325(function (process){
3326'use strict';
3327
3328module.exports = Readable;
3329
3330/*<replacement>*/
3331var processNextTick = require('process-nextick-args');
3332/*</replacement>*/
3333
3334/*<replacement>*/
3335var isArray = require('isarray');
3336/*</replacement>*/
3337
3338/*<replacement>*/
3339var Duplex;
3340/*</replacement>*/
3341
3342Readable.ReadableState = ReadableState;
3343
3344/*<replacement>*/
3345var EE = require('events').EventEmitter;
3346
3347var EElistenerCount = function (emitter, type) {
3348 return emitter.listeners(type).length;
3349};
3350/*</replacement>*/
3351
3352/*<replacement>*/
3353var Stream;
3354(function () {
3355 try {
3356 Stream = require('st' + 'ream');
3357 } catch (_) {} finally {
3358 if (!Stream) Stream = require('events').EventEmitter;
3359 }
3360})();
3361/*</replacement>*/
3362
3363var Buffer = require('buffer').Buffer;
3364/*<replacement>*/
3365var bufferShim = require('buffer-shims');
3366/*</replacement>*/
3367
3368/*<replacement>*/
3369var util = require('core-util-is');
3370util.inherits = require('inherits');
3371/*</replacement>*/
3372
3373/*<replacement>*/
3374var debugUtil = require('util');
3375var debug = void 0;
3376if (debugUtil && debugUtil.debuglog) {
3377 debug = debugUtil.debuglog('stream');
3378} else {
3379 debug = function () {};
3380}
3381/*</replacement>*/
3382
3383var BufferList = require('./internal/streams/BufferList');
3384var StringDecoder;
3385
3386util.inherits(Readable, Stream);
3387
3388function prependListener(emitter, event, fn) {
3389 // Sadly this is not cacheable as some libraries bundle their own
3390 // event emitter implementation with them.
3391 if (typeof emitter.prependListener === 'function') {
3392 return emitter.prependListener(event, fn);
3393 } else {
3394 // This is a hack to make sure that our error handler is attached before any
3395 // userland ones. NEVER DO THIS. This is here only because this code needs
3396 // to continue to work with older versions of Node.js that do not include
3397 // the prependListener() method. The goal is to eventually remove this hack.
3398 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
3399 }
3400}
3401
3402function ReadableState(options, stream) {
3403 Duplex = Duplex || require('./_stream_duplex');
3404
3405 options = options || {};
3406
3407 // object stream flag. Used to make read(n) ignore n and to
3408 // make all the buffer merging and length checks go away
3409 this.objectMode = !!options.objectMode;
3410
3411 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
3412
3413 // the point at which it stops calling _read() to fill the buffer
3414 // Note: 0 is a valid value, means "don't call _read preemptively ever"
3415 var hwm = options.highWaterMark;
3416 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
3417 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
3418
3419 // cast to ints.
3420 this.highWaterMark = ~ ~this.highWaterMark;
3421
3422 // A linked list is used to store data chunks instead of an array because the
3423 // linked list can remove elements from the beginning faster than
3424 // array.shift()
3425 this.buffer = new BufferList();
3426 this.length = 0;
3427 this.pipes = null;
3428 this.pipesCount = 0;
3429 this.flowing = null;
3430 this.ended = false;
3431 this.endEmitted = false;
3432 this.reading = false;
3433
3434 // a flag to be able to tell if the onwrite cb is called immediately,
3435 // or on a later tick. We set this to true at first, because any
3436 // actions that shouldn't happen until "later" should generally also
3437 // not happen before the first write call.
3438 this.sync = true;
3439
3440 // whenever we return null, then we set a flag to say
3441 // that we're awaiting a 'readable' event emission.
3442 this.needReadable = false;
3443 this.emittedReadable = false;
3444 this.readableListening = false;
3445 this.resumeScheduled = false;
3446
3447 // Crypto is kind of old and crusty. Historically, its default string
3448 // encoding is 'binary' so we have to make this configurable.
3449 // Everything else in the universe uses 'utf8', though.
3450 this.defaultEncoding = options.defaultEncoding || 'utf8';
3451
3452 // when piping, we only care about 'readable' events that happen
3453 // after read()ing all the bytes and not getting any pushback.
3454 this.ranOut = false;
3455
3456 // the number of writers that are awaiting a drain event in .pipe()s
3457 this.awaitDrain = 0;
3458
3459 // if true, a maybeReadMore has been scheduled
3460 this.readingMore = false;
3461
3462 this.decoder = null;
3463 this.encoding = null;
3464 if (options.encoding) {
3465 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
3466 this.decoder = new StringDecoder(options.encoding);
3467 this.encoding = options.encoding;
3468 }
3469}
3470
3471function Readable(options) {
3472 Duplex = Duplex || require('./_stream_duplex');
3473
3474 if (!(this instanceof Readable)) return new Readable(options);
3475
3476 this._readableState = new ReadableState(options, this);
3477
3478 // legacy
3479 this.readable = true;
3480
3481 if (options && typeof options.read === 'function') this._read = options.read;
3482
3483 Stream.call(this);
3484}
3485
3486// Manually shove something into the read() buffer.
3487// This returns true if the highWaterMark has not been hit yet,
3488// similar to how Writable.write() returns true if you should
3489// write() some more.
3490Readable.prototype.push = function (chunk, encoding) {
3491 var state = this._readableState;
3492
3493 if (!state.objectMode && typeof chunk === 'string') {
3494 encoding = encoding || state.defaultEncoding;
3495 if (encoding !== state.encoding) {
3496 chunk = bufferShim.from(chunk, encoding);
3497 encoding = '';
3498 }
3499 }
3500
3501 return readableAddChunk(this, state, chunk, encoding, false);
3502};
3503
3504// Unshift should *always* be something directly out of read()
3505Readable.prototype.unshift = function (chunk) {
3506 var state = this._readableState;
3507 return readableAddChunk(this, state, chunk, '', true);
3508};
3509
3510Readable.prototype.isPaused = function () {
3511 return this._readableState.flowing === false;
3512};
3513
3514function readableAddChunk(stream, state, chunk, encoding, addToFront) {
3515 var er = chunkInvalid(state, chunk);
3516 if (er) {
3517 stream.emit('error', er);
3518 } else if (chunk === null) {
3519 state.reading = false;
3520 onEofChunk(stream, state);
3521 } else if (state.objectMode || chunk && chunk.length > 0) {
3522 if (state.ended && !addToFront) {
3523 var e = new Error('stream.push() after EOF');
3524 stream.emit('error', e);
3525 } else if (state.endEmitted && addToFront) {
3526 var _e = new Error('stream.unshift() after end event');
3527 stream.emit('error', _e);
3528 } else {
3529 var skipAdd;
3530 if (state.decoder && !addToFront && !encoding) {
3531 chunk = state.decoder.write(chunk);
3532 skipAdd = !state.objectMode && chunk.length === 0;
3533 }
3534
3535 if (!addToFront) state.reading = false;
3536
3537 // Don't add to the buffer if we've decoded to an empty string chunk and
3538 // we're not in object mode
3539 if (!skipAdd) {
3540 // if we want the data now, just emit it.
3541 if (state.flowing && state.length === 0 && !state.sync) {
3542 stream.emit('data', chunk);
3543 stream.read(0);
3544 } else {
3545 // update the buffer info.
3546 state.length += state.objectMode ? 1 : chunk.length;
3547 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
3548
3549 if (state.needReadable) emitReadable(stream);
3550 }
3551 }
3552
3553 maybeReadMore(stream, state);
3554 }
3555 } else if (!addToFront) {
3556 state.reading = false;
3557 }
3558
3559 return needMoreData(state);
3560}
3561
3562// if it's past the high water mark, we can push in some more.
3563// Also, if we have no data yet, we can stand some
3564// more bytes. This is to work around cases where hwm=0,
3565// such as the repl. Also, if the push() triggered a
3566// readable event, and the user called read(largeNumber) such that
3567// needReadable was set, then we ought to push more, so that another
3568// 'readable' event will be triggered.
3569function needMoreData(state) {
3570 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
3571}
3572
3573// backwards compatibility.
3574Readable.prototype.setEncoding = function (enc) {
3575 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
3576 this._readableState.decoder = new StringDecoder(enc);
3577 this._readableState.encoding = enc;
3578 return this;
3579};
3580
3581// Don't raise the hwm > 8MB
3582var MAX_HWM = 0x800000;
3583function computeNewHighWaterMark(n) {
3584 if (n >= MAX_HWM) {
3585 n = MAX_HWM;
3586 } else {
3587 // Get the next highest power of 2 to prevent increasing hwm excessively in
3588 // tiny amounts
3589 n--;
3590 n |= n >>> 1;
3591 n |= n >>> 2;
3592 n |= n >>> 4;
3593 n |= n >>> 8;
3594 n |= n >>> 16;
3595 n++;
3596 }
3597 return n;
3598}
3599
3600// This function is designed to be inlinable, so please take care when making
3601// changes to the function body.
3602function howMuchToRead(n, state) {
3603 if (n <= 0 || state.length === 0 && state.ended) return 0;
3604 if (state.objectMode) return 1;
3605 if (n !== n) {
3606 // Only flow one buffer at a time
3607 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
3608 }
3609 // If we're asking for more than the current hwm, then raise the hwm.
3610 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
3611 if (n <= state.length) return n;
3612 // Don't have enough
3613 if (!state.ended) {
3614 state.needReadable = true;
3615 return 0;
3616 }
3617 return state.length;
3618}
3619
3620// you can override either this method, or the async _read(n) below.
3621Readable.prototype.read = function (n) {
3622 debug('read', n);
3623 n = parseInt(n, 10);
3624 var state = this._readableState;
3625 var nOrig = n;
3626
3627 if (n !== 0) state.emittedReadable = false;
3628
3629 // if we're doing read(0) to trigger a readable event, but we
3630 // already have a bunch of data in the buffer, then just trigger
3631 // the 'readable' event and move on.
3632 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
3633 debug('read: emitReadable', state.length, state.ended);
3634 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
3635 return null;
3636 }
3637
3638 n = howMuchToRead(n, state);
3639
3640 // if we've ended, and we're now clear, then finish it up.
3641 if (n === 0 && state.ended) {
3642 if (state.length === 0) endReadable(this);
3643 return null;
3644 }
3645
3646 // All the actual chunk generation logic needs to be
3647 // *below* the call to _read. The reason is that in certain
3648 // synthetic stream cases, such as passthrough streams, _read
3649 // may be a completely synchronous operation which may change
3650 // the state of the read buffer, providing enough data when
3651 // before there was *not* enough.
3652 //
3653 // So, the steps are:
3654 // 1. Figure out what the state of things will be after we do
3655 // a read from the buffer.
3656 //
3657 // 2. If that resulting state will trigger a _read, then call _read.
3658 // Note that this may be asynchronous, or synchronous. Yes, it is
3659 // deeply ugly to write APIs this way, but that still doesn't mean
3660 // that the Readable class should behave improperly, as streams are
3661 // designed to be sync/async agnostic.
3662 // Take note if the _read call is sync or async (ie, if the read call
3663 // has returned yet), so that we know whether or not it's safe to emit
3664 // 'readable' etc.
3665 //
3666 // 3. Actually pull the requested chunks out of the buffer and return.
3667
3668 // if we need a readable event, then we need to do some reading.
3669 var doRead = state.needReadable;
3670 debug('need readable', doRead);
3671
3672 // if we currently have less than the highWaterMark, then also read some
3673 if (state.length === 0 || state.length - n < state.highWaterMark) {
3674 doRead = true;
3675 debug('length less than watermark', doRead);
3676 }
3677
3678 // however, if we've ended, then there's no point, and if we're already
3679 // reading, then it's unnecessary.
3680 if (state.ended || state.reading) {
3681 doRead = false;
3682 debug('reading or ended', doRead);
3683 } else if (doRead) {
3684 debug('do read');
3685 state.reading = true;
3686 state.sync = true;
3687 // if the length is currently zero, then we *need* a readable event.
3688 if (state.length === 0) state.needReadable = true;
3689 // call internal read method
3690 this._read(state.highWaterMark);
3691 state.sync = false;
3692 // If _read pushed data synchronously, then `reading` will be false,
3693 // and we need to re-evaluate how much data we can return to the user.
3694 if (!state.reading) n = howMuchToRead(nOrig, state);
3695 }
3696
3697 var ret;
3698 if (n > 0) ret = fromList(n, state);else ret = null;
3699
3700 if (ret === null) {
3701 state.needReadable = true;
3702 n = 0;
3703 } else {
3704 state.length -= n;
3705 }
3706
3707 if (state.length === 0) {
3708 // If we have nothing in the buffer, then we want to know
3709 // as soon as we *do* get something into the buffer.
3710 if (!state.ended) state.needReadable = true;
3711
3712 // If we tried to read() past the EOF, then emit end on the next tick.
3713 if (nOrig !== n && state.ended) endReadable(this);
3714 }
3715
3716 if (ret !== null) this.emit('data', ret);
3717
3718 return ret;
3719};
3720
3721function chunkInvalid(state, chunk) {
3722 var er = null;
3723 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
3724 er = new TypeError('Invalid non-string/buffer chunk');
3725 }
3726 return er;
3727}
3728
3729function onEofChunk(stream, state) {
3730 if (state.ended) return;
3731 if (state.decoder) {
3732 var chunk = state.decoder.end();
3733 if (chunk && chunk.length) {
3734 state.buffer.push(chunk);
3735 state.length += state.objectMode ? 1 : chunk.length;
3736 }
3737 }
3738 state.ended = true;
3739
3740 // emit 'readable' now to make sure it gets picked up.
3741 emitReadable(stream);
3742}
3743
3744// Don't emit readable right away in sync mode, because this can trigger
3745// another read() call => stack overflow. This way, it might trigger
3746// a nextTick recursion warning, but that's not so bad.
3747function emitReadable(stream) {
3748 var state = stream._readableState;
3749 state.needReadable = false;
3750 if (!state.emittedReadable) {
3751 debug('emitReadable', state.flowing);
3752 state.emittedReadable = true;
3753 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
3754 }
3755}
3756
3757function emitReadable_(stream) {
3758 debug('emit readable');
3759 stream.emit('readable');
3760 flow(stream);
3761}
3762
3763// at this point, the user has presumably seen the 'readable' event,
3764// and called read() to consume some data. that may have triggered
3765// in turn another _read(n) call, in which case reading = true if
3766// it's in progress.
3767// However, if we're not ended, or reading, and the length < hwm,
3768// then go ahead and try to read some more preemptively.
3769function maybeReadMore(stream, state) {
3770 if (!state.readingMore) {
3771 state.readingMore = true;
3772 processNextTick(maybeReadMore_, stream, state);
3773 }
3774}
3775
3776function maybeReadMore_(stream, state) {
3777 var len = state.length;
3778 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
3779 debug('maybeReadMore read 0');
3780 stream.read(0);
3781 if (len === state.length)
3782 // didn't get any data, stop spinning.
3783 break;else len = state.length;
3784 }
3785 state.readingMore = false;
3786}
3787
3788// abstract method. to be overridden in specific implementation classes.
3789// call cb(er, data) where data is <= n in length.
3790// for virtual (non-string, non-buffer) streams, "length" is somewhat
3791// arbitrary, and perhaps not very meaningful.
3792Readable.prototype._read = function (n) {
3793 this.emit('error', new Error('_read() is not implemented'));
3794};
3795
3796Readable.prototype.pipe = function (dest, pipeOpts) {
3797 var src = this;
3798 var state = this._readableState;
3799
3800 switch (state.pipesCount) {
3801 case 0:
3802 state.pipes = dest;
3803 break;
3804 case 1:
3805 state.pipes = [state.pipes, dest];
3806 break;
3807 default:
3808 state.pipes.push(dest);
3809 break;
3810 }
3811 state.pipesCount += 1;
3812 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
3813
3814 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
3815
3816 var endFn = doEnd ? onend : cleanup;
3817 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
3818
3819 dest.on('unpipe', onunpipe);
3820 function onunpipe(readable) {
3821 debug('onunpipe');
3822 if (readable === src) {
3823 cleanup();
3824 }
3825 }
3826
3827 function onend() {
3828 debug('onend');
3829 dest.end();
3830 }
3831
3832 // when the dest drains, it reduces the awaitDrain counter
3833 // on the source. This would be more elegant with a .once()
3834 // handler in flow(), but adding and removing repeatedly is
3835 // too slow.
3836 var ondrain = pipeOnDrain(src);
3837 dest.on('drain', ondrain);
3838
3839 var cleanedUp = false;
3840 function cleanup() {
3841 debug('cleanup');
3842 // cleanup event handlers once the pipe is broken
3843 dest.removeListener('close', onclose);
3844 dest.removeListener('finish', onfinish);
3845 dest.removeListener('drain', ondrain);
3846 dest.removeListener('error', onerror);
3847 dest.removeListener('unpipe', onunpipe);
3848 src.removeListener('end', onend);
3849 src.removeListener('end', cleanup);
3850 src.removeListener('data', ondata);
3851
3852 cleanedUp = true;
3853
3854 // if the reader is waiting for a drain event from this
3855 // specific writer, then it would cause it to never start
3856 // flowing again.
3857 // So, if this is awaiting a drain, then we just call it now.
3858 // If we don't know, then assume that we are waiting for one.
3859 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
3860 }
3861
3862 // If the user pushes more data while we're writing to dest then we'll end up
3863 // in ondata again. However, we only want to increase awaitDrain once because
3864 // dest will only emit one 'drain' event for the multiple writes.
3865 // => Introduce a guard on increasing awaitDrain.
3866 var increasedAwaitDrain = false;
3867 src.on('data', ondata);
3868 function ondata(chunk) {
3869 debug('ondata');
3870 increasedAwaitDrain = false;
3871 var ret = dest.write(chunk);
3872 if (false === ret && !increasedAwaitDrain) {
3873 // If the user unpiped during `dest.write()`, it is possible
3874 // to get stuck in a permanently paused state if that write
3875 // also returned false.
3876 // => Check whether `dest` is still a piping destination.
3877 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
3878 debug('false write response, pause', src._readableState.awaitDrain);
3879 src._readableState.awaitDrain++;
3880 increasedAwaitDrain = true;
3881 }
3882 src.pause();
3883 }
3884 }
3885
3886 // if the dest has an error, then stop piping into it.
3887 // however, don't suppress the throwing behavior for this.
3888 function onerror(er) {
3889 debug('onerror', er);
3890 unpipe();
3891 dest.removeListener('error', onerror);
3892 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
3893 }
3894
3895 // Make sure our error handler is attached before userland ones.
3896 prependListener(dest, 'error', onerror);
3897
3898 // Both close and finish should trigger unpipe, but only once.
3899 function onclose() {
3900 dest.removeListener('finish', onfinish);
3901 unpipe();
3902 }
3903 dest.once('close', onclose);
3904 function onfinish() {
3905 debug('onfinish');
3906 dest.removeListener('close', onclose);
3907 unpipe();
3908 }
3909 dest.once('finish', onfinish);
3910
3911 function unpipe() {
3912 debug('unpipe');
3913 src.unpipe(dest);
3914 }
3915
3916 // tell the dest that it's being piped to
3917 dest.emit('pipe', src);
3918
3919 // start the flow if it hasn't been started already.
3920 if (!state.flowing) {
3921 debug('pipe resume');
3922 src.resume();
3923 }
3924
3925 return dest;
3926};
3927
3928function pipeOnDrain(src) {
3929 return function () {
3930 var state = src._readableState;
3931 debug('pipeOnDrain', state.awaitDrain);
3932 if (state.awaitDrain) state.awaitDrain--;
3933 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
3934 state.flowing = true;
3935 flow(src);
3936 }
3937 };
3938}
3939
3940Readable.prototype.unpipe = function (dest) {
3941 var state = this._readableState;
3942
3943 // if we're not piping anywhere, then do nothing.
3944 if (state.pipesCount === 0) return this;
3945
3946 // just one destination. most common case.
3947 if (state.pipesCount === 1) {
3948 // passed in one, but it's not the right one.
3949 if (dest && dest !== state.pipes) return this;
3950
3951 if (!dest) dest = state.pipes;
3952
3953 // got a match.
3954 state.pipes = null;
3955 state.pipesCount = 0;
3956 state.flowing = false;
3957 if (dest) dest.emit('unpipe', this);
3958 return this;
3959 }
3960
3961 // slow case. multiple pipe destinations.
3962
3963 if (!dest) {
3964 // remove all.
3965 var dests = state.pipes;
3966 var len = state.pipesCount;
3967 state.pipes = null;
3968 state.pipesCount = 0;
3969 state.flowing = false;
3970
3971 for (var i = 0; i < len; i++) {
3972 dests[i].emit('unpipe', this);
3973 }return this;
3974 }
3975
3976 // try to find the right one.
3977 var index = indexOf(state.pipes, dest);
3978 if (index === -1) return this;
3979
3980 state.pipes.splice(index, 1);
3981 state.pipesCount -= 1;
3982 if (state.pipesCount === 1) state.pipes = state.pipes[0];
3983
3984 dest.emit('unpipe', this);
3985
3986 return this;
3987};
3988
3989// set up data events if they are asked for
3990// Ensure readable listeners eventually get something
3991Readable.prototype.on = function (ev, fn) {
3992 var res = Stream.prototype.on.call(this, ev, fn);
3993
3994 if (ev === 'data') {
3995 // Start flowing on next tick if stream isn't explicitly paused
3996 if (this._readableState.flowing !== false) this.resume();
3997 } else if (ev === 'readable') {
3998 var state = this._readableState;
3999 if (!state.endEmitted && !state.readableListening) {
4000 state.readableListening = state.needReadable = true;
4001 state.emittedReadable = false;
4002 if (!state.reading) {
4003 processNextTick(nReadingNextTick, this);
4004 } else if (state.length) {
4005 emitReadable(this, state);
4006 }
4007 }
4008 }
4009
4010 return res;
4011};
4012Readable.prototype.addListener = Readable.prototype.on;
4013
4014function nReadingNextTick(self) {
4015 debug('readable nexttick read 0');
4016 self.read(0);
4017}
4018
4019// pause() and resume() are remnants of the legacy readable stream API
4020// If the user uses them, then switch into old mode.
4021Readable.prototype.resume = function () {
4022 var state = this._readableState;
4023 if (!state.flowing) {
4024 debug('resume');
4025 state.flowing = true;
4026 resume(this, state);
4027 }
4028 return this;
4029};
4030
4031function resume(stream, state) {
4032 if (!state.resumeScheduled) {
4033 state.resumeScheduled = true;
4034 processNextTick(resume_, stream, state);
4035 }
4036}
4037
4038function resume_(stream, state) {
4039 if (!state.reading) {
4040 debug('resume read 0');
4041 stream.read(0);
4042 }
4043
4044 state.resumeScheduled = false;
4045 state.awaitDrain = 0;
4046 stream.emit('resume');
4047 flow(stream);
4048 if (state.flowing && !state.reading) stream.read(0);
4049}
4050
4051Readable.prototype.pause = function () {
4052 debug('call pause flowing=%j', this._readableState.flowing);
4053 if (false !== this._readableState.flowing) {
4054 debug('pause');
4055 this._readableState.flowing = false;
4056 this.emit('pause');
4057 }
4058 return this;
4059};
4060
4061function flow(stream) {
4062 var state = stream._readableState;
4063 debug('flow', state.flowing);
4064 while (state.flowing && stream.read() !== null) {}
4065}
4066
4067// wrap an old-style stream as the async data source.
4068// This is *not* part of the readable stream interface.
4069// It is an ugly unfortunate mess of history.
4070Readable.prototype.wrap = function (stream) {
4071 var state = this._readableState;
4072 var paused = false;
4073
4074 var self = this;
4075 stream.on('end', function () {
4076 debug('wrapped end');
4077 if (state.decoder && !state.ended) {
4078 var chunk = state.decoder.end();
4079 if (chunk && chunk.length) self.push(chunk);
4080 }
4081
4082 self.push(null);
4083 });
4084
4085 stream.on('data', function (chunk) {
4086 debug('wrapped data');
4087 if (state.decoder) chunk = state.decoder.write(chunk);
4088
4089 // don't skip over falsy values in objectMode
4090 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
4091
4092 var ret = self.push(chunk);
4093 if (!ret) {
4094 paused = true;
4095 stream.pause();
4096 }
4097 });
4098
4099 // proxy all the other methods.
4100 // important when wrapping filters and duplexes.
4101 for (var i in stream) {
4102 if (this[i] === undefined && typeof stream[i] === 'function') {
4103 this[i] = function (method) {
4104 return function () {
4105 return stream[method].apply(stream, arguments);
4106 };
4107 }(i);
4108 }
4109 }
4110
4111 // proxy certain important events.
4112 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
4113 forEach(events, function (ev) {
4114 stream.on(ev, self.emit.bind(self, ev));
4115 });
4116
4117 // when we try to consume some more bytes, simply unpause the
4118 // underlying stream.
4119 self._read = function (n) {
4120 debug('wrapped _read', n);
4121 if (paused) {
4122 paused = false;
4123 stream.resume();
4124 }
4125 };
4126
4127 return self;
4128};
4129
4130// exposed for testing purposes only.
4131Readable._fromList = fromList;
4132
4133// Pluck off n bytes from an array of buffers.
4134// Length is the combined lengths of all the buffers in the list.
4135// This function is designed to be inlinable, so please take care when making
4136// changes to the function body.
4137function fromList(n, state) {
4138 // nothing buffered
4139 if (state.length === 0) return null;
4140
4141 var ret;
4142 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
4143 // read it all, truncate the list
4144 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
4145 state.buffer.clear();
4146 } else {
4147 // read part of list
4148 ret = fromListPartial(n, state.buffer, state.decoder);
4149 }
4150
4151 return ret;
4152}
4153
4154// Extracts only enough buffered data to satisfy the amount requested.
4155// This function is designed to be inlinable, so please take care when making
4156// changes to the function body.
4157function fromListPartial(n, list, hasStrings) {
4158 var ret;
4159 if (n < list.head.data.length) {
4160 // slice is the same for buffers and strings
4161 ret = list.head.data.slice(0, n);
4162 list.head.data = list.head.data.slice(n);
4163 } else if (n === list.head.data.length) {
4164 // first chunk is a perfect match
4165 ret = list.shift();
4166 } else {
4167 // result spans more than one buffer
4168 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
4169 }
4170 return ret;
4171}
4172
4173// Copies a specified amount of characters from the list of buffered data
4174// chunks.
4175// This function is designed to be inlinable, so please take care when making
4176// changes to the function body.
4177function copyFromBufferString(n, list) {
4178 var p = list.head;
4179 var c = 1;
4180 var ret = p.data;
4181 n -= ret.length;
4182 while (p = p.next) {
4183 var str = p.data;
4184 var nb = n > str.length ? str.length : n;
4185 if (nb === str.length) ret += str;else ret += str.slice(0, n);
4186 n -= nb;
4187 if (n === 0) {
4188 if (nb === str.length) {
4189 ++c;
4190 if (p.next) list.head = p.next;else list.head = list.tail = null;
4191 } else {
4192 list.head = p;
4193 p.data = str.slice(nb);
4194 }
4195 break;
4196 }
4197 ++c;
4198 }
4199 list.length -= c;
4200 return ret;
4201}
4202
4203// Copies a specified amount of bytes from the list of buffered data chunks.
4204// This function is designed to be inlinable, so please take care when making
4205// changes to the function body.
4206function copyFromBuffer(n, list) {
4207 var ret = bufferShim.allocUnsafe(n);
4208 var p = list.head;
4209 var c = 1;
4210 p.data.copy(ret);
4211 n -= p.data.length;
4212 while (p = p.next) {
4213 var buf = p.data;
4214 var nb = n > buf.length ? buf.length : n;
4215 buf.copy(ret, ret.length - n, 0, nb);
4216 n -= nb;
4217 if (n === 0) {
4218 if (nb === buf.length) {
4219 ++c;
4220 if (p.next) list.head = p.next;else list.head = list.tail = null;
4221 } else {
4222 list.head = p;
4223 p.data = buf.slice(nb);
4224 }
4225 break;
4226 }
4227 ++c;
4228 }
4229 list.length -= c;
4230 return ret;
4231}
4232
4233function endReadable(stream) {
4234 var state = stream._readableState;
4235
4236 // If we get here before consuming all the bytes, then that is a
4237 // bug in node. Should never happen.
4238 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
4239
4240 if (!state.endEmitted) {
4241 state.ended = true;
4242 processNextTick(endReadableNT, state, stream);
4243 }
4244}
4245
4246function endReadableNT(state, stream) {
4247 // Check that we didn't get one last unshift.
4248 if (!state.endEmitted && state.length === 0) {
4249 state.endEmitted = true;
4250 stream.readable = false;
4251 stream.emit('end');
4252 }
4253}
4254
4255function forEach(xs, f) {
4256 for (var i = 0, l = xs.length; i < l; i++) {
4257 f(xs[i], i);
4258 }
4259}
4260
4261function indexOf(xs, x) {
4262 for (var i = 0, l = xs.length; i < l; i++) {
4263 if (xs[i] === x) return i;
4264 }
4265 return -1;
4266}
4267}).call(this,require('_process'))
4268},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
4269// a transform stream is a readable/writable stream where you do
4270// something with the data. Sometimes it's called a "filter",
4271// but that's not a great name for it, since that implies a thing where
4272// some bits pass through, and others are simply ignored. (That would
4273// be a valid example of a transform, of course.)
4274//
4275// While the output is causally related to the input, it's not a
4276// necessarily symmetric or synchronous transformation. For example,
4277// a zlib stream might take multiple plain-text writes(), and then
4278// emit a single compressed chunk some time in the future.
4279//
4280// Here's how this works:
4281//
4282// The Transform stream has all the aspects of the readable and writable
4283// stream classes. When you write(chunk), that calls _write(chunk,cb)
4284// internally, and returns false if there's a lot of pending writes
4285// buffered up. When you call read(), that calls _read(n) until
4286// there's enough pending readable data buffered up.
4287//
4288// In a transform stream, the written data is placed in a buffer. When
4289// _read(n) is called, it transforms the queued up data, calling the
4290// buffered _write cb's as it consumes chunks. If consuming a single
4291// written chunk would result in multiple output chunks, then the first
4292// outputted bit calls the readcb, and subsequent chunks just go into
4293// the read buffer, and will cause it to emit 'readable' if necessary.
4294//
4295// This way, back-pressure is actually determined by the reading side,
4296// since _read has to be called to start processing a new chunk. However,
4297// a pathological inflate type of transform can cause excessive buffering
4298// here. For example, imagine a stream where every byte of input is
4299// interpreted as an integer from 0-255, and then results in that many
4300// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
4301// 1kb of data being output. In this case, you could write a very small
4302// amount of input, and end up with a very large amount of output. In
4303// such a pathological inflating mechanism, there'd be no way to tell
4304// the system to stop doing the transform. A single 4MB write could
4305// cause the system to run out of memory.
4306//
4307// However, even in such a pathological case, only a single written chunk
4308// would be consumed, and then the rest would wait (un-transformed) until
4309// the results of the previous transformed chunk were consumed.
4310
4311'use strict';
4312
4313module.exports = Transform;
4314
4315var Duplex = require('./_stream_duplex');
4316
4317/*<replacement>*/
4318var util = require('core-util-is');
4319util.inherits = require('inherits');
4320/*</replacement>*/
4321
4322util.inherits(Transform, Duplex);
4323
4324function TransformState(stream) {
4325 this.afterTransform = function (er, data) {
4326 return afterTransform(stream, er, data);
4327 };
4328
4329 this.needTransform = false;
4330 this.transforming = false;
4331 this.writecb = null;
4332 this.writechunk = null;
4333 this.writeencoding = null;
4334}
4335
4336function afterTransform(stream, er, data) {
4337 var ts = stream._transformState;
4338 ts.transforming = false;
4339
4340 var cb = ts.writecb;
4341
4342 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
4343
4344 ts.writechunk = null;
4345 ts.writecb = null;
4346
4347 if (data !== null && data !== undefined) stream.push(data);
4348
4349 cb(er);
4350
4351 var rs = stream._readableState;
4352 rs.reading = false;
4353 if (rs.needReadable || rs.length < rs.highWaterMark) {
4354 stream._read(rs.highWaterMark);
4355 }
4356}
4357
4358function Transform(options) {
4359 if (!(this instanceof Transform)) return new Transform(options);
4360
4361 Duplex.call(this, options);
4362
4363 this._transformState = new TransformState(this);
4364
4365 var stream = this;
4366
4367 // start out asking for a readable event once data is transformed.
4368 this._readableState.needReadable = true;
4369
4370 // we have implemented the _read method, and done the other things
4371 // that Readable wants before the first _read call, so unset the
4372 // sync guard flag.
4373 this._readableState.sync = false;
4374
4375 if (options) {
4376 if (typeof options.transform === 'function') this._transform = options.transform;
4377
4378 if (typeof options.flush === 'function') this._flush = options.flush;
4379 }
4380
4381 // When the writable side finishes, then flush out anything remaining.
4382 this.once('prefinish', function () {
4383 if (typeof this._flush === 'function') this._flush(function (er, data) {
4384 done(stream, er, data);
4385 });else done(stream);
4386 });
4387}
4388
4389Transform.prototype.push = function (chunk, encoding) {
4390 this._transformState.needTransform = false;
4391 return Duplex.prototype.push.call(this, chunk, encoding);
4392};
4393
4394// This is the part where you do stuff!
4395// override this function in implementation classes.
4396// 'chunk' is an input chunk.
4397//
4398// Call `push(newChunk)` to pass along transformed output
4399// to the readable side. You may call 'push' zero or more times.
4400//
4401// Call `cb(err)` when you are done with this chunk. If you pass
4402// an error, then that'll put the hurt on the whole operation. If you
4403// never call cb(), then you'll never get another chunk.
4404Transform.prototype._transform = function (chunk, encoding, cb) {
4405 throw new Error('_transform() is not implemented');
4406};
4407
4408Transform.prototype._write = function (chunk, encoding, cb) {
4409 var ts = this._transformState;
4410 ts.writecb = cb;
4411 ts.writechunk = chunk;
4412 ts.writeencoding = encoding;
4413 if (!ts.transforming) {
4414 var rs = this._readableState;
4415 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
4416 }
4417};
4418
4419// Doesn't matter what the args are here.
4420// _transform does all the work.
4421// That we got here means that the readable side wants more data.
4422Transform.prototype._read = function (n) {
4423 var ts = this._transformState;
4424
4425 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
4426 ts.transforming = true;
4427 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
4428 } else {
4429 // mark that we need a transform, so that any data that comes in
4430 // will get processed, now that we've asked for it.
4431 ts.needTransform = true;
4432 }
4433};
4434
4435function done(stream, er, data) {
4436 if (er) return stream.emit('error', er);
4437
4438 if (data !== null && data !== undefined) stream.push(data);
4439
4440 // if there's nothing in the write buffer, then that means
4441 // that nothing more will ever be provided
4442 var ws = stream._writableState;
4443 var ts = stream._transformState;
4444
4445 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
4446
4447 if (ts.transforming) throw new Error('Calling transform done when still transforming');
4448
4449 return stream.push(null);
4450}
4451},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
4452(function (process){
4453// A bit simpler than readable streams.
4454// Implement an async ._write(chunk, encoding, cb), and it'll handle all
4455// the drain event emission and buffering.
4456
4457'use strict';
4458
4459module.exports = Writable;
4460
4461/*<replacement>*/
4462var processNextTick = require('process-nextick-args');
4463/*</replacement>*/
4464
4465/*<replacement>*/
4466var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
4467/*</replacement>*/
4468
4469/*<replacement>*/
4470var Duplex;
4471/*</replacement>*/
4472
4473Writable.WritableState = WritableState;
4474
4475/*<replacement>*/
4476var util = require('core-util-is');
4477util.inherits = require('inherits');
4478/*</replacement>*/
4479
4480/*<replacement>*/
4481var internalUtil = {
4482 deprecate: require('util-deprecate')
4483};
4484/*</replacement>*/
4485
4486/*<replacement>*/
4487var Stream;
4488(function () {
4489 try {
4490 Stream = require('st' + 'ream');
4491 } catch (_) {} finally {
4492 if (!Stream) Stream = require('events').EventEmitter;
4493 }
4494})();
4495/*</replacement>*/
4496
4497var Buffer = require('buffer').Buffer;
4498/*<replacement>*/
4499var bufferShim = require('buffer-shims');
4500/*</replacement>*/
4501
4502util.inherits(Writable, Stream);
4503
4504function nop() {}
4505
4506function WriteReq(chunk, encoding, cb) {
4507 this.chunk = chunk;
4508 this.encoding = encoding;
4509 this.callback = cb;
4510 this.next = null;
4511}
4512
4513function WritableState(options, stream) {
4514 Duplex = Duplex || require('./_stream_duplex');
4515
4516 options = options || {};
4517
4518 // object stream flag to indicate whether or not this stream
4519 // contains buffers or objects.
4520 this.objectMode = !!options.objectMode;
4521
4522 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
4523
4524 // the point at which write() starts returning false
4525 // Note: 0 is a valid value, means that we always return false if
4526 // the entire buffer is not flushed immediately on write()
4527 var hwm = options.highWaterMark;
4528 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
4529 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
4530
4531 // cast to ints.
4532 this.highWaterMark = ~ ~this.highWaterMark;
4533
4534 // drain event flag.
4535 this.needDrain = false;
4536 // at the start of calling end()
4537 this.ending = false;
4538 // when end() has been called, and returned
4539 this.ended = false;
4540 // when 'finish' is emitted
4541 this.finished = false;
4542
4543 // should we decode strings into buffers before passing to _write?
4544 // this is here so that some node-core streams can optimize string
4545 // handling at a lower level.
4546 var noDecode = options.decodeStrings === false;
4547 this.decodeStrings = !noDecode;
4548
4549 // Crypto is kind of old and crusty. Historically, its default string
4550 // encoding is 'binary' so we have to make this configurable.
4551 // Everything else in the universe uses 'utf8', though.
4552 this.defaultEncoding = options.defaultEncoding || 'utf8';
4553
4554 // not an actual buffer we keep track of, but a measurement
4555 // of how much we're waiting to get pushed to some underlying
4556 // socket or file.
4557 this.length = 0;
4558
4559 // a flag to see when we're in the middle of a write.
4560 this.writing = false;
4561
4562 // when true all writes will be buffered until .uncork() call
4563 this.corked = 0;
4564
4565 // a flag to be able to tell if the onwrite cb is called immediately,
4566 // or on a later tick. We set this to true at first, because any
4567 // actions that shouldn't happen until "later" should generally also
4568 // not happen before the first write call.
4569 this.sync = true;
4570
4571 // a flag to know if we're processing previously buffered items, which
4572 // may call the _write() callback in the same tick, so that we don't
4573 // end up in an overlapped onwrite situation.
4574 this.bufferProcessing = false;
4575
4576 // the callback that's passed to _write(chunk,cb)
4577 this.onwrite = function (er) {
4578 onwrite(stream, er);
4579 };
4580
4581 // the callback that the user supplies to write(chunk,encoding,cb)
4582 this.writecb = null;
4583
4584 // the amount that is being written when _write is called.
4585 this.writelen = 0;
4586
4587 this.bufferedRequest = null;
4588 this.lastBufferedRequest = null;
4589
4590 // number of pending user-supplied write callbacks
4591 // this must be 0 before 'finish' can be emitted
4592 this.pendingcb = 0;
4593
4594 // emit prefinish if the only thing we're waiting for is _write cbs
4595 // This is relevant for synchronous Transform streams
4596 this.prefinished = false;
4597
4598 // True if the error was already emitted and should not be thrown again
4599 this.errorEmitted = false;
4600
4601 // count buffered requests
4602 this.bufferedRequestCount = 0;
4603
4604 // allocate the first CorkedRequest, there is always
4605 // one allocated and free to use, and we maintain at most two
4606 this.corkedRequestsFree = new CorkedRequest(this);
4607}
4608
4609WritableState.prototype.getBuffer = function getBuffer() {
4610 var current = this.bufferedRequest;
4611 var out = [];
4612 while (current) {
4613 out.push(current);
4614 current = current.next;
4615 }
4616 return out;
4617};
4618
4619(function () {
4620 try {
4621 Object.defineProperty(WritableState.prototype, 'buffer', {
4622 get: internalUtil.deprecate(function () {
4623 return this.getBuffer();
4624 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
4625 });
4626 } catch (_) {}
4627})();
4628
4629// Test _writableState for inheritance to account for Duplex streams,
4630// whose prototype chain only points to Readable.
4631var realHasInstance;
4632if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
4633 realHasInstance = Function.prototype[Symbol.hasInstance];
4634 Object.defineProperty(Writable, Symbol.hasInstance, {
4635 value: function (object) {
4636 if (realHasInstance.call(this, object)) return true;
4637
4638 return object && object._writableState instanceof WritableState;
4639 }
4640 });
4641} else {
4642 realHasInstance = function (object) {
4643 return object instanceof this;
4644 };
4645}
4646
4647function Writable(options) {
4648 Duplex = Duplex || require('./_stream_duplex');
4649
4650 // Writable ctor is applied to Duplexes, too.
4651 // `realHasInstance` is necessary because using plain `instanceof`
4652 // would return false, as no `_writableState` property is attached.
4653
4654 // Trying to use the custom `instanceof` for Writable here will also break the
4655 // Node.js LazyTransform implementation, which has a non-trivial getter for
4656 // `_writableState` that would lead to infinite recursion.
4657 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
4658 return new Writable(options);
4659 }
4660
4661 this._writableState = new WritableState(options, this);
4662
4663 // legacy.
4664 this.writable = true;
4665
4666 if (options) {
4667 if (typeof options.write === 'function') this._write = options.write;
4668
4669 if (typeof options.writev === 'function') this._writev = options.writev;
4670 }
4671
4672 Stream.call(this);
4673}
4674
4675// Otherwise people can pipe Writable streams, which is just wrong.
4676Writable.prototype.pipe = function () {
4677 this.emit('error', new Error('Cannot pipe, not readable'));
4678};
4679
4680function writeAfterEnd(stream, cb) {
4681 var er = new Error('write after end');
4682 // TODO: defer error events consistently everywhere, not just the cb
4683 stream.emit('error', er);
4684 processNextTick(cb, er);
4685}
4686
4687// If we get something that is not a buffer, string, null, or undefined,
4688// and we're not in objectMode, then that's an error.
4689// Otherwise stream chunks are all considered to be of length=1, and the
4690// watermarks determine how many objects to keep in the buffer, rather than
4691// how many bytes or characters.
4692function validChunk(stream, state, chunk, cb) {
4693 var valid = true;
4694 var er = false;
4695 // Always throw error if a null is written
4696 // if we are not in object mode then throw
4697 // if it is not a buffer, string, or undefined.
4698 if (chunk === null) {
4699 er = new TypeError('May not write null values to stream');
4700 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
4701 er = new TypeError('Invalid non-string/buffer chunk');
4702 }
4703 if (er) {
4704 stream.emit('error', er);
4705 processNextTick(cb, er);
4706 valid = false;
4707 }
4708 return valid;
4709}
4710
4711Writable.prototype.write = function (chunk, encoding, cb) {
4712 var state = this._writableState;
4713 var ret = false;
4714
4715 if (typeof encoding === 'function') {
4716 cb = encoding;
4717 encoding = null;
4718 }
4719
4720 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
4721
4722 if (typeof cb !== 'function') cb = nop;
4723
4724 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
4725 state.pendingcb++;
4726 ret = writeOrBuffer(this, state, chunk, encoding, cb);
4727 }
4728
4729 return ret;
4730};
4731
4732Writable.prototype.cork = function () {
4733 var state = this._writableState;
4734
4735 state.corked++;
4736};
4737
4738Writable.prototype.uncork = function () {
4739 var state = this._writableState;
4740
4741 if (state.corked) {
4742 state.corked--;
4743
4744 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
4745 }
4746};
4747
4748Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
4749 // node::ParseEncoding() requires lower case.
4750 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
4751 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
4752 this._writableState.defaultEncoding = encoding;
4753 return this;
4754};
4755
4756function decodeChunk(state, chunk, encoding) {
4757 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
4758 chunk = bufferShim.from(chunk, encoding);
4759 }
4760 return chunk;
4761}
4762
4763// if we're already writing something, then just put this
4764// in the queue, and wait our turn. Otherwise, call _write
4765// If we return false, then we need a drain event, so set that flag.
4766function writeOrBuffer(stream, state, chunk, encoding, cb) {
4767 chunk = decodeChunk(state, chunk, encoding);
4768
4769 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
4770 var len = state.objectMode ? 1 : chunk.length;
4771
4772 state.length += len;
4773
4774 var ret = state.length < state.highWaterMark;
4775 // we must ensure that previous needDrain will not be reset to false.
4776 if (!ret) state.needDrain = true;
4777
4778 if (state.writing || state.corked) {
4779 var last = state.lastBufferedRequest;
4780 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
4781 if (last) {
4782 last.next = state.lastBufferedRequest;
4783 } else {
4784 state.bufferedRequest = state.lastBufferedRequest;
4785 }
4786 state.bufferedRequestCount += 1;
4787 } else {
4788 doWrite(stream, state, false, len, chunk, encoding, cb);
4789 }
4790
4791 return ret;
4792}
4793
4794function doWrite(stream, state, writev, len, chunk, encoding, cb) {
4795 state.writelen = len;
4796 state.writecb = cb;
4797 state.writing = true;
4798 state.sync = true;
4799 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
4800 state.sync = false;
4801}
4802
4803function onwriteError(stream, state, sync, er, cb) {
4804 --state.pendingcb;
4805 if (sync) processNextTick(cb, er);else cb(er);
4806
4807 stream._writableState.errorEmitted = true;
4808 stream.emit('error', er);
4809}
4810
4811function onwriteStateUpdate(state) {
4812 state.writing = false;
4813 state.writecb = null;
4814 state.length -= state.writelen;
4815 state.writelen = 0;
4816}
4817
4818function onwrite(stream, er) {
4819 var state = stream._writableState;
4820 var sync = state.sync;
4821 var cb = state.writecb;
4822
4823 onwriteStateUpdate(state);
4824
4825 if (er) onwriteError(stream, state, sync, er, cb);else {
4826 // Check if we're actually ready to finish, but don't emit yet
4827 var finished = needFinish(state);
4828
4829 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
4830 clearBuffer(stream, state);
4831 }
4832
4833 if (sync) {
4834 /*<replacement>*/
4835 asyncWrite(afterWrite, stream, state, finished, cb);
4836 /*</replacement>*/
4837 } else {
4838 afterWrite(stream, state, finished, cb);
4839 }
4840 }
4841}
4842
4843function afterWrite(stream, state, finished, cb) {
4844 if (!finished) onwriteDrain(stream, state);
4845 state.pendingcb--;
4846 cb();
4847 finishMaybe(stream, state);
4848}
4849
4850// Must force callback to be called on nextTick, so that we don't
4851// emit 'drain' before the write() consumer gets the 'false' return
4852// value, and has a chance to attach a 'drain' listener.
4853function onwriteDrain(stream, state) {
4854 if (state.length === 0 && state.needDrain) {
4855 state.needDrain = false;
4856 stream.emit('drain');
4857 }
4858}
4859
4860// if there's something in the buffer waiting, then process it
4861function clearBuffer(stream, state) {
4862 state.bufferProcessing = true;
4863 var entry = state.bufferedRequest;
4864
4865 if (stream._writev && entry && entry.next) {
4866 // Fast case, write everything using _writev()
4867 var l = state.bufferedRequestCount;
4868 var buffer = new Array(l);
4869 var holder = state.corkedRequestsFree;
4870 holder.entry = entry;
4871
4872 var count = 0;
4873 while (entry) {
4874 buffer[count] = entry;
4875 entry = entry.next;
4876 count += 1;
4877 }
4878
4879 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
4880
4881 // doWrite is almost always async, defer these to save a bit of time
4882 // as the hot path ends with doWrite
4883 state.pendingcb++;
4884 state.lastBufferedRequest = null;
4885 if (holder.next) {
4886 state.corkedRequestsFree = holder.next;
4887 holder.next = null;
4888 } else {
4889 state.corkedRequestsFree = new CorkedRequest(state);
4890 }
4891 } else {
4892 // Slow case, write chunks one-by-one
4893 while (entry) {
4894 var chunk = entry.chunk;
4895 var encoding = entry.encoding;
4896 var cb = entry.callback;
4897 var len = state.objectMode ? 1 : chunk.length;
4898
4899 doWrite(stream, state, false, len, chunk, encoding, cb);
4900 entry = entry.next;
4901 // if we didn't call the onwrite immediately, then
4902 // it means that we need to wait until it does.
4903 // also, that means that the chunk and cb are currently
4904 // being processed, so move the buffer counter past them.
4905 if (state.writing) {
4906 break;
4907 }
4908 }
4909
4910 if (entry === null) state.lastBufferedRequest = null;
4911 }
4912
4913 state.bufferedRequestCount = 0;
4914 state.bufferedRequest = entry;
4915 state.bufferProcessing = false;
4916}
4917
4918Writable.prototype._write = function (chunk, encoding, cb) {
4919 cb(new Error('_write() is not implemented'));
4920};
4921
4922Writable.prototype._writev = null;
4923
4924Writable.prototype.end = function (chunk, encoding, cb) {
4925 var state = this._writableState;
4926
4927 if (typeof chunk === 'function') {
4928 cb = chunk;
4929 chunk = null;
4930 encoding = null;
4931 } else if (typeof encoding === 'function') {
4932 cb = encoding;
4933 encoding = null;
4934 }
4935
4936 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
4937
4938 // .end() fully uncorks
4939 if (state.corked) {
4940 state.corked = 1;
4941 this.uncork();
4942 }
4943
4944 // ignore unnecessary end() calls.
4945 if (!state.ending && !state.finished) endWritable(this, state, cb);
4946};
4947
4948function needFinish(state) {
4949 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
4950}
4951
4952function prefinish(stream, state) {
4953 if (!state.prefinished) {
4954 state.prefinished = true;
4955 stream.emit('prefinish');
4956 }
4957}
4958
4959function finishMaybe(stream, state) {
4960 var need = needFinish(state);
4961 if (need) {
4962 if (state.pendingcb === 0) {
4963 prefinish(stream, state);
4964 state.finished = true;
4965 stream.emit('finish');
4966 } else {
4967 prefinish(stream, state);
4968 }
4969 }
4970 return need;
4971}
4972
4973function endWritable(stream, state, cb) {
4974 state.ending = true;
4975 finishMaybe(stream, state);
4976 if (cb) {
4977 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
4978 }
4979 state.ended = true;
4980 stream.writable = false;
4981}
4982
4983// It seems a linked list but it is not
4984// there will be only 2 of these for each stream
4985function CorkedRequest(state) {
4986 var _this = this;
4987
4988 this.next = null;
4989 this.entry = null;
4990
4991 this.finish = function (err) {
4992 var entry = _this.entry;
4993 _this.entry = null;
4994 while (entry) {
4995 var cb = entry.callback;
4996 state.pendingcb--;
4997 cb(err);
4998 entry = entry.next;
4999 }
5000 if (state.corkedRequestsFree) {
5001 state.corkedRequestsFree.next = _this;
5002 } else {
5003 state.corkedRequestsFree = _this;
5004 }
5005 };
5006}
5007}).call(this,require('_process'))
5008},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
5009'use strict';
5010
5011var Buffer = require('buffer').Buffer;
5012/*<replacement>*/
5013var bufferShim = require('buffer-shims');
5014/*</replacement>*/
5015
5016module.exports = BufferList;
5017
5018function BufferList() {
5019 this.head = null;
5020 this.tail = null;
5021 this.length = 0;
5022}
5023
5024BufferList.prototype.push = function (v) {
5025 var entry = { data: v, next: null };
5026 if (this.length > 0) this.tail.next = entry;else this.head = entry;
5027 this.tail = entry;
5028 ++this.length;
5029};
5030
5031BufferList.prototype.unshift = function (v) {
5032 var entry = { data: v, next: this.head };
5033 if (this.length === 0) this.tail = entry;
5034 this.head = entry;
5035 ++this.length;
5036};
5037
5038BufferList.prototype.shift = function () {
5039 if (this.length === 0) return;
5040 var ret = this.head.data;
5041 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
5042 --this.length;
5043 return ret;
5044};
5045
5046BufferList.prototype.clear = function () {
5047 this.head = this.tail = null;
5048 this.length = 0;
5049};
5050
5051BufferList.prototype.join = function (s) {
5052 if (this.length === 0) return '';
5053 var p = this.head;
5054 var ret = '' + p.data;
5055 while (p = p.next) {
5056 ret += s + p.data;
5057 }return ret;
5058};
5059
5060BufferList.prototype.concat = function (n) {
5061 if (this.length === 0) return bufferShim.alloc(0);
5062 if (this.length === 1) return this.head.data;
5063 var ret = bufferShim.allocUnsafe(n >>> 0);
5064 var p = this.head;
5065 var i = 0;
5066 while (p) {
5067 p.data.copy(ret, i);
5068 i += p.data.length;
5069 p = p.next;
5070 }
5071 return ret;
5072};
5073},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
5074module.exports = require("./lib/_stream_passthrough.js")
5075
5076},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
5077(function (process){
5078var Stream = (function (){
5079 try {
5080 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
5081 } catch(_){}
5082}());
5083exports = module.exports = require('./lib/_stream_readable.js');
5084exports.Stream = Stream || exports;
5085exports.Readable = exports;
5086exports.Writable = require('./lib/_stream_writable.js');
5087exports.Duplex = require('./lib/_stream_duplex.js');
5088exports.Transform = require('./lib/_stream_transform.js');
5089exports.PassThrough = require('./lib/_stream_passthrough.js');
5090
5091if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
5092 module.exports = Stream;
5093}
5094
5095}).call(this,require('_process'))
5096},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
5097module.exports = require("./lib/_stream_transform.js")
5098
5099},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
5100module.exports = require("./lib/_stream_writable.js")
5101
5102},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
5103// Copyright Joyent, Inc. and other Node contributors.
5104//
5105// Permission is hereby granted, free of charge, to any person obtaining a
5106// copy of this software and associated documentation files (the
5107// "Software"), to deal in the Software without restriction, including
5108// without limitation the rights to use, copy, modify, merge, publish,
5109// distribute, sublicense, and/or sell copies of the Software, and to permit
5110// persons to whom the Software is furnished to do so, subject to the
5111// following conditions:
5112//
5113// The above copyright notice and this permission notice shall be included
5114// in all copies or substantial portions of the Software.
5115//
5116// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5117// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5118// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5119// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5120// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5121// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5122// USE OR OTHER DEALINGS IN THE SOFTWARE.
5123
5124module.exports = Stream;
5125
5126var EE = require('events').EventEmitter;
5127var inherits = require('inherits');
5128
5129inherits(Stream, EE);
5130Stream.Readable = require('readable-stream/readable.js');
5131Stream.Writable = require('readable-stream/writable.js');
5132Stream.Duplex = require('readable-stream/duplex.js');
5133Stream.Transform = require('readable-stream/transform.js');
5134Stream.PassThrough = require('readable-stream/passthrough.js');
5135
5136// Backwards-compat with node 0.4.x
5137Stream.Stream = Stream;
5138
5139
5140
5141// old-style streams. Note that the pipe method (the only relevant
5142// part of this class) is overridden in the Readable class.
5143
5144function Stream() {
5145 EE.call(this);
5146}
5147
5148Stream.prototype.pipe = function(dest, options) {
5149 var source = this;
5150
5151 function ondata(chunk) {
5152 if (dest.writable) {
5153 if (false === dest.write(chunk) && source.pause) {
5154 source.pause();
5155 }
5156 }
5157 }
5158
5159 source.on('data', ondata);
5160
5161 function ondrain() {
5162 if (source.readable && source.resume) {
5163 source.resume();
5164 }
5165 }
5166
5167 dest.on('drain', ondrain);
5168
5169 // If the 'end' option is not supplied, dest.end() will be called when
5170 // source gets the 'end' or 'close' events. Only dest.end() once.
5171 if (!dest._isStdio && (!options || options.end !== false)) {
5172 source.on('end', onend);
5173 source.on('close', onclose);
5174 }
5175
5176 var didOnEnd = false;
5177 function onend() {
5178 if (didOnEnd) return;
5179 didOnEnd = true;
5180
5181 dest.end();
5182 }
5183
5184
5185 function onclose() {
5186 if (didOnEnd) return;
5187 didOnEnd = true;
5188
5189 if (typeof dest.destroy === 'function') dest.destroy();
5190 }
5191
5192 // don't leave dangling pipes when there are errors.
5193 function onerror(er) {
5194 cleanup();
5195 if (EE.listenerCount(this, 'error') === 0) {
5196 throw er; // Unhandled stream error in pipe.
5197 }
5198 }
5199
5200 source.on('error', onerror);
5201 dest.on('error', onerror);
5202
5203 // remove all the event listeners that were added.
5204 function cleanup() {
5205 source.removeListener('data', ondata);
5206 dest.removeListener('drain', ondrain);
5207
5208 source.removeListener('end', onend);
5209 source.removeListener('close', onclose);
5210
5211 source.removeListener('error', onerror);
5212 dest.removeListener('error', onerror);
5213
5214 source.removeListener('end', cleanup);
5215 source.removeListener('close', cleanup);
5216
5217 dest.removeListener('close', cleanup);
5218 }
5219
5220 source.on('end', cleanup);
5221 source.on('close', cleanup);
5222
5223 dest.on('close', cleanup);
5224
5225 dest.emit('pipe', source);
5226
5227 // Allow for unix-like usage: A.pipe(B).pipe(C)
5228 return dest;
5229};
5230
5231},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
5232// Copyright Joyent, Inc. and other Node contributors.
5233//
5234// Permission is hereby granted, free of charge, to any person obtaining a
5235// copy of this software and associated documentation files (the
5236// "Software"), to deal in the Software without restriction, including
5237// without limitation the rights to use, copy, modify, merge, publish,
5238// distribute, sublicense, and/or sell copies of the Software, and to permit
5239// persons to whom the Software is furnished to do so, subject to the
5240// following conditions:
5241//
5242// The above copyright notice and this permission notice shall be included
5243// in all copies or substantial portions of the Software.
5244//
5245// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5246// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5247// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5248// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5249// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5250// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5251// USE OR OTHER DEALINGS IN THE SOFTWARE.
5252
5253var Buffer = require('buffer').Buffer;
5254
5255var isBufferEncoding = Buffer.isEncoding
5256 || function(encoding) {
5257 switch (encoding && encoding.toLowerCase()) {
5258 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
5259 default: return false;
5260 }
5261 }
5262
5263
5264function assertEncoding(encoding) {
5265 if (encoding && !isBufferEncoding(encoding)) {
5266 throw new Error('Unknown encoding: ' + encoding);
5267 }
5268}
5269
5270// StringDecoder provides an interface for efficiently splitting a series of
5271// buffers into a series of JS strings without breaking apart multi-byte
5272// characters. CESU-8 is handled as part of the UTF-8 encoding.
5273//
5274// @TODO Handling all encodings inside a single object makes it very difficult
5275// to reason about this code, so it should be split up in the future.
5276// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
5277// points as used by CESU-8.
5278var StringDecoder = exports.StringDecoder = function(encoding) {
5279 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
5280 assertEncoding(encoding);
5281 switch (this.encoding) {
5282 case 'utf8':
5283 // CESU-8 represents each of Surrogate Pair by 3-bytes
5284 this.surrogateSize = 3;
5285 break;
5286 case 'ucs2':
5287 case 'utf16le':
5288 // UTF-16 represents each of Surrogate Pair by 2-bytes
5289 this.surrogateSize = 2;
5290 this.detectIncompleteChar = utf16DetectIncompleteChar;
5291 break;
5292 case 'base64':
5293 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
5294 this.surrogateSize = 3;
5295 this.detectIncompleteChar = base64DetectIncompleteChar;
5296 break;
5297 default:
5298 this.write = passThroughWrite;
5299 return;
5300 }
5301
5302 // Enough space to store all bytes of a single character. UTF-8 needs 4
5303 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
5304 this.charBuffer = new Buffer(6);
5305 // Number of bytes received for the current incomplete multi-byte character.
5306 this.charReceived = 0;
5307 // Number of bytes expected for the current incomplete multi-byte character.
5308 this.charLength = 0;
5309};
5310
5311
5312// write decodes the given buffer and returns it as JS string that is
5313// guaranteed to not contain any partial multi-byte characters. Any partial
5314// character found at the end of the buffer is buffered up, and will be
5315// returned when calling write again with the remaining bytes.
5316//
5317// Note: Converting a Buffer containing an orphan surrogate to a String
5318// currently works, but converting a String to a Buffer (via `new Buffer`, or
5319// Buffer#write) will replace incomplete surrogates with the unicode
5320// replacement character. See https://codereview.chromium.org/121173009/ .
5321StringDecoder.prototype.write = function(buffer) {
5322 var charStr = '';
5323 // if our last write ended with an incomplete multibyte character
5324 while (this.charLength) {
5325 // determine how many remaining bytes this buffer has to offer for this char
5326 var available = (buffer.length >= this.charLength - this.charReceived) ?
5327 this.charLength - this.charReceived :
5328 buffer.length;
5329
5330 // add the new bytes to the char buffer
5331 buffer.copy(this.charBuffer, this.charReceived, 0, available);
5332 this.charReceived += available;
5333
5334 if (this.charReceived < this.charLength) {
5335 // still not enough chars in this buffer? wait for more ...
5336 return '';
5337 }
5338
5339 // remove bytes belonging to the current character from the buffer
5340 buffer = buffer.slice(available, buffer.length);
5341
5342 // get the character that was split
5343 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
5344
5345 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
5346 var charCode = charStr.charCodeAt(charStr.length - 1);
5347 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
5348 this.charLength += this.surrogateSize;
5349 charStr = '';
5350 continue;
5351 }
5352 this.charReceived = this.charLength = 0;
5353
5354 // if there are no more bytes in this buffer, just emit our char
5355 if (buffer.length === 0) {
5356 return charStr;
5357 }
5358 break;
5359 }
5360
5361 // determine and set charLength / charReceived
5362 this.detectIncompleteChar(buffer);
5363
5364 var end = buffer.length;
5365 if (this.charLength) {
5366 // buffer the incomplete character bytes we got
5367 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
5368 end -= this.charReceived;
5369 }
5370
5371 charStr += buffer.toString(this.encoding, 0, end);
5372
5373 var end = charStr.length - 1;
5374 var charCode = charStr.charCodeAt(end);
5375 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
5376 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
5377 var size = this.surrogateSize;
5378 this.charLength += size;
5379 this.charReceived += size;
5380 this.charBuffer.copy(this.charBuffer, size, 0, size);
5381 buffer.copy(this.charBuffer, 0, 0, size);
5382 return charStr.substring(0, end);
5383 }
5384
5385 // or just emit the charStr
5386 return charStr;
5387};
5388
5389// detectIncompleteChar determines if there is an incomplete UTF-8 character at
5390// the end of the given buffer. If so, it sets this.charLength to the byte
5391// length that character, and sets this.charReceived to the number of bytes
5392// that are available for this character.
5393StringDecoder.prototype.detectIncompleteChar = function(buffer) {
5394 // determine how many bytes we have to check at the end of this buffer
5395 var i = (buffer.length >= 3) ? 3 : buffer.length;
5396
5397 // Figure out if one of the last i bytes of our buffer announces an
5398 // incomplete char.
5399 for (; i > 0; i--) {
5400 var c = buffer[buffer.length - i];
5401
5402 // See http://en.wikipedia.org/wiki/UTF-8#Description
5403
5404 // 110XXXXX
5405 if (i == 1 && c >> 5 == 0x06) {
5406 this.charLength = 2;
5407 break;
5408 }
5409
5410 // 1110XXXX
5411 if (i <= 2 && c >> 4 == 0x0E) {
5412 this.charLength = 3;
5413 break;
5414 }
5415
5416 // 11110XXX
5417 if (i <= 3 && c >> 3 == 0x1E) {
5418 this.charLength = 4;
5419 break;
5420 }
5421 }
5422 this.charReceived = i;
5423};
5424
5425StringDecoder.prototype.end = function(buffer) {
5426 var res = '';
5427 if (buffer && buffer.length)
5428 res = this.write(buffer);
5429
5430 if (this.charReceived) {
5431 var cr = this.charReceived;
5432 var buf = this.charBuffer;
5433 var enc = this.encoding;
5434 res += buf.slice(0, cr).toString(enc);
5435 }
5436
5437 return res;
5438};
5439
5440function passThroughWrite(buffer) {
5441 return buffer.toString(this.encoding);
5442}
5443
5444function utf16DetectIncompleteChar(buffer) {
5445 this.charReceived = buffer.length % 2;
5446 this.charLength = this.charReceived ? 2 : 0;
5447}
5448
5449function base64DetectIncompleteChar(buffer) {
5450 this.charReceived = buffer.length % 3;
5451 this.charLength = this.charReceived ? 3 : 0;
5452}
5453
5454},{"buffer":5}],27:[function(require,module,exports){
5455(function (global){
5456
5457/**
5458 * Module exports.
5459 */
5460
5461module.exports = deprecate;
5462
5463/**
5464 * Mark that a method should not be used.
5465 * Returns a modified function which warns once by default.
5466 *
5467 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
5468 *
5469 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
5470 * will throw an Error when invoked.
5471 *
5472 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
5473 * will invoke `console.trace()` instead of `console.error()`.
5474 *
5475 * @param {Function} fn - the function to deprecate
5476 * @param {String} msg - the string to print to the console when `fn` is invoked
5477 * @returns {Function} a new "deprecated" version of `fn`
5478 * @api public
5479 */
5480
5481function deprecate (fn, msg) {
5482 if (config('noDeprecation')) {
5483 return fn;
5484 }
5485
5486 var warned = false;
5487 function deprecated() {
5488 if (!warned) {
5489 if (config('throwDeprecation')) {
5490 throw new Error(msg);
5491 } else if (config('traceDeprecation')) {
5492 console.trace(msg);
5493 } else {
5494 console.warn(msg);
5495 }
5496 warned = true;
5497 }
5498 return fn.apply(this, arguments);
5499 }
5500
5501 return deprecated;
5502}
5503
5504/**
5505 * Checks `localStorage` for boolean values for the given `name`.
5506 *
5507 * @param {String} name
5508 * @returns {Boolean}
5509 * @api private
5510 */
5511
5512function config (name) {
5513 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
5514 try {
5515 if (!global.localStorage) return false;
5516 } catch (_) {
5517 return false;
5518 }
5519 var val = global.localStorage[name];
5520 if (null == val) return false;
5521 return String(val).toLowerCase() === 'true';
5522}
5523
5524}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5525},{}],28:[function(require,module,exports){
5526arguments[4][9][0].apply(exports,arguments)
5527},{"dup":9}],29:[function(require,module,exports){
5528module.exports = function isBuffer(arg) {
5529 return arg && typeof arg === 'object'
5530 && typeof arg.copy === 'function'
5531 && typeof arg.fill === 'function'
5532 && typeof arg.readUInt8 === 'function';
5533}
5534},{}],30:[function(require,module,exports){
5535(function (process,global){
5536// Copyright Joyent, Inc. and other Node contributors.
5537//
5538// Permission is hereby granted, free of charge, to any person obtaining a
5539// copy of this software and associated documentation files (the
5540// "Software"), to deal in the Software without restriction, including
5541// without limitation the rights to use, copy, modify, merge, publish,
5542// distribute, sublicense, and/or sell copies of the Software, and to permit
5543// persons to whom the Software is furnished to do so, subject to the
5544// following conditions:
5545//
5546// The above copyright notice and this permission notice shall be included
5547// in all copies or substantial portions of the Software.
5548//
5549// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5550// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5551// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5552// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5553// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5554// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5555// USE OR OTHER DEALINGS IN THE SOFTWARE.
5556
5557var formatRegExp = /%[sdj%]/g;
5558exports.format = function(f) {
5559 if (!isString(f)) {
5560 var objects = [];
5561 for (var i = 0; i < arguments.length; i++) {
5562 objects.push(inspect(arguments[i]));
5563 }
5564 return objects.join(' ');
5565 }
5566
5567 var i = 1;
5568 var args = arguments;
5569 var len = args.length;
5570 var str = String(f).replace(formatRegExp, function(x) {
5571 if (x === '%%') return '%';
5572 if (i >= len) return x;
5573 switch (x) {
5574 case '%s': return String(args[i++]);
5575 case '%d': return Number(args[i++]);
5576 case '%j':
5577 try {
5578 return JSON.stringify(args[i++]);
5579 } catch (_) {
5580 return '[Circular]';
5581 }
5582 default:
5583 return x;
5584 }
5585 });
5586 for (var x = args[i]; i < len; x = args[++i]) {
5587 if (isNull(x) || !isObject(x)) {
5588 str += ' ' + x;
5589 } else {
5590 str += ' ' + inspect(x);
5591 }
5592 }
5593 return str;
5594};
5595
5596
5597// Mark that a method should not be used.
5598// Returns a modified function which warns once by default.
5599// If --no-deprecation is set, then it is a no-op.
5600exports.deprecate = function(fn, msg) {
5601 // Allow for deprecating things in the process of starting up.
5602 if (isUndefined(global.process)) {
5603 return function() {
5604 return exports.deprecate(fn, msg).apply(this, arguments);
5605 };
5606 }
5607
5608 if (process.noDeprecation === true) {
5609 return fn;
5610 }
5611
5612 var warned = false;
5613 function deprecated() {
5614 if (!warned) {
5615 if (process.throwDeprecation) {
5616 throw new Error(msg);
5617 } else if (process.traceDeprecation) {
5618 console.trace(msg);
5619 } else {
5620 console.error(msg);
5621 }
5622 warned = true;
5623 }
5624 return fn.apply(this, arguments);
5625 }
5626
5627 return deprecated;
5628};
5629
5630
5631var debugs = {};
5632var debugEnviron;
5633exports.debuglog = function(set) {
5634 if (isUndefined(debugEnviron))
5635 debugEnviron = process.env.NODE_DEBUG || '';
5636 set = set.toUpperCase();
5637 if (!debugs[set]) {
5638 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
5639 var pid = process.pid;
5640 debugs[set] = function() {
5641 var msg = exports.format.apply(exports, arguments);
5642 console.error('%s %d: %s', set, pid, msg);
5643 };
5644 } else {
5645 debugs[set] = function() {};
5646 }
5647 }
5648 return debugs[set];
5649};
5650
5651
5652/**
5653 * Echos the value of a value. Trys to print the value out
5654 * in the best way possible given the different types.
5655 *
5656 * @param {Object} obj The object to print out.
5657 * @param {Object} opts Optional options object that alters the output.
5658 */
5659/* legacy: obj, showHidden, depth, colors*/
5660function inspect(obj, opts) {
5661 // default options
5662 var ctx = {
5663 seen: [],
5664 stylize: stylizeNoColor
5665 };
5666 // legacy...
5667 if (arguments.length >= 3) ctx.depth = arguments[2];
5668 if (arguments.length >= 4) ctx.colors = arguments[3];
5669 if (isBoolean(opts)) {
5670 // legacy...
5671 ctx.showHidden = opts;
5672 } else if (opts) {
5673 // got an "options" object
5674 exports._extend(ctx, opts);
5675 }
5676 // set default options
5677 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
5678 if (isUndefined(ctx.depth)) ctx.depth = 2;
5679 if (isUndefined(ctx.colors)) ctx.colors = false;
5680 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
5681 if (ctx.colors) ctx.stylize = stylizeWithColor;
5682 return formatValue(ctx, obj, ctx.depth);
5683}
5684exports.inspect = inspect;
5685
5686
5687// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
5688inspect.colors = {
5689 'bold' : [1, 22],
5690 'italic' : [3, 23],
5691 'underline' : [4, 24],
5692 'inverse' : [7, 27],
5693 'white' : [37, 39],
5694 'grey' : [90, 39],
5695 'black' : [30, 39],
5696 'blue' : [34, 39],
5697 'cyan' : [36, 39],
5698 'green' : [32, 39],
5699 'magenta' : [35, 39],
5700 'red' : [31, 39],
5701 'yellow' : [33, 39]
5702};
5703
5704// Don't use 'blue' not visible on cmd.exe
5705inspect.styles = {
5706 'special': 'cyan',
5707 'number': 'yellow',
5708 'boolean': 'yellow',
5709 'undefined': 'grey',
5710 'null': 'bold',
5711 'string': 'green',
5712 'date': 'magenta',
5713 // "name": intentionally not styling
5714 'regexp': 'red'
5715};
5716
5717
5718function stylizeWithColor(str, styleType) {
5719 var style = inspect.styles[styleType];
5720
5721 if (style) {
5722 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
5723 '\u001b[' + inspect.colors[style][1] + 'm';
5724 } else {
5725 return str;
5726 }
5727}
5728
5729
5730function stylizeNoColor(str, styleType) {
5731 return str;
5732}
5733
5734
5735function arrayToHash(array) {
5736 var hash = {};
5737
5738 array.forEach(function(val, idx) {
5739 hash[val] = true;
5740 });
5741
5742 return hash;
5743}
5744
5745
5746function formatValue(ctx, value, recurseTimes) {
5747 // Provide a hook for user-specified inspect functions.
5748 // Check that value is an object with an inspect function on it
5749 if (ctx.customInspect &&
5750 value &&
5751 isFunction(value.inspect) &&
5752 // Filter out the util module, it's inspect function is special
5753 value.inspect !== exports.inspect &&
5754 // Also filter out any prototype objects using the circular check.
5755 !(value.constructor && value.constructor.prototype === value)) {
5756 var ret = value.inspect(recurseTimes, ctx);
5757 if (!isString(ret)) {
5758 ret = formatValue(ctx, ret, recurseTimes);
5759 }
5760 return ret;
5761 }
5762
5763 // Primitive types cannot have properties
5764 var primitive = formatPrimitive(ctx, value);
5765 if (primitive) {
5766 return primitive;
5767 }
5768
5769 // Look up the keys of the object.
5770 var keys = Object.keys(value);
5771 var visibleKeys = arrayToHash(keys);
5772
5773 if (ctx.showHidden) {
5774 keys = Object.getOwnPropertyNames(value);
5775 }
5776
5777 // IE doesn't make error fields non-enumerable
5778 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
5779 if (isError(value)
5780 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
5781 return formatError(value);
5782 }
5783
5784 // Some type of object without properties can be shortcutted.
5785 if (keys.length === 0) {
5786 if (isFunction(value)) {
5787 var name = value.name ? ': ' + value.name : '';
5788 return ctx.stylize('[Function' + name + ']', 'special');
5789 }
5790 if (isRegExp(value)) {
5791 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
5792 }
5793 if (isDate(value)) {
5794 return ctx.stylize(Date.prototype.toString.call(value), 'date');
5795 }
5796 if (isError(value)) {
5797 return formatError(value);
5798 }
5799 }
5800
5801 var base = '', array = false, braces = ['{', '}'];
5802
5803 // Make Array say that they are Array
5804 if (isArray(value)) {
5805 array = true;
5806 braces = ['[', ']'];
5807 }
5808
5809 // Make functions say that they are functions
5810 if (isFunction(value)) {
5811 var n = value.name ? ': ' + value.name : '';
5812 base = ' [Function' + n + ']';
5813 }
5814
5815 // Make RegExps say that they are RegExps
5816 if (isRegExp(value)) {
5817 base = ' ' + RegExp.prototype.toString.call(value);
5818 }
5819
5820 // Make dates with properties first say the date
5821 if (isDate(value)) {
5822 base = ' ' + Date.prototype.toUTCString.call(value);
5823 }
5824
5825 // Make error with message first say the error
5826 if (isError(value)) {
5827 base = ' ' + formatError(value);
5828 }
5829
5830 if (keys.length === 0 && (!array || value.length == 0)) {
5831 return braces[0] + base + braces[1];
5832 }
5833
5834 if (recurseTimes < 0) {
5835 if (isRegExp(value)) {
5836 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
5837 } else {
5838 return ctx.stylize('[Object]', 'special');
5839 }
5840 }
5841
5842 ctx.seen.push(value);
5843
5844 var output;
5845 if (array) {
5846 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
5847 } else {
5848 output = keys.map(function(key) {
5849 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
5850 });
5851 }
5852
5853 ctx.seen.pop();
5854
5855 return reduceToSingleString(output, base, braces);
5856}
5857
5858
5859function formatPrimitive(ctx, value) {
5860 if (isUndefined(value))
5861 return ctx.stylize('undefined', 'undefined');
5862 if (isString(value)) {
5863 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
5864 .replace(/'/g, "\\'")
5865 .replace(/\\"/g, '"') + '\'';
5866 return ctx.stylize(simple, 'string');
5867 }
5868 if (isNumber(value))
5869 return ctx.stylize('' + value, 'number');
5870 if (isBoolean(value))
5871 return ctx.stylize('' + value, 'boolean');
5872 // For some reason typeof null is "object", so special case here.
5873 if (isNull(value))
5874 return ctx.stylize('null', 'null');
5875}
5876
5877
5878function formatError(value) {
5879 return '[' + Error.prototype.toString.call(value) + ']';
5880}
5881
5882
5883function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
5884 var output = [];
5885 for (var i = 0, l = value.length; i < l; ++i) {
5886 if (hasOwnProperty(value, String(i))) {
5887 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
5888 String(i), true));
5889 } else {
5890 output.push('');
5891 }
5892 }
5893 keys.forEach(function(key) {
5894 if (!key.match(/^\d+$/)) {
5895 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
5896 key, true));
5897 }
5898 });
5899 return output;
5900}
5901
5902
5903function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
5904 var name, str, desc;
5905 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
5906 if (desc.get) {
5907 if (desc.set) {
5908 str = ctx.stylize('[Getter/Setter]', 'special');
5909 } else {
5910 str = ctx.stylize('[Getter]', 'special');
5911 }
5912 } else {
5913 if (desc.set) {
5914 str = ctx.stylize('[Setter]', 'special');
5915 }
5916 }
5917 if (!hasOwnProperty(visibleKeys, key)) {
5918 name = '[' + key + ']';
5919 }
5920 if (!str) {
5921 if (ctx.seen.indexOf(desc.value) < 0) {
5922 if (isNull(recurseTimes)) {
5923 str = formatValue(ctx, desc.value, null);
5924 } else {
5925 str = formatValue(ctx, desc.value, recurseTimes - 1);
5926 }
5927 if (str.indexOf('\n') > -1) {
5928 if (array) {
5929 str = str.split('\n').map(function(line) {
5930 return ' ' + line;
5931 }).join('\n').substr(2);
5932 } else {
5933 str = '\n' + str.split('\n').map(function(line) {
5934 return ' ' + line;
5935 }).join('\n');
5936 }
5937 }
5938 } else {
5939 str = ctx.stylize('[Circular]', 'special');
5940 }
5941 }
5942 if (isUndefined(name)) {
5943 if (array && key.match(/^\d+$/)) {
5944 return str;
5945 }
5946 name = JSON.stringify('' + key);
5947 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
5948 name = name.substr(1, name.length - 2);
5949 name = ctx.stylize(name, 'name');
5950 } else {
5951 name = name.replace(/'/g, "\\'")
5952 .replace(/\\"/g, '"')
5953 .replace(/(^"|"$)/g, "'");
5954 name = ctx.stylize(name, 'string');
5955 }
5956 }
5957
5958 return name + ': ' + str;
5959}
5960
5961
5962function reduceToSingleString(output, base, braces) {
5963 var numLinesEst = 0;
5964 var length = output.reduce(function(prev, cur) {
5965 numLinesEst++;
5966 if (cur.indexOf('\n') >= 0) numLinesEst++;
5967 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
5968 }, 0);
5969
5970 if (length > 60) {
5971 return braces[0] +
5972 (base === '' ? '' : base + '\n ') +
5973 ' ' +
5974 output.join(',\n ') +
5975 ' ' +
5976 braces[1];
5977 }
5978
5979 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
5980}
5981
5982
5983// NOTE: These type checking functions intentionally don't use `instanceof`
5984// because it is fragile and can be easily faked with `Object.create()`.
5985function isArray(ar) {
5986 return Array.isArray(ar);
5987}
5988exports.isArray = isArray;
5989
5990function isBoolean(arg) {
5991 return typeof arg === 'boolean';
5992}
5993exports.isBoolean = isBoolean;
5994
5995function isNull(arg) {
5996 return arg === null;
5997}
5998exports.isNull = isNull;
5999
6000function isNullOrUndefined(arg) {
6001 return arg == null;
6002}
6003exports.isNullOrUndefined = isNullOrUndefined;
6004
6005function isNumber(arg) {
6006 return typeof arg === 'number';
6007}
6008exports.isNumber = isNumber;
6009
6010function isString(arg) {
6011 return typeof arg === 'string';
6012}
6013exports.isString = isString;
6014
6015function isSymbol(arg) {
6016 return typeof arg === 'symbol';
6017}
6018exports.isSymbol = isSymbol;
6019
6020function isUndefined(arg) {
6021 return arg === void 0;
6022}
6023exports.isUndefined = isUndefined;
6024
6025function isRegExp(re) {
6026 return isObject(re) && objectToString(re) === '[object RegExp]';
6027}
6028exports.isRegExp = isRegExp;
6029
6030function isObject(arg) {
6031 return typeof arg === 'object' && arg !== null;
6032}
6033exports.isObject = isObject;
6034
6035function isDate(d) {
6036 return isObject(d) && objectToString(d) === '[object Date]';
6037}
6038exports.isDate = isDate;
6039
6040function isError(e) {
6041 return isObject(e) &&
6042 (objectToString(e) === '[object Error]' || e instanceof Error);
6043}
6044exports.isError = isError;
6045
6046function isFunction(arg) {
6047 return typeof arg === 'function';
6048}
6049exports.isFunction = isFunction;
6050
6051function isPrimitive(arg) {
6052 return arg === null ||
6053 typeof arg === 'boolean' ||
6054 typeof arg === 'number' ||
6055 typeof arg === 'string' ||
6056 typeof arg === 'symbol' || // ES6 symbol
6057 typeof arg === 'undefined';
6058}
6059exports.isPrimitive = isPrimitive;
6060
6061exports.isBuffer = require('./support/isBuffer');
6062
6063function objectToString(o) {
6064 return Object.prototype.toString.call(o);
6065}
6066
6067
6068function pad(n) {
6069 return n < 10 ? '0' + n.toString(10) : n.toString(10);
6070}
6071
6072
6073var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
6074 'Oct', 'Nov', 'Dec'];
6075
6076// 26 Feb 16:19:34
6077function timestamp() {
6078 var d = new Date();
6079 var time = [pad(d.getHours()),
6080 pad(d.getMinutes()),
6081 pad(d.getSeconds())].join(':');
6082 return [d.getDate(), months[d.getMonth()], time].join(' ');
6083}
6084
6085
6086// log is just a thin wrapper to console.log that prepends a timestamp
6087exports.log = function() {
6088 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
6089};
6090
6091
6092/**
6093 * Inherit the prototype methods from one constructor into another.
6094 *
6095 * The Function.prototype.inherits from lang.js rewritten as a standalone
6096 * function (not on Function.prototype). NOTE: If this file is to be loaded
6097 * during bootstrapping this function needs to be rewritten using some native
6098 * functions as prototype setup using normal JavaScript does not work as
6099 * expected during bootstrapping (see mirror.js in r114903).
6100 *
6101 * @param {function} ctor Constructor function which needs to inherit the
6102 * prototype.
6103 * @param {function} superCtor Constructor function to inherit prototype from.
6104 */
6105exports.inherits = require('inherits');
6106
6107exports._extend = function(origin, add) {
6108 // Don't do anything if add isn't an object
6109 if (!add || !isObject(add)) return origin;
6110
6111 var keys = Object.keys(add);
6112 var i = keys.length;
6113 while (i--) {
6114 origin[keys[i]] = add[keys[i]];
6115 }
6116 return origin;
6117};
6118
6119function hasOwnProperty(obj, prop) {
6120 return Object.prototype.hasOwnProperty.call(obj, prop);
6121}
6122
6123}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
6124},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
6125(function (Buffer){
6126const createKeccakHash = require('keccak')
6127const secp256k1 = require('secp256k1')
6128const assert = require('assert')
6129const rlp = require('rlp')
6130const BN = require('bn.js')
6131const createHash = require('create-hash')
6132Object.assign(exports, require('ethjs-util'))
6133
6134/**
6135 * the max integer that this VM can handle (a ```BN```)
6136 * @var {BN} MAX_INTEGER
6137 */
6138exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
6139
6140/**
6141 * 2^256 (a ```BN```)
6142 * @var {BN} TWO_POW256
6143 */
6144exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
6145
6146/**
6147 * SHA3-256 hash of null (a ```String```)
6148 * @var {String} SHA3_NULL_S
6149 */
6150exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
6151
6152/**
6153 * SHA3-256 hash of null (a ```Buffer```)
6154 * @var {Buffer} SHA3_NULL
6155 */
6156exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
6157
6158/**
6159 * SHA3-256 of an RLP of an empty array (a ```String```)
6160 * @var {String} SHA3_RLP_ARRAY_S
6161 */
6162exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
6163
6164/**
6165 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
6166 * @var {Buffer} SHA3_RLP_ARRAY
6167 */
6168exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
6169
6170/**
6171 * SHA3-256 hash of the RLP of null (a ```String```)
6172 * @var {String} SHA3_RLP_S
6173 */
6174exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
6175
6176/**
6177 * SHA3-256 hash of the RLP of null (a ```Buffer```)
6178 * @var {Buffer} SHA3_RLP
6179 */
6180exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
6181
6182/**
6183 * [`BN`](https://github.com/indutny/bn.js)
6184 * @var {Function}
6185 */
6186exports.BN = BN
6187
6188/**
6189 * [`rlp`](https://github.com/ethereumjs/rlp)
6190 * @var {Function}
6191 */
6192exports.rlp = rlp
6193
6194/**
6195 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
6196 * @var {Object}
6197 */
6198exports.secp256k1 = secp256k1
6199
6200/**
6201 * Returns a buffer filled with 0s
6202 * @method zeros
6203 * @param {Number} bytes the number of bytes the buffer should be
6204 * @return {Buffer}
6205 */
6206exports.zeros = function (bytes) {
6207 return Buffer.allocUnsafe(bytes).fill(0)
6208}
6209
6210/**
6211 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
6212 * Or it truncates the beginning if it exceeds.
6213 * @method lsetLength
6214 * @param {Buffer|Array} msg the value to pad
6215 * @param {Number} length the number of bytes the output should be
6216 * @param {Boolean} [right=false] whether to start padding form the left or right
6217 * @return {Buffer|Array}
6218 */
6219exports.setLengthLeft = exports.setLength = function (msg, length, right) {
6220 var buf = exports.zeros(length)
6221 msg = exports.toBuffer(msg)
6222 if (right) {
6223 if (msg.length < length) {
6224 msg.copy(buf)
6225 return buf
6226 }
6227 return msg.slice(0, length)
6228 } else {
6229 if (msg.length < length) {
6230 msg.copy(buf, length - msg.length)
6231 return buf
6232 }
6233 return msg.slice(-length)
6234 }
6235}
6236
6237/**
6238 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
6239 * Or it truncates the beginning if it exceeds.
6240 * @param {Buffer|Array} msg the value to pad
6241 * @param {Number} length the number of bytes the output should be
6242 * @return {Buffer|Array}
6243 */
6244exports.setLengthRight = function (msg, length) {
6245 return exports.setLength(msg, length, true)
6246}
6247
6248/**
6249 * Trims leading zeros from a `Buffer` or an `Array`
6250 * @param {Buffer|Array|String} a
6251 * @return {Buffer|Array|String}
6252 */
6253exports.unpad = exports.stripZeros = function (a) {
6254 a = exports.stripHexPrefix(a)
6255 var first = a[0]
6256 while (a.length > 0 && first.toString() === '0') {
6257 a = a.slice(1)
6258 first = a[0]
6259 }
6260 return a
6261}
6262/**
6263 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
6264 * @param {*} v the value
6265 */
6266exports.toBuffer = function (v) {
6267 if (!Buffer.isBuffer(v)) {
6268 if (Array.isArray(v)) {
6269 v = Buffer.from(v)
6270 } else if (typeof v === 'string') {
6271 if (exports.isHexPrefixed(v)) {
6272 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
6273 } else {
6274 v = Buffer.from(v)
6275 }
6276 } else if (typeof v === 'number') {
6277 v = exports.intToBuffer(v)
6278 } else if (v === null || v === undefined) {
6279 v = Buffer.allocUnsafe(0)
6280 } else if (v.toArray) {
6281 // converts a BN to a Buffer
6282 v = Buffer.from(v.toArray())
6283 } else {
6284 throw new Error('invalid type')
6285 }
6286 }
6287 return v
6288}
6289
6290/**
6291 * Converts a `Buffer` to a `Number`
6292 * @param {Buffer} buf
6293 * @return {Number}
6294 * @throws If the input number exceeds 53 bits.
6295 */
6296exports.bufferToInt = function (buf) {
6297 return new BN(exports.toBuffer(buf)).toNumber()
6298}
6299
6300/**
6301 * Converts a `Buffer` into a hex `String`
6302 * @param {Buffer} buf
6303 * @return {String}
6304 */
6305exports.bufferToHex = function (buf) {
6306 buf = exports.toBuffer(buf)
6307 return '0x' + buf.toString('hex')
6308}
6309
6310/**
6311 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
6312 * @param {Buffer} num
6313 * @return {BN}
6314 */
6315exports.fromSigned = function (num) {
6316 return new BN(num).fromTwos(256)
6317}
6318
6319/**
6320 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
6321 * @param {BN} num
6322 * @return {Buffer}
6323 */
6324exports.toUnsigned = function (num) {
6325 return Buffer.from(num.toTwos(256).toArray())
6326}
6327
6328/**
6329 * Creates SHA-3 hash of the input
6330 * @param {Buffer|Array|String|Number} a the input data
6331 * @param {Number} [bits=256] the SHA width
6332 * @return {Buffer}
6333 */
6334exports.sha3 = function (a, bits) {
6335 a = exports.toBuffer(a)
6336 if (!bits) bits = 256
6337
6338 return createKeccakHash('keccak' + bits).update(a).digest()
6339}
6340
6341/**
6342 * Creates SHA256 hash of the input
6343 * @param {Buffer|Array|String|Number} a the input data
6344 * @return {Buffer}
6345 */
6346exports.sha256 = function (a) {
6347 a = exports.toBuffer(a)
6348 return createHash('sha256').update(a).digest()
6349}
6350
6351/**
6352 * Creates RIPEMD160 hash of the input
6353 * @param {Buffer|Array|String|Number} a the input data
6354 * @param {Boolean} padded whether it should be padded to 256 bits or not
6355 * @return {Buffer}
6356 */
6357exports.ripemd160 = function (a, padded) {
6358 a = exports.toBuffer(a)
6359 var hash = createHash('rmd160').update(a).digest()
6360 if (padded === true) {
6361 return exports.setLength(hash, 32)
6362 } else {
6363 return hash
6364 }
6365}
6366
6367/**
6368 * Creates SHA-3 hash of the RLP encoded version of the input
6369 * @param {Buffer|Array|String|Number} a the input data
6370 * @return {Buffer}
6371 */
6372exports.rlphash = function (a) {
6373 return exports.sha3(rlp.encode(a))
6374}
6375
6376/**
6377 * Checks if the private key satisfies the rules of the curve secp256k1.
6378 * @param {Buffer} privateKey
6379 * @return {Boolean}
6380 */
6381exports.isValidPrivate = function (privateKey) {
6382 return secp256k1.privateKeyVerify(privateKey)
6383}
6384
6385/**
6386 * Checks if the public key satisfies the rules of the curve secp256k1
6387 * and the requirements of Ethereum.
6388 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
6389 * @param {Boolean} [sanitize=false] Accept public keys in other formats
6390 * @return {Boolean}
6391 */
6392exports.isValidPublic = function (publicKey, sanitize) {
6393 if (publicKey.length === 64) {
6394 // Convert to SEC1 for secp256k1
6395 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
6396 }
6397
6398 if (!sanitize) {
6399 return false
6400 }
6401
6402 return secp256k1.publicKeyVerify(publicKey)
6403}
6404
6405/**
6406 * Returns the ethereum address of a given public key.
6407 * Accepts "Ethereum public keys" and SEC1 encoded keys.
6408 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
6409 * @param {Boolean} [sanitize=false] Accept public keys in other formats
6410 * @return {Buffer}
6411 */
6412exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
6413 pubKey = exports.toBuffer(pubKey)
6414 if (sanitize && (pubKey.length !== 64)) {
6415 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
6416 }
6417 assert(pubKey.length === 64)
6418 // Only take the lower 160bits of the hash
6419 return exports.sha3(pubKey).slice(-20)
6420}
6421
6422/**
6423 * Returns the ethereum public key of a given private key
6424 * @param {Buffer} privateKey A private key must be 256 bits wide
6425 * @return {Buffer}
6426 */
6427var privateToPublic = exports.privateToPublic = function (privateKey) {
6428 privateKey = exports.toBuffer(privateKey)
6429 // skip the type flag and use the X, Y points
6430 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
6431}
6432
6433/**
6434 * Converts a public key to the Ethereum format.
6435 * @param {Buffer} publicKey
6436 * @return {Buffer}
6437 */
6438exports.importPublic = function (publicKey) {
6439 publicKey = exports.toBuffer(publicKey)
6440 if (publicKey.length !== 64) {
6441 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
6442 }
6443 return publicKey
6444}
6445
6446/**
6447 * ECDSA sign
6448 * @param {Buffer} msgHash
6449 * @param {Buffer} privateKey
6450 * @return {Object}
6451 */
6452exports.ecsign = function (msgHash, privateKey) {
6453 var sig = secp256k1.sign(msgHash, privateKey)
6454
6455 var ret = {}
6456 ret.r = sig.signature.slice(0, 32)
6457 ret.s = sig.signature.slice(32, 64)
6458 ret.v = sig.recovery + 27
6459 return ret
6460}
6461
6462/**
6463 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
6464 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
6465 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
6466 * used to produce the signature.
6467 * @param message
6468 * @returns {Buffer} hash
6469 */
6470exports.hashPersonalMessage = function (message) {
6471 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
6472 return exports.sha3(Buffer.concat([prefix, message]))
6473}
6474
6475/**
6476 * ECDSA public key recovery from signature
6477 * @param {Buffer} msgHash
6478 * @param {Number} v
6479 * @param {Buffer} r
6480 * @param {Buffer} s
6481 * @return {Buffer} publicKey
6482 */
6483exports.ecrecover = function (msgHash, v, r, s) {
6484 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
6485 var recovery = v - 27
6486 if (recovery !== 0 && recovery !== 1) {
6487 throw new Error('Invalid signature v value')
6488 }
6489 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
6490 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
6491}
6492
6493/**
6494 * Convert signature parameters into the format of `eth_sign` RPC method
6495 * @param {Number} v
6496 * @param {Buffer} r
6497 * @param {Buffer} s
6498 * @return {String} sig
6499 */
6500exports.toRpcSig = function (v, r, s) {
6501 // NOTE: with potential introduction of chainId this might need to be updated
6502 if (v !== 27 && v !== 28) {
6503 throw new Error('Invalid recovery id')
6504 }
6505
6506 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
6507 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
6508 return exports.bufferToHex(Buffer.concat([
6509 exports.setLengthLeft(r, 32),
6510 exports.setLengthLeft(s, 32),
6511 exports.toBuffer(v - 27)
6512 ]))
6513}
6514
6515/**
6516 * Convert signature format of the `eth_sign` RPC method to signature parameters
6517 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
6518 * @param {String} sig
6519 * @return {Object}
6520 */
6521exports.fromRpcSig = function (sig) {
6522 sig = exports.toBuffer(sig)
6523
6524 // NOTE: with potential introduction of chainId this might need to be updated
6525 if (sig.length !== 65) {
6526 throw new Error('Invalid signature length')
6527 }
6528
6529 var v = sig[64]
6530 // support both versions of `eth_sign` responses
6531 if (v < 27) {
6532 v += 27
6533 }
6534
6535 return {
6536 v: v,
6537 r: sig.slice(0, 32),
6538 s: sig.slice(32, 64)
6539 }
6540}
6541
6542/**
6543 * Returns the ethereum address of a given private key
6544 * @param {Buffer} privateKey A private key must be 256 bits wide
6545 * @return {Buffer}
6546 */
6547exports.privateToAddress = function (privateKey) {
6548 return exports.publicToAddress(privateToPublic(privateKey))
6549}
6550
6551/**
6552 * Checks if the address is a valid. Accepts checksummed addresses too
6553 * @param {String} address
6554 * @return {Boolean}
6555 */
6556exports.isValidAddress = function (address) {
6557 return /^0x[0-9a-fA-F]{40}$/i.test(address)
6558}
6559
6560/**
6561 * Returns a checksummed address
6562 * @param {String} address
6563 * @return {String}
6564 */
6565exports.toChecksumAddress = function (address) {
6566 address = exports.stripHexPrefix(address).toLowerCase()
6567 var hash = exports.sha3(address).toString('hex')
6568 var ret = '0x'
6569
6570 for (var i = 0; i < address.length; i++) {
6571 if (parseInt(hash[i], 16) >= 8) {
6572 ret += address[i].toUpperCase()
6573 } else {
6574 ret += address[i]
6575 }
6576 }
6577
6578 return ret
6579}
6580
6581/**
6582 * Checks if the address is a valid checksummed address
6583 * @param {Buffer} address
6584 * @return {Boolean}
6585 */
6586exports.isValidChecksumAddress = function (address) {
6587 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
6588}
6589
6590/**
6591 * Generates an address of a newly created contract
6592 * @param {Buffer} from the address which is creating this new address
6593 * @param {Buffer} nonce the nonce of the from account
6594 * @return {Buffer}
6595 */
6596exports.generateAddress = function (from, nonce) {
6597 from = exports.toBuffer(from)
6598 nonce = new BN(nonce)
6599
6600 if (nonce.isZero()) {
6601 // in RLP we want to encode null in the case of zero nonce
6602 // read the RLP documentation for an answer if you dare
6603 nonce = null
6604 } else {
6605 nonce = Buffer.from(nonce.toArray())
6606 }
6607
6608 // Only take the lower 160bits of the hash
6609 return exports.rlphash([from, nonce]).slice(-20)
6610}
6611
6612/**
6613 * Returns true if the supplied address belongs to a precompiled account
6614 * @param {Buffer|String} address
6615 * @return {Boolean}
6616 */
6617exports.isPrecompiled = function (address) {
6618 var a = exports.unpad(address)
6619 return a.length === 1 && a[0] > 0 && a[0] < 5
6620}
6621
6622/**
6623 * Adds "0x" to a given `String` if it does not already start with "0x"
6624 * @param {String} str
6625 * @return {String}
6626 */
6627exports.addHexPrefix = function (str) {
6628 if (typeof str !== 'string') {
6629 return str
6630 }
6631
6632 return exports.isHexPrefixed(str) ? str : '0x' + str
6633}
6634
6635/**
6636 * Validate ECDSA signature
6637 * @method isValidSignature
6638 * @param {Buffer} v
6639 * @param {Buffer} r
6640 * @param {Buffer} s
6641 * @param {Boolean} [homestead=true]
6642 * @return {Boolean}
6643 */
6644
6645exports.isValidSignature = function (v, r, s, homestead) {
6646 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
6647 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
6648
6649 if (r.length !== 32 || s.length !== 32) {
6650 return false
6651 }
6652
6653 if (v !== 27 && v !== 28) {
6654 return false
6655 }
6656
6657 r = new BN(r)
6658 s = new BN(s)
6659
6660 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
6661 return false
6662 }
6663
6664 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
6665 return false
6666 }
6667
6668 return true
6669}
6670
6671/**
6672 * Converts a `Buffer` or `Array` to JSON
6673 * @param {Buffer|Array} ba
6674 * @return {Array|String|null}
6675 */
6676exports.baToJSON = function (ba) {
6677 if (Buffer.isBuffer(ba)) {
6678 return '0x' + ba.toString('hex')
6679 } else if (ba instanceof Array) {
6680 var array = []
6681 for (var i = 0; i < ba.length; i++) {
6682 array.push(exports.baToJSON(ba[i]))
6683 }
6684 return array
6685 }
6686}
6687
6688/**
6689 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
6690 * @param {Object} self the `Object` to define properties on
6691 * @param {Array} fields an array fields to define. Fields can contain:
6692 * * `name` - the name of the properties
6693 * * `length` - the number of bytes the field can have
6694 * * `allowLess` - if the field can be less than the length
6695 * * `allowEmpty`
6696 * @param {*} data data to be validated against the definitions
6697 */
6698exports.defineProperties = function (self, fields, data) {
6699 self.raw = []
6700 self._fields = []
6701
6702 // attach the `toJSON`
6703 self.toJSON = function (label) {
6704 if (label) {
6705 var obj = {}
6706 self._fields.forEach(function (field) {
6707 obj[field] = '0x' + self[field].toString('hex')
6708 })
6709 return obj
6710 }
6711 return exports.baToJSON(this.raw)
6712 }
6713
6714 self.serialize = function serialize () {
6715 return rlp.encode(self.raw)
6716 }
6717
6718 fields.forEach(function (field, i) {
6719 self._fields.push(field.name)
6720 function getter () {
6721 return self.raw[i]
6722 }
6723 function setter (v) {
6724 v = exports.toBuffer(v)
6725
6726 if (v.toString('hex') === '00' && !field.allowZero) {
6727 v = Buffer.allocUnsafe(0)
6728 }
6729
6730 if (field.allowLess && field.length) {
6731 v = exports.stripZeros(v)
6732 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
6733 } else if (!(field.allowZero && v.length === 0) && field.length) {
6734 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
6735 }
6736
6737 self.raw[i] = v
6738 }
6739
6740 Object.defineProperty(self, field.name, {
6741 enumerable: true,
6742 configurable: true,
6743 get: getter,
6744 set: setter
6745 })
6746
6747 if (field.default) {
6748 self[field.name] = field.default
6749 }
6750
6751 // attach alias
6752 if (field.alias) {
6753 Object.defineProperty(self, field.alias, {
6754 enumerable: false,
6755 configurable: true,
6756 set: setter,
6757 get: getter
6758 })
6759 }
6760 })
6761
6762 // if the constuctor is passed data
6763 if (data) {
6764 if (typeof data === 'string') {
6765 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
6766 }
6767
6768 if (Buffer.isBuffer(data)) {
6769 data = rlp.decode(data)
6770 }
6771
6772 if (Array.isArray(data)) {
6773 if (data.length > self._fields.length) {
6774 throw (new Error('wrong number of fields in data'))
6775 }
6776
6777 // make sure all the items are buffers
6778 data.forEach(function (d, i) {
6779 self[self._fields[i]] = exports.toBuffer(d)
6780 })
6781 } else if (typeof data === 'object') {
6782 const keys = Object.keys(data)
6783 fields.forEach(function (field) {
6784 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
6785 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
6786 })
6787 } else {
6788 throw new Error('invalid data')
6789 }
6790 }
6791}
6792
6793}).call(this,require("buffer").Buffer)
6794},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
6795(function (Buffer){
6796// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
6797// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
6798// NOTE: SIGHASH byte ignored AND restricted, truncate before use
6799
6800function check (buffer) {
6801 if (buffer.length < 8) return false
6802 if (buffer.length > 72) return false
6803 if (buffer[0] !== 0x30) return false
6804 if (buffer[1] !== buffer.length - 2) return false
6805 if (buffer[2] !== 0x02) return false
6806
6807 var lenR = buffer[3]
6808 if (lenR === 0) return false
6809 if (5 + lenR >= buffer.length) return false
6810 if (buffer[4 + lenR] !== 0x02) return false
6811
6812 var lenS = buffer[5 + lenR]
6813 if (lenS === 0) return false
6814 if ((6 + lenR + lenS) !== buffer.length) return false
6815
6816 if (buffer[4] & 0x80) return false
6817 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
6818
6819 if (buffer[lenR + 6] & 0x80) return false
6820 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
6821 return true
6822}
6823
6824function decode (buffer) {
6825 if (buffer.length < 8) throw new Error('DER sequence length is too short')
6826 if (buffer.length > 72) throw new Error('DER sequence length is too long')
6827 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
6828 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
6829 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
6830
6831 var lenR = buffer[3]
6832 if (lenR === 0) throw new Error('R length is zero')
6833 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
6834 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
6835
6836 var lenS = buffer[5 + lenR]
6837 if (lenS === 0) throw new Error('S length is zero')
6838 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
6839
6840 if (buffer[4] & 0x80) throw new Error('R value is negative')
6841 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
6842
6843 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
6844 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
6845
6846 // non-BIP66 - extract R, S values
6847 return {
6848 r: buffer.slice(4, 4 + lenR),
6849 s: buffer.slice(6 + lenR)
6850 }
6851}
6852
6853/*
6854 * Expects r and s to be positive DER integers.
6855 *
6856 * The DER format uses the most significant bit as a sign bit (& 0x80).
6857 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
6858 *
6859 * Examples:
6860 *
6861 * 0 => 0x00
6862 * 1 => 0x01
6863 * -1 => 0xff
6864 * 127 => 0x7f
6865 * -127 => 0x81
6866 * 128 => 0x0080
6867 * -128 => 0x80
6868 * 255 => 0x00ff
6869 * -255 => 0xff01
6870 * 16300 => 0x3fac
6871 * -16300 => 0xc054
6872 * 62300 => 0x00f35c
6873 * -62300 => 0xff0ca4
6874*/
6875function encode (r, s) {
6876 var lenR = r.length
6877 var lenS = s.length
6878 if (lenR === 0) throw new Error('R length is zero')
6879 if (lenS === 0) throw new Error('S length is zero')
6880 if (lenR > 33) throw new Error('R length is too long')
6881 if (lenS > 33) throw new Error('S length is too long')
6882 if (r[0] & 0x80) throw new Error('R value is negative')
6883 if (s[0] & 0x80) throw new Error('S value is negative')
6884 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
6885 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
6886
6887 var signature = new Buffer(6 + lenR + lenS)
6888
6889 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
6890 signature[0] = 0x30
6891 signature[1] = signature.length - 2
6892 signature[2] = 0x02
6893 signature[3] = r.length
6894 r.copy(signature, 4)
6895 signature[4 + lenR] = 0x02
6896 signature[5 + lenR] = s.length
6897 s.copy(signature, 6 + lenR)
6898
6899 return signature
6900}
6901
6902module.exports = {
6903 check: check,
6904 decode: decode,
6905 encode: encode
6906}
6907
6908}).call(this,require("buffer").Buffer)
6909},{"buffer":5}],33:[function(require,module,exports){
6910(function (module, exports) {
6911 'use strict';
6912
6913 // Utils
6914 function assert (val, msg) {
6915 if (!val) throw new Error(msg || 'Assertion failed');
6916 }
6917
6918 // Could use `inherits` module, but don't want to move from single file
6919 // architecture yet.
6920 function inherits (ctor, superCtor) {
6921 ctor.super_ = superCtor;
6922 var TempCtor = function () {};
6923 TempCtor.prototype = superCtor.prototype;
6924 ctor.prototype = new TempCtor();
6925 ctor.prototype.constructor = ctor;
6926 }
6927
6928 // BN
6929
6930 function BN (number, base, endian) {
6931 if (BN.isBN(number)) {
6932 return number;
6933 }
6934
6935 this.negative = 0;
6936 this.words = null;
6937 this.length = 0;
6938
6939 // Reduction context
6940 this.red = null;
6941
6942 if (number !== null) {
6943 if (base === 'le' || base === 'be') {
6944 endian = base;
6945 base = 10;
6946 }
6947
6948 this._init(number || 0, base || 10, endian || 'be');
6949 }
6950 }
6951 if (typeof module === 'object') {
6952 module.exports = BN;
6953 } else {
6954 exports.BN = BN;
6955 }
6956
6957 BN.BN = BN;
6958 BN.wordSize = 26;
6959
6960 var Buffer;
6961 try {
6962 Buffer = require('buf' + 'fer').Buffer;
6963 } catch (e) {
6964 }
6965
6966 BN.isBN = function isBN (num) {
6967 if (num instanceof BN) {
6968 return true;
6969 }
6970
6971 return num !== null && typeof num === 'object' &&
6972 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
6973 };
6974
6975 BN.max = function max (left, right) {
6976 if (left.cmp(right) > 0) return left;
6977 return right;
6978 };
6979
6980 BN.min = function min (left, right) {
6981 if (left.cmp(right) < 0) return left;
6982 return right;
6983 };
6984
6985 BN.prototype._init = function init (number, base, endian) {
6986 if (typeof number === 'number') {
6987 return this._initNumber(number, base, endian);
6988 }
6989
6990 if (typeof number === 'object') {
6991 return this._initArray(number, base, endian);
6992 }
6993
6994 if (base === 'hex') {
6995 base = 16;
6996 }
6997 assert(base === (base | 0) && base >= 2 && base <= 36);
6998
6999 number = number.toString().replace(/\s+/g, '');
7000 var start = 0;
7001 if (number[0] === '-') {
7002 start++;
7003 }
7004
7005 if (base === 16) {
7006 this._parseHex(number, start);
7007 } else {
7008 this._parseBase(number, base, start);
7009 }
7010
7011 if (number[0] === '-') {
7012 this.negative = 1;
7013 }
7014
7015 this.strip();
7016
7017 if (endian !== 'le') return;
7018
7019 this._initArray(this.toArray(), base, endian);
7020 };
7021
7022 BN.prototype._initNumber = function _initNumber (number, base, endian) {
7023 if (number < 0) {
7024 this.negative = 1;
7025 number = -number;
7026 }
7027 if (number < 0x4000000) {
7028 this.words = [ number & 0x3ffffff ];
7029 this.length = 1;
7030 } else if (number < 0x10000000000000) {
7031 this.words = [
7032 number & 0x3ffffff,
7033 (number / 0x4000000) & 0x3ffffff
7034 ];
7035 this.length = 2;
7036 } else {
7037 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
7038 this.words = [
7039 number & 0x3ffffff,
7040 (number / 0x4000000) & 0x3ffffff,
7041 1
7042 ];
7043 this.length = 3;
7044 }
7045
7046 if (endian !== 'le') return;
7047
7048 // Reverse the bytes
7049 this._initArray(this.toArray(), base, endian);
7050 };
7051
7052 BN.prototype._initArray = function _initArray (number, base, endian) {
7053 // Perhaps a Uint8Array
7054 assert(typeof number.length === 'number');
7055 if (number.length <= 0) {
7056 this.words = [ 0 ];
7057 this.length = 1;
7058 return this;
7059 }
7060
7061 this.length = Math.ceil(number.length / 3);
7062 this.words = new Array(this.length);
7063 for (var i = 0; i < this.length; i++) {
7064 this.words[i] = 0;
7065 }
7066
7067 var j, w;
7068 var off = 0;
7069 if (endian === 'be') {
7070 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
7071 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
7072 this.words[j] |= (w << off) & 0x3ffffff;
7073 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
7074 off += 24;
7075 if (off >= 26) {
7076 off -= 26;
7077 j++;
7078 }
7079 }
7080 } else if (endian === 'le') {
7081 for (i = 0, j = 0; i < number.length; i += 3) {
7082 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
7083 this.words[j] |= (w << off) & 0x3ffffff;
7084 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
7085 off += 24;
7086 if (off >= 26) {
7087 off -= 26;
7088 j++;
7089 }
7090 }
7091 }
7092 return this.strip();
7093 };
7094
7095 function parseHex (str, start, end) {
7096 var r = 0;
7097 var len = Math.min(str.length, end);
7098 for (var i = start; i < len; i++) {
7099 var c = str.charCodeAt(i) - 48;
7100
7101 r <<= 4;
7102
7103 // 'a' - 'f'
7104 if (c >= 49 && c <= 54) {
7105 r |= c - 49 + 0xa;
7106
7107 // 'A' - 'F'
7108 } else if (c >= 17 && c <= 22) {
7109 r |= c - 17 + 0xa;
7110
7111 // '0' - '9'
7112 } else {
7113 r |= c & 0xf;
7114 }
7115 }
7116 return r;
7117 }
7118
7119 BN.prototype._parseHex = function _parseHex (number, start) {
7120 // Create possibly bigger array to ensure that it fits the number
7121 this.length = Math.ceil((number.length - start) / 6);
7122 this.words = new Array(this.length);
7123 for (var i = 0; i < this.length; i++) {
7124 this.words[i] = 0;
7125 }
7126
7127 var j, w;
7128 // Scan 24-bit chunks and add them to the number
7129 var off = 0;
7130 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
7131 w = parseHex(number, i, i + 6);
7132 this.words[j] |= (w << off) & 0x3ffffff;
7133 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
7134 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
7135 off += 24;
7136 if (off >= 26) {
7137 off -= 26;
7138 j++;
7139 }
7140 }
7141 if (i + 6 !== start) {
7142 w = parseHex(number, start, i + 6);
7143 this.words[j] |= (w << off) & 0x3ffffff;
7144 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
7145 }
7146 this.strip();
7147 };
7148
7149 function parseBase (str, start, end, mul) {
7150 var r = 0;
7151 var len = Math.min(str.length, end);
7152 for (var i = start; i < len; i++) {
7153 var c = str.charCodeAt(i) - 48;
7154
7155 r *= mul;
7156
7157 // 'a'
7158 if (c >= 49) {
7159 r += c - 49 + 0xa;
7160
7161 // 'A'
7162 } else if (c >= 17) {
7163 r += c - 17 + 0xa;
7164
7165 // '0' - '9'
7166 } else {
7167 r += c;
7168 }
7169 }
7170 return r;
7171 }
7172
7173 BN.prototype._parseBase = function _parseBase (number, base, start) {
7174 // Initialize as zero
7175 this.words = [ 0 ];
7176 this.length = 1;
7177
7178 // Find length of limb in base
7179 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
7180 limbLen++;
7181 }
7182 limbLen--;
7183 limbPow = (limbPow / base) | 0;
7184
7185 var total = number.length - start;
7186 var mod = total % limbLen;
7187 var end = Math.min(total, total - mod) + start;
7188
7189 var word = 0;
7190 for (var i = start; i < end; i += limbLen) {
7191 word = parseBase(number, i, i + limbLen, base);
7192
7193 this.imuln(limbPow);
7194 if (this.words[0] + word < 0x4000000) {
7195 this.words[0] += word;
7196 } else {
7197 this._iaddn(word);
7198 }
7199 }
7200
7201 if (mod !== 0) {
7202 var pow = 1;
7203 word = parseBase(number, i, number.length, base);
7204
7205 for (i = 0; i < mod; i++) {
7206 pow *= base;
7207 }
7208
7209 this.imuln(pow);
7210 if (this.words[0] + word < 0x4000000) {
7211 this.words[0] += word;
7212 } else {
7213 this._iaddn(word);
7214 }
7215 }
7216 };
7217
7218 BN.prototype.copy = function copy (dest) {
7219 dest.words = new Array(this.length);
7220 for (var i = 0; i < this.length; i++) {
7221 dest.words[i] = this.words[i];
7222 }
7223 dest.length = this.length;
7224 dest.negative = this.negative;
7225 dest.red = this.red;
7226 };
7227
7228 BN.prototype.clone = function clone () {
7229 var r = new BN(null);
7230 this.copy(r);
7231 return r;
7232 };
7233
7234 BN.prototype._expand = function _expand (size) {
7235 while (this.length < size) {
7236 this.words[this.length++] = 0;
7237 }
7238 return this;
7239 };
7240
7241 // Remove leading `0` from `this`
7242 BN.prototype.strip = function strip () {
7243 while (this.length > 1 && this.words[this.length - 1] === 0) {
7244 this.length--;
7245 }
7246 return this._normSign();
7247 };
7248
7249 BN.prototype._normSign = function _normSign () {
7250 // -0 = 0
7251 if (this.length === 1 && this.words[0] === 0) {
7252 this.negative = 0;
7253 }
7254 return this;
7255 };
7256
7257 BN.prototype.inspect = function inspect () {
7258 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
7259 };
7260
7261 /*
7262
7263 var zeros = [];
7264 var groupSizes = [];
7265 var groupBases = [];
7266
7267 var s = '';
7268 var i = -1;
7269 while (++i < BN.wordSize) {
7270 zeros[i] = s;
7271 s += '0';
7272 }
7273 groupSizes[0] = 0;
7274 groupSizes[1] = 0;
7275 groupBases[0] = 0;
7276 groupBases[1] = 0;
7277 var base = 2 - 1;
7278 while (++base < 36 + 1) {
7279 var groupSize = 0;
7280 var groupBase = 1;
7281 while (groupBase < (1 << BN.wordSize) / base) {
7282 groupBase *= base;
7283 groupSize += 1;
7284 }
7285 groupSizes[base] = groupSize;
7286 groupBases[base] = groupBase;
7287 }
7288
7289 */
7290
7291 var zeros = [
7292 '',
7293 '0',
7294 '00',
7295 '000',
7296 '0000',
7297 '00000',
7298 '000000',
7299 '0000000',
7300 '00000000',
7301 '000000000',
7302 '0000000000',
7303 '00000000000',
7304 '000000000000',
7305 '0000000000000',
7306 '00000000000000',
7307 '000000000000000',
7308 '0000000000000000',
7309 '00000000000000000',
7310 '000000000000000000',
7311 '0000000000000000000',
7312 '00000000000000000000',
7313 '000000000000000000000',
7314 '0000000000000000000000',
7315 '00000000000000000000000',
7316 '000000000000000000000000',
7317 '0000000000000000000000000'
7318 ];
7319
7320 var groupSizes = [
7321 0, 0,
7322 25, 16, 12, 11, 10, 9, 8,
7323 8, 7, 7, 7, 7, 6, 6,
7324 6, 6, 6, 6, 6, 5, 5,
7325 5, 5, 5, 5, 5, 5, 5,
7326 5, 5, 5, 5, 5, 5, 5
7327 ];
7328
7329 var groupBases = [
7330 0, 0,
7331 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
7332 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
7333 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
7334 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
7335 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
7336 ];
7337
7338 BN.prototype.toString = function toString (base, padding) {
7339 base = base || 10;
7340 padding = padding | 0 || 1;
7341
7342 var out;
7343 if (base === 16 || base === 'hex') {
7344 out = '';
7345 var off = 0;
7346 var carry = 0;
7347 for (var i = 0; i < this.length; i++) {
7348 var w = this.words[i];
7349 var word = (((w << off) | carry) & 0xffffff).toString(16);
7350 carry = (w >>> (24 - off)) & 0xffffff;
7351 if (carry !== 0 || i !== this.length - 1) {
7352 out = zeros[6 - word.length] + word + out;
7353 } else {
7354 out = word + out;
7355 }
7356 off += 2;
7357 if (off >= 26) {
7358 off -= 26;
7359 i--;
7360 }
7361 }
7362 if (carry !== 0) {
7363 out = carry.toString(16) + out;
7364 }
7365 while (out.length % padding !== 0) {
7366 out = '0' + out;
7367 }
7368 if (this.negative !== 0) {
7369 out = '-' + out;
7370 }
7371 return out;
7372 }
7373
7374 if (base === (base | 0) && base >= 2 && base <= 36) {
7375 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
7376 var groupSize = groupSizes[base];
7377 // var groupBase = Math.pow(base, groupSize);
7378 var groupBase = groupBases[base];
7379 out = '';
7380 var c = this.clone();
7381 c.negative = 0;
7382 while (!c.isZero()) {
7383 var r = c.modn(groupBase).toString(base);
7384 c = c.idivn(groupBase);
7385
7386 if (!c.isZero()) {
7387 out = zeros[groupSize - r.length] + r + out;
7388 } else {
7389 out = r + out;
7390 }
7391 }
7392 if (this.isZero()) {
7393 out = '0' + out;
7394 }
7395 while (out.length % padding !== 0) {
7396 out = '0' + out;
7397 }
7398 if (this.negative !== 0) {
7399 out = '-' + out;
7400 }
7401 return out;
7402 }
7403
7404 assert(false, 'Base should be between 2 and 36');
7405 };
7406
7407 BN.prototype.toNumber = function toNumber () {
7408 var ret = this.words[0];
7409 if (this.length === 2) {
7410 ret += this.words[1] * 0x4000000;
7411 } else if (this.length === 3 && this.words[2] === 0x01) {
7412 // NOTE: at this stage it is known that the top bit is set
7413 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
7414 } else if (this.length > 2) {
7415 assert(false, 'Number can only safely store up to 53 bits');
7416 }
7417 return (this.negative !== 0) ? -ret : ret;
7418 };
7419
7420 BN.prototype.toJSON = function toJSON () {
7421 return this.toString(16);
7422 };
7423
7424 BN.prototype.toBuffer = function toBuffer (endian, length) {
7425 assert(typeof Buffer !== 'undefined');
7426 return this.toArrayLike(Buffer, endian, length);
7427 };
7428
7429 BN.prototype.toArray = function toArray (endian, length) {
7430 return this.toArrayLike(Array, endian, length);
7431 };
7432
7433 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
7434 var byteLength = this.byteLength();
7435 var reqLength = length || Math.max(1, byteLength);
7436 assert(byteLength <= reqLength, 'byte array longer than desired length');
7437 assert(reqLength > 0, 'Requested array length <= 0');
7438
7439 this.strip();
7440 var littleEndian = endian === 'le';
7441 var res = new ArrayType(reqLength);
7442
7443 var b, i;
7444 var q = this.clone();
7445 if (!littleEndian) {
7446 // Assume big-endian
7447 for (i = 0; i < reqLength - byteLength; i++) {
7448 res[i] = 0;
7449 }
7450
7451 for (i = 0; !q.isZero(); i++) {
7452 b = q.andln(0xff);
7453 q.iushrn(8);
7454
7455 res[reqLength - i - 1] = b;
7456 }
7457 } else {
7458 for (i = 0; !q.isZero(); i++) {
7459 b = q.andln(0xff);
7460 q.iushrn(8);
7461
7462 res[i] = b;
7463 }
7464
7465 for (; i < reqLength; i++) {
7466 res[i] = 0;
7467 }
7468 }
7469
7470 return res;
7471 };
7472
7473 if (Math.clz32) {
7474 BN.prototype._countBits = function _countBits (w) {
7475 return 32 - Math.clz32(w);
7476 };
7477 } else {
7478 BN.prototype._countBits = function _countBits (w) {
7479 var t = w;
7480 var r = 0;
7481 if (t >= 0x1000) {
7482 r += 13;
7483 t >>>= 13;
7484 }
7485 if (t >= 0x40) {
7486 r += 7;
7487 t >>>= 7;
7488 }
7489 if (t >= 0x8) {
7490 r += 4;
7491 t >>>= 4;
7492 }
7493 if (t >= 0x02) {
7494 r += 2;
7495 t >>>= 2;
7496 }
7497 return r + t;
7498 };
7499 }
7500
7501 BN.prototype._zeroBits = function _zeroBits (w) {
7502 // Short-cut
7503 if (w === 0) return 26;
7504
7505 var t = w;
7506 var r = 0;
7507 if ((t & 0x1fff) === 0) {
7508 r += 13;
7509 t >>>= 13;
7510 }
7511 if ((t & 0x7f) === 0) {
7512 r += 7;
7513 t >>>= 7;
7514 }
7515 if ((t & 0xf) === 0) {
7516 r += 4;
7517 t >>>= 4;
7518 }
7519 if ((t & 0x3) === 0) {
7520 r += 2;
7521 t >>>= 2;
7522 }
7523 if ((t & 0x1) === 0) {
7524 r++;
7525 }
7526 return r;
7527 };
7528
7529 // Return number of used bits in a BN
7530 BN.prototype.bitLength = function bitLength () {
7531 var w = this.words[this.length - 1];
7532 var hi = this._countBits(w);
7533 return (this.length - 1) * 26 + hi;
7534 };
7535
7536 function toBitArray (num) {
7537 var w = new Array(num.bitLength());
7538
7539 for (var bit = 0; bit < w.length; bit++) {
7540 var off = (bit / 26) | 0;
7541 var wbit = bit % 26;
7542
7543 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
7544 }
7545
7546 return w;
7547 }
7548
7549 // Number of trailing zero bits
7550 BN.prototype.zeroBits = function zeroBits () {
7551 if (this.isZero()) return 0;
7552
7553 var r = 0;
7554 for (var i = 0; i < this.length; i++) {
7555 var b = this._zeroBits(this.words[i]);
7556 r += b;
7557 if (b !== 26) break;
7558 }
7559 return r;
7560 };
7561
7562 BN.prototype.byteLength = function byteLength () {
7563 return Math.ceil(this.bitLength() / 8);
7564 };
7565
7566 BN.prototype.toTwos = function toTwos (width) {
7567 if (this.negative !== 0) {
7568 return this.abs().inotn(width).iaddn(1);
7569 }
7570 return this.clone();
7571 };
7572
7573 BN.prototype.fromTwos = function fromTwos (width) {
7574 if (this.testn(width - 1)) {
7575 return this.notn(width).iaddn(1).ineg();
7576 }
7577 return this.clone();
7578 };
7579
7580 BN.prototype.isNeg = function isNeg () {
7581 return this.negative !== 0;
7582 };
7583
7584 // Return negative clone of `this`
7585 BN.prototype.neg = function neg () {
7586 return this.clone().ineg();
7587 };
7588
7589 BN.prototype.ineg = function ineg () {
7590 if (!this.isZero()) {
7591 this.negative ^= 1;
7592 }
7593
7594 return this;
7595 };
7596
7597 // Or `num` with `this` in-place
7598 BN.prototype.iuor = function iuor (num) {
7599 while (this.length < num.length) {
7600 this.words[this.length++] = 0;
7601 }
7602
7603 for (var i = 0; i < num.length; i++) {
7604 this.words[i] = this.words[i] | num.words[i];
7605 }
7606
7607 return this.strip();
7608 };
7609
7610 BN.prototype.ior = function ior (num) {
7611 assert((this.negative | num.negative) === 0);
7612 return this.iuor(num);
7613 };
7614
7615 // Or `num` with `this`
7616 BN.prototype.or = function or (num) {
7617 if (this.length > num.length) return this.clone().ior(num);
7618 return num.clone().ior(this);
7619 };
7620
7621 BN.prototype.uor = function uor (num) {
7622 if (this.length > num.length) return this.clone().iuor(num);
7623 return num.clone().iuor(this);
7624 };
7625
7626 // And `num` with `this` in-place
7627 BN.prototype.iuand = function iuand (num) {
7628 // b = min-length(num, this)
7629 var b;
7630 if (this.length > num.length) {
7631 b = num;
7632 } else {
7633 b = this;
7634 }
7635
7636 for (var i = 0; i < b.length; i++) {
7637 this.words[i] = this.words[i] & num.words[i];
7638 }
7639
7640 this.length = b.length;
7641
7642 return this.strip();
7643 };
7644
7645 BN.prototype.iand = function iand (num) {
7646 assert((this.negative | num.negative) === 0);
7647 return this.iuand(num);
7648 };
7649
7650 // And `num` with `this`
7651 BN.prototype.and = function and (num) {
7652 if (this.length > num.length) return this.clone().iand(num);
7653 return num.clone().iand(this);
7654 };
7655
7656 BN.prototype.uand = function uand (num) {
7657 if (this.length > num.length) return this.clone().iuand(num);
7658 return num.clone().iuand(this);
7659 };
7660
7661 // Xor `num` with `this` in-place
7662 BN.prototype.iuxor = function iuxor (num) {
7663 // a.length > b.length
7664 var a;
7665 var b;
7666 if (this.length > num.length) {
7667 a = this;
7668 b = num;
7669 } else {
7670 a = num;
7671 b = this;
7672 }
7673
7674 for (var i = 0; i < b.length; i++) {
7675 this.words[i] = a.words[i] ^ b.words[i];
7676 }
7677
7678 if (this !== a) {
7679 for (; i < a.length; i++) {
7680 this.words[i] = a.words[i];
7681 }
7682 }
7683
7684 this.length = a.length;
7685
7686 return this.strip();
7687 };
7688
7689 BN.prototype.ixor = function ixor (num) {
7690 assert((this.negative | num.negative) === 0);
7691 return this.iuxor(num);
7692 };
7693
7694 // Xor `num` with `this`
7695 BN.prototype.xor = function xor (num) {
7696 if (this.length > num.length) return this.clone().ixor(num);
7697 return num.clone().ixor(this);
7698 };
7699
7700 BN.prototype.uxor = function uxor (num) {
7701 if (this.length > num.length) return this.clone().iuxor(num);
7702 return num.clone().iuxor(this);
7703 };
7704
7705 // Not ``this`` with ``width`` bitwidth
7706 BN.prototype.inotn = function inotn (width) {
7707 assert(typeof width === 'number' && width >= 0);
7708
7709 var bytesNeeded = Math.ceil(width / 26) | 0;
7710 var bitsLeft = width % 26;
7711
7712 // Extend the buffer with leading zeroes
7713 this._expand(bytesNeeded);
7714
7715 if (bitsLeft > 0) {
7716 bytesNeeded--;
7717 }
7718
7719 // Handle complete words
7720 for (var i = 0; i < bytesNeeded; i++) {
7721 this.words[i] = ~this.words[i] & 0x3ffffff;
7722 }
7723
7724 // Handle the residue
7725 if (bitsLeft > 0) {
7726 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
7727 }
7728
7729 // And remove leading zeroes
7730 return this.strip();
7731 };
7732
7733 BN.prototype.notn = function notn (width) {
7734 return this.clone().inotn(width);
7735 };
7736
7737 // Set `bit` of `this`
7738 BN.prototype.setn = function setn (bit, val) {
7739 assert(typeof bit === 'number' && bit >= 0);
7740
7741 var off = (bit / 26) | 0;
7742 var wbit = bit % 26;
7743
7744 this._expand(off + 1);
7745
7746 if (val) {
7747 this.words[off] = this.words[off] | (1 << wbit);
7748 } else {
7749 this.words[off] = this.words[off] & ~(1 << wbit);
7750 }
7751
7752 return this.strip();
7753 };
7754
7755 // Add `num` to `this` in-place
7756 BN.prototype.iadd = function iadd (num) {
7757 var r;
7758
7759 // negative + positive
7760 if (this.negative !== 0 && num.negative === 0) {
7761 this.negative = 0;
7762 r = this.isub(num);
7763 this.negative ^= 1;
7764 return this._normSign();
7765
7766 // positive + negative
7767 } else if (this.negative === 0 && num.negative !== 0) {
7768 num.negative = 0;
7769 r = this.isub(num);
7770 num.negative = 1;
7771 return r._normSign();
7772 }
7773
7774 // a.length > b.length
7775 var a, b;
7776 if (this.length > num.length) {
7777 a = this;
7778 b = num;
7779 } else {
7780 a = num;
7781 b = this;
7782 }
7783
7784 var carry = 0;
7785 for (var i = 0; i < b.length; i++) {
7786 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
7787 this.words[i] = r & 0x3ffffff;
7788 carry = r >>> 26;
7789 }
7790 for (; carry !== 0 && i < a.length; i++) {
7791 r = (a.words[i] | 0) + carry;
7792 this.words[i] = r & 0x3ffffff;
7793 carry = r >>> 26;
7794 }
7795
7796 this.length = a.length;
7797 if (carry !== 0) {
7798 this.words[this.length] = carry;
7799 this.length++;
7800 // Copy the rest of the words
7801 } else if (a !== this) {
7802 for (; i < a.length; i++) {
7803 this.words[i] = a.words[i];
7804 }
7805 }
7806
7807 return this;
7808 };
7809
7810 // Add `num` to `this`
7811 BN.prototype.add = function add (num) {
7812 var res;
7813 if (num.negative !== 0 && this.negative === 0) {
7814 num.negative = 0;
7815 res = this.sub(num);
7816 num.negative ^= 1;
7817 return res;
7818 } else if (num.negative === 0 && this.negative !== 0) {
7819 this.negative = 0;
7820 res = num.sub(this);
7821 this.negative = 1;
7822 return res;
7823 }
7824
7825 if (this.length > num.length) return this.clone().iadd(num);
7826
7827 return num.clone().iadd(this);
7828 };
7829
7830 // Subtract `num` from `this` in-place
7831 BN.prototype.isub = function isub (num) {
7832 // this - (-num) = this + num
7833 if (num.negative !== 0) {
7834 num.negative = 0;
7835 var r = this.iadd(num);
7836 num.negative = 1;
7837 return r._normSign();
7838
7839 // -this - num = -(this + num)
7840 } else if (this.negative !== 0) {
7841 this.negative = 0;
7842 this.iadd(num);
7843 this.negative = 1;
7844 return this._normSign();
7845 }
7846
7847 // At this point both numbers are positive
7848 var cmp = this.cmp(num);
7849
7850 // Optimization - zeroify
7851 if (cmp === 0) {
7852 this.negative = 0;
7853 this.length = 1;
7854 this.words[0] = 0;
7855 return this;
7856 }
7857
7858 // a > b
7859 var a, b;
7860 if (cmp > 0) {
7861 a = this;
7862 b = num;
7863 } else {
7864 a = num;
7865 b = this;
7866 }
7867
7868 var carry = 0;
7869 for (var i = 0; i < b.length; i++) {
7870 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
7871 carry = r >> 26;
7872 this.words[i] = r & 0x3ffffff;
7873 }
7874 for (; carry !== 0 && i < a.length; i++) {
7875 r = (a.words[i] | 0) + carry;
7876 carry = r >> 26;
7877 this.words[i] = r & 0x3ffffff;
7878 }
7879
7880 // Copy rest of the words
7881 if (carry === 0 && i < a.length && a !== this) {
7882 for (; i < a.length; i++) {
7883 this.words[i] = a.words[i];
7884 }
7885 }
7886
7887 this.length = Math.max(this.length, i);
7888
7889 if (a !== this) {
7890 this.negative = 1;
7891 }
7892
7893 return this.strip();
7894 };
7895
7896 // Subtract `num` from `this`
7897 BN.prototype.sub = function sub (num) {
7898 return this.clone().isub(num);
7899 };
7900
7901 function smallMulTo (self, num, out) {
7902 out.negative = num.negative ^ self.negative;
7903 var len = (self.length + num.length) | 0;
7904 out.length = len;
7905 len = (len - 1) | 0;
7906
7907 // Peel one iteration (compiler can't do it, because of code complexity)
7908 var a = self.words[0] | 0;
7909 var b = num.words[0] | 0;
7910 var r = a * b;
7911
7912 var lo = r & 0x3ffffff;
7913 var carry = (r / 0x4000000) | 0;
7914 out.words[0] = lo;
7915
7916 for (var k = 1; k < len; k++) {
7917 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
7918 // note that ncarry could be >= 0x3ffffff
7919 var ncarry = carry >>> 26;
7920 var rword = carry & 0x3ffffff;
7921 var maxJ = Math.min(k, num.length - 1);
7922 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
7923 var i = (k - j) | 0;
7924 a = self.words[i] | 0;
7925 b = num.words[j] | 0;
7926 r = a * b + rword;
7927 ncarry += (r / 0x4000000) | 0;
7928 rword = r & 0x3ffffff;
7929 }
7930 out.words[k] = rword | 0;
7931 carry = ncarry | 0;
7932 }
7933 if (carry !== 0) {
7934 out.words[k] = carry | 0;
7935 } else {
7936 out.length--;
7937 }
7938
7939 return out.strip();
7940 }
7941
7942 // TODO(indutny): it may be reasonable to omit it for users who don't need
7943 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
7944 // multiplication (like elliptic secp256k1).
7945 var comb10MulTo = function comb10MulTo (self, num, out) {
7946 var a = self.words;
7947 var b = num.words;
7948 var o = out.words;
7949 var c = 0;
7950 var lo;
7951 var mid;
7952 var hi;
7953 var a0 = a[0] | 0;
7954 var al0 = a0 & 0x1fff;
7955 var ah0 = a0 >>> 13;
7956 var a1 = a[1] | 0;
7957 var al1 = a1 & 0x1fff;
7958 var ah1 = a1 >>> 13;
7959 var a2 = a[2] | 0;
7960 var al2 = a2 & 0x1fff;
7961 var ah2 = a2 >>> 13;
7962 var a3 = a[3] | 0;
7963 var al3 = a3 & 0x1fff;
7964 var ah3 = a3 >>> 13;
7965 var a4 = a[4] | 0;
7966 var al4 = a4 & 0x1fff;
7967 var ah4 = a4 >>> 13;
7968 var a5 = a[5] | 0;
7969 var al5 = a5 & 0x1fff;
7970 var ah5 = a5 >>> 13;
7971 var a6 = a[6] | 0;
7972 var al6 = a6 & 0x1fff;
7973 var ah6 = a6 >>> 13;
7974 var a7 = a[7] | 0;
7975 var al7 = a7 & 0x1fff;
7976 var ah7 = a7 >>> 13;
7977 var a8 = a[8] | 0;
7978 var al8 = a8 & 0x1fff;
7979 var ah8 = a8 >>> 13;
7980 var a9 = a[9] | 0;
7981 var al9 = a9 & 0x1fff;
7982 var ah9 = a9 >>> 13;
7983 var b0 = b[0] | 0;
7984 var bl0 = b0 & 0x1fff;
7985 var bh0 = b0 >>> 13;
7986 var b1 = b[1] | 0;
7987 var bl1 = b1 & 0x1fff;
7988 var bh1 = b1 >>> 13;
7989 var b2 = b[2] | 0;
7990 var bl2 = b2 & 0x1fff;
7991 var bh2 = b2 >>> 13;
7992 var b3 = b[3] | 0;
7993 var bl3 = b3 & 0x1fff;
7994 var bh3 = b3 >>> 13;
7995 var b4 = b[4] | 0;
7996 var bl4 = b4 & 0x1fff;
7997 var bh4 = b4 >>> 13;
7998 var b5 = b[5] | 0;
7999 var bl5 = b5 & 0x1fff;
8000 var bh5 = b5 >>> 13;
8001 var b6 = b[6] | 0;
8002 var bl6 = b6 & 0x1fff;
8003 var bh6 = b6 >>> 13;
8004 var b7 = b[7] | 0;
8005 var bl7 = b7 & 0x1fff;
8006 var bh7 = b7 >>> 13;
8007 var b8 = b[8] | 0;
8008 var bl8 = b8 & 0x1fff;
8009 var bh8 = b8 >>> 13;
8010 var b9 = b[9] | 0;
8011 var bl9 = b9 & 0x1fff;
8012 var bh9 = b9 >>> 13;
8013
8014 out.negative = self.negative ^ num.negative;
8015 out.length = 19;
8016 /* k = 0 */
8017 lo = Math.imul(al0, bl0);
8018 mid = Math.imul(al0, bh0);
8019 mid = (mid + Math.imul(ah0, bl0)) | 0;
8020 hi = Math.imul(ah0, bh0);
8021 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8022 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
8023 w0 &= 0x3ffffff;
8024 /* k = 1 */
8025 lo = Math.imul(al1, bl0);
8026 mid = Math.imul(al1, bh0);
8027 mid = (mid + Math.imul(ah1, bl0)) | 0;
8028 hi = Math.imul(ah1, bh0);
8029 lo = (lo + Math.imul(al0, bl1)) | 0;
8030 mid = (mid + Math.imul(al0, bh1)) | 0;
8031 mid = (mid + Math.imul(ah0, bl1)) | 0;
8032 hi = (hi + Math.imul(ah0, bh1)) | 0;
8033 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8034 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
8035 w1 &= 0x3ffffff;
8036 /* k = 2 */
8037 lo = Math.imul(al2, bl0);
8038 mid = Math.imul(al2, bh0);
8039 mid = (mid + Math.imul(ah2, bl0)) | 0;
8040 hi = Math.imul(ah2, bh0);
8041 lo = (lo + Math.imul(al1, bl1)) | 0;
8042 mid = (mid + Math.imul(al1, bh1)) | 0;
8043 mid = (mid + Math.imul(ah1, bl1)) | 0;
8044 hi = (hi + Math.imul(ah1, bh1)) | 0;
8045 lo = (lo + Math.imul(al0, bl2)) | 0;
8046 mid = (mid + Math.imul(al0, bh2)) | 0;
8047 mid = (mid + Math.imul(ah0, bl2)) | 0;
8048 hi = (hi + Math.imul(ah0, bh2)) | 0;
8049 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8050 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
8051 w2 &= 0x3ffffff;
8052 /* k = 3 */
8053 lo = Math.imul(al3, bl0);
8054 mid = Math.imul(al3, bh0);
8055 mid = (mid + Math.imul(ah3, bl0)) | 0;
8056 hi = Math.imul(ah3, bh0);
8057 lo = (lo + Math.imul(al2, bl1)) | 0;
8058 mid = (mid + Math.imul(al2, bh1)) | 0;
8059 mid = (mid + Math.imul(ah2, bl1)) | 0;
8060 hi = (hi + Math.imul(ah2, bh1)) | 0;
8061 lo = (lo + Math.imul(al1, bl2)) | 0;
8062 mid = (mid + Math.imul(al1, bh2)) | 0;
8063 mid = (mid + Math.imul(ah1, bl2)) | 0;
8064 hi = (hi + Math.imul(ah1, bh2)) | 0;
8065 lo = (lo + Math.imul(al0, bl3)) | 0;
8066 mid = (mid + Math.imul(al0, bh3)) | 0;
8067 mid = (mid + Math.imul(ah0, bl3)) | 0;
8068 hi = (hi + Math.imul(ah0, bh3)) | 0;
8069 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8070 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
8071 w3 &= 0x3ffffff;
8072 /* k = 4 */
8073 lo = Math.imul(al4, bl0);
8074 mid = Math.imul(al4, bh0);
8075 mid = (mid + Math.imul(ah4, bl0)) | 0;
8076 hi = Math.imul(ah4, bh0);
8077 lo = (lo + Math.imul(al3, bl1)) | 0;
8078 mid = (mid + Math.imul(al3, bh1)) | 0;
8079 mid = (mid + Math.imul(ah3, bl1)) | 0;
8080 hi = (hi + Math.imul(ah3, bh1)) | 0;
8081 lo = (lo + Math.imul(al2, bl2)) | 0;
8082 mid = (mid + Math.imul(al2, bh2)) | 0;
8083 mid = (mid + Math.imul(ah2, bl2)) | 0;
8084 hi = (hi + Math.imul(ah2, bh2)) | 0;
8085 lo = (lo + Math.imul(al1, bl3)) | 0;
8086 mid = (mid + Math.imul(al1, bh3)) | 0;
8087 mid = (mid + Math.imul(ah1, bl3)) | 0;
8088 hi = (hi + Math.imul(ah1, bh3)) | 0;
8089 lo = (lo + Math.imul(al0, bl4)) | 0;
8090 mid = (mid + Math.imul(al0, bh4)) | 0;
8091 mid = (mid + Math.imul(ah0, bl4)) | 0;
8092 hi = (hi + Math.imul(ah0, bh4)) | 0;
8093 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8094 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
8095 w4 &= 0x3ffffff;
8096 /* k = 5 */
8097 lo = Math.imul(al5, bl0);
8098 mid = Math.imul(al5, bh0);
8099 mid = (mid + Math.imul(ah5, bl0)) | 0;
8100 hi = Math.imul(ah5, bh0);
8101 lo = (lo + Math.imul(al4, bl1)) | 0;
8102 mid = (mid + Math.imul(al4, bh1)) | 0;
8103 mid = (mid + Math.imul(ah4, bl1)) | 0;
8104 hi = (hi + Math.imul(ah4, bh1)) | 0;
8105 lo = (lo + Math.imul(al3, bl2)) | 0;
8106 mid = (mid + Math.imul(al3, bh2)) | 0;
8107 mid = (mid + Math.imul(ah3, bl2)) | 0;
8108 hi = (hi + Math.imul(ah3, bh2)) | 0;
8109 lo = (lo + Math.imul(al2, bl3)) | 0;
8110 mid = (mid + Math.imul(al2, bh3)) | 0;
8111 mid = (mid + Math.imul(ah2, bl3)) | 0;
8112 hi = (hi + Math.imul(ah2, bh3)) | 0;
8113 lo = (lo + Math.imul(al1, bl4)) | 0;
8114 mid = (mid + Math.imul(al1, bh4)) | 0;
8115 mid = (mid + Math.imul(ah1, bl4)) | 0;
8116 hi = (hi + Math.imul(ah1, bh4)) | 0;
8117 lo = (lo + Math.imul(al0, bl5)) | 0;
8118 mid = (mid + Math.imul(al0, bh5)) | 0;
8119 mid = (mid + Math.imul(ah0, bl5)) | 0;
8120 hi = (hi + Math.imul(ah0, bh5)) | 0;
8121 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8122 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
8123 w5 &= 0x3ffffff;
8124 /* k = 6 */
8125 lo = Math.imul(al6, bl0);
8126 mid = Math.imul(al6, bh0);
8127 mid = (mid + Math.imul(ah6, bl0)) | 0;
8128 hi = Math.imul(ah6, bh0);
8129 lo = (lo + Math.imul(al5, bl1)) | 0;
8130 mid = (mid + Math.imul(al5, bh1)) | 0;
8131 mid = (mid + Math.imul(ah5, bl1)) | 0;
8132 hi = (hi + Math.imul(ah5, bh1)) | 0;
8133 lo = (lo + Math.imul(al4, bl2)) | 0;
8134 mid = (mid + Math.imul(al4, bh2)) | 0;
8135 mid = (mid + Math.imul(ah4, bl2)) | 0;
8136 hi = (hi + Math.imul(ah4, bh2)) | 0;
8137 lo = (lo + Math.imul(al3, bl3)) | 0;
8138 mid = (mid + Math.imul(al3, bh3)) | 0;
8139 mid = (mid + Math.imul(ah3, bl3)) | 0;
8140 hi = (hi + Math.imul(ah3, bh3)) | 0;
8141 lo = (lo + Math.imul(al2, bl4)) | 0;
8142 mid = (mid + Math.imul(al2, bh4)) | 0;
8143 mid = (mid + Math.imul(ah2, bl4)) | 0;
8144 hi = (hi + Math.imul(ah2, bh4)) | 0;
8145 lo = (lo + Math.imul(al1, bl5)) | 0;
8146 mid = (mid + Math.imul(al1, bh5)) | 0;
8147 mid = (mid + Math.imul(ah1, bl5)) | 0;
8148 hi = (hi + Math.imul(ah1, bh5)) | 0;
8149 lo = (lo + Math.imul(al0, bl6)) | 0;
8150 mid = (mid + Math.imul(al0, bh6)) | 0;
8151 mid = (mid + Math.imul(ah0, bl6)) | 0;
8152 hi = (hi + Math.imul(ah0, bh6)) | 0;
8153 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8154 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
8155 w6 &= 0x3ffffff;
8156 /* k = 7 */
8157 lo = Math.imul(al7, bl0);
8158 mid = Math.imul(al7, bh0);
8159 mid = (mid + Math.imul(ah7, bl0)) | 0;
8160 hi = Math.imul(ah7, bh0);
8161 lo = (lo + Math.imul(al6, bl1)) | 0;
8162 mid = (mid + Math.imul(al6, bh1)) | 0;
8163 mid = (mid + Math.imul(ah6, bl1)) | 0;
8164 hi = (hi + Math.imul(ah6, bh1)) | 0;
8165 lo = (lo + Math.imul(al5, bl2)) | 0;
8166 mid = (mid + Math.imul(al5, bh2)) | 0;
8167 mid = (mid + Math.imul(ah5, bl2)) | 0;
8168 hi = (hi + Math.imul(ah5, bh2)) | 0;
8169 lo = (lo + Math.imul(al4, bl3)) | 0;
8170 mid = (mid + Math.imul(al4, bh3)) | 0;
8171 mid = (mid + Math.imul(ah4, bl3)) | 0;
8172 hi = (hi + Math.imul(ah4, bh3)) | 0;
8173 lo = (lo + Math.imul(al3, bl4)) | 0;
8174 mid = (mid + Math.imul(al3, bh4)) | 0;
8175 mid = (mid + Math.imul(ah3, bl4)) | 0;
8176 hi = (hi + Math.imul(ah3, bh4)) | 0;
8177 lo = (lo + Math.imul(al2, bl5)) | 0;
8178 mid = (mid + Math.imul(al2, bh5)) | 0;
8179 mid = (mid + Math.imul(ah2, bl5)) | 0;
8180 hi = (hi + Math.imul(ah2, bh5)) | 0;
8181 lo = (lo + Math.imul(al1, bl6)) | 0;
8182 mid = (mid + Math.imul(al1, bh6)) | 0;
8183 mid = (mid + Math.imul(ah1, bl6)) | 0;
8184 hi = (hi + Math.imul(ah1, bh6)) | 0;
8185 lo = (lo + Math.imul(al0, bl7)) | 0;
8186 mid = (mid + Math.imul(al0, bh7)) | 0;
8187 mid = (mid + Math.imul(ah0, bl7)) | 0;
8188 hi = (hi + Math.imul(ah0, bh7)) | 0;
8189 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8190 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
8191 w7 &= 0x3ffffff;
8192 /* k = 8 */
8193 lo = Math.imul(al8, bl0);
8194 mid = Math.imul(al8, bh0);
8195 mid = (mid + Math.imul(ah8, bl0)) | 0;
8196 hi = Math.imul(ah8, bh0);
8197 lo = (lo + Math.imul(al7, bl1)) | 0;
8198 mid = (mid + Math.imul(al7, bh1)) | 0;
8199 mid = (mid + Math.imul(ah7, bl1)) | 0;
8200 hi = (hi + Math.imul(ah7, bh1)) | 0;
8201 lo = (lo + Math.imul(al6, bl2)) | 0;
8202 mid = (mid + Math.imul(al6, bh2)) | 0;
8203 mid = (mid + Math.imul(ah6, bl2)) | 0;
8204 hi = (hi + Math.imul(ah6, bh2)) | 0;
8205 lo = (lo + Math.imul(al5, bl3)) | 0;
8206 mid = (mid + Math.imul(al5, bh3)) | 0;
8207 mid = (mid + Math.imul(ah5, bl3)) | 0;
8208 hi = (hi + Math.imul(ah5, bh3)) | 0;
8209 lo = (lo + Math.imul(al4, bl4)) | 0;
8210 mid = (mid + Math.imul(al4, bh4)) | 0;
8211 mid = (mid + Math.imul(ah4, bl4)) | 0;
8212 hi = (hi + Math.imul(ah4, bh4)) | 0;
8213 lo = (lo + Math.imul(al3, bl5)) | 0;
8214 mid = (mid + Math.imul(al3, bh5)) | 0;
8215 mid = (mid + Math.imul(ah3, bl5)) | 0;
8216 hi = (hi + Math.imul(ah3, bh5)) | 0;
8217 lo = (lo + Math.imul(al2, bl6)) | 0;
8218 mid = (mid + Math.imul(al2, bh6)) | 0;
8219 mid = (mid + Math.imul(ah2, bl6)) | 0;
8220 hi = (hi + Math.imul(ah2, bh6)) | 0;
8221 lo = (lo + Math.imul(al1, bl7)) | 0;
8222 mid = (mid + Math.imul(al1, bh7)) | 0;
8223 mid = (mid + Math.imul(ah1, bl7)) | 0;
8224 hi = (hi + Math.imul(ah1, bh7)) | 0;
8225 lo = (lo + Math.imul(al0, bl8)) | 0;
8226 mid = (mid + Math.imul(al0, bh8)) | 0;
8227 mid = (mid + Math.imul(ah0, bl8)) | 0;
8228 hi = (hi + Math.imul(ah0, bh8)) | 0;
8229 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8230 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
8231 w8 &= 0x3ffffff;
8232 /* k = 9 */
8233 lo = Math.imul(al9, bl0);
8234 mid = Math.imul(al9, bh0);
8235 mid = (mid + Math.imul(ah9, bl0)) | 0;
8236 hi = Math.imul(ah9, bh0);
8237 lo = (lo + Math.imul(al8, bl1)) | 0;
8238 mid = (mid + Math.imul(al8, bh1)) | 0;
8239 mid = (mid + Math.imul(ah8, bl1)) | 0;
8240 hi = (hi + Math.imul(ah8, bh1)) | 0;
8241 lo = (lo + Math.imul(al7, bl2)) | 0;
8242 mid = (mid + Math.imul(al7, bh2)) | 0;
8243 mid = (mid + Math.imul(ah7, bl2)) | 0;
8244 hi = (hi + Math.imul(ah7, bh2)) | 0;
8245 lo = (lo + Math.imul(al6, bl3)) | 0;
8246 mid = (mid + Math.imul(al6, bh3)) | 0;
8247 mid = (mid + Math.imul(ah6, bl3)) | 0;
8248 hi = (hi + Math.imul(ah6, bh3)) | 0;
8249 lo = (lo + Math.imul(al5, bl4)) | 0;
8250 mid = (mid + Math.imul(al5, bh4)) | 0;
8251 mid = (mid + Math.imul(ah5, bl4)) | 0;
8252 hi = (hi + Math.imul(ah5, bh4)) | 0;
8253 lo = (lo + Math.imul(al4, bl5)) | 0;
8254 mid = (mid + Math.imul(al4, bh5)) | 0;
8255 mid = (mid + Math.imul(ah4, bl5)) | 0;
8256 hi = (hi + Math.imul(ah4, bh5)) | 0;
8257 lo = (lo + Math.imul(al3, bl6)) | 0;
8258 mid = (mid + Math.imul(al3, bh6)) | 0;
8259 mid = (mid + Math.imul(ah3, bl6)) | 0;
8260 hi = (hi + Math.imul(ah3, bh6)) | 0;
8261 lo = (lo + Math.imul(al2, bl7)) | 0;
8262 mid = (mid + Math.imul(al2, bh7)) | 0;
8263 mid = (mid + Math.imul(ah2, bl7)) | 0;
8264 hi = (hi + Math.imul(ah2, bh7)) | 0;
8265 lo = (lo + Math.imul(al1, bl8)) | 0;
8266 mid = (mid + Math.imul(al1, bh8)) | 0;
8267 mid = (mid + Math.imul(ah1, bl8)) | 0;
8268 hi = (hi + Math.imul(ah1, bh8)) | 0;
8269 lo = (lo + Math.imul(al0, bl9)) | 0;
8270 mid = (mid + Math.imul(al0, bh9)) | 0;
8271 mid = (mid + Math.imul(ah0, bl9)) | 0;
8272 hi = (hi + Math.imul(ah0, bh9)) | 0;
8273 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8274 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
8275 w9 &= 0x3ffffff;
8276 /* k = 10 */
8277 lo = Math.imul(al9, bl1);
8278 mid = Math.imul(al9, bh1);
8279 mid = (mid + Math.imul(ah9, bl1)) | 0;
8280 hi = Math.imul(ah9, bh1);
8281 lo = (lo + Math.imul(al8, bl2)) | 0;
8282 mid = (mid + Math.imul(al8, bh2)) | 0;
8283 mid = (mid + Math.imul(ah8, bl2)) | 0;
8284 hi = (hi + Math.imul(ah8, bh2)) | 0;
8285 lo = (lo + Math.imul(al7, bl3)) | 0;
8286 mid = (mid + Math.imul(al7, bh3)) | 0;
8287 mid = (mid + Math.imul(ah7, bl3)) | 0;
8288 hi = (hi + Math.imul(ah7, bh3)) | 0;
8289 lo = (lo + Math.imul(al6, bl4)) | 0;
8290 mid = (mid + Math.imul(al6, bh4)) | 0;
8291 mid = (mid + Math.imul(ah6, bl4)) | 0;
8292 hi = (hi + Math.imul(ah6, bh4)) | 0;
8293 lo = (lo + Math.imul(al5, bl5)) | 0;
8294 mid = (mid + Math.imul(al5, bh5)) | 0;
8295 mid = (mid + Math.imul(ah5, bl5)) | 0;
8296 hi = (hi + Math.imul(ah5, bh5)) | 0;
8297 lo = (lo + Math.imul(al4, bl6)) | 0;
8298 mid = (mid + Math.imul(al4, bh6)) | 0;
8299 mid = (mid + Math.imul(ah4, bl6)) | 0;
8300 hi = (hi + Math.imul(ah4, bh6)) | 0;
8301 lo = (lo + Math.imul(al3, bl7)) | 0;
8302 mid = (mid + Math.imul(al3, bh7)) | 0;
8303 mid = (mid + Math.imul(ah3, bl7)) | 0;
8304 hi = (hi + Math.imul(ah3, bh7)) | 0;
8305 lo = (lo + Math.imul(al2, bl8)) | 0;
8306 mid = (mid + Math.imul(al2, bh8)) | 0;
8307 mid = (mid + Math.imul(ah2, bl8)) | 0;
8308 hi = (hi + Math.imul(ah2, bh8)) | 0;
8309 lo = (lo + Math.imul(al1, bl9)) | 0;
8310 mid = (mid + Math.imul(al1, bh9)) | 0;
8311 mid = (mid + Math.imul(ah1, bl9)) | 0;
8312 hi = (hi + Math.imul(ah1, bh9)) | 0;
8313 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8314 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
8315 w10 &= 0x3ffffff;
8316 /* k = 11 */
8317 lo = Math.imul(al9, bl2);
8318 mid = Math.imul(al9, bh2);
8319 mid = (mid + Math.imul(ah9, bl2)) | 0;
8320 hi = Math.imul(ah9, bh2);
8321 lo = (lo + Math.imul(al8, bl3)) | 0;
8322 mid = (mid + Math.imul(al8, bh3)) | 0;
8323 mid = (mid + Math.imul(ah8, bl3)) | 0;
8324 hi = (hi + Math.imul(ah8, bh3)) | 0;
8325 lo = (lo + Math.imul(al7, bl4)) | 0;
8326 mid = (mid + Math.imul(al7, bh4)) | 0;
8327 mid = (mid + Math.imul(ah7, bl4)) | 0;
8328 hi = (hi + Math.imul(ah7, bh4)) | 0;
8329 lo = (lo + Math.imul(al6, bl5)) | 0;
8330 mid = (mid + Math.imul(al6, bh5)) | 0;
8331 mid = (mid + Math.imul(ah6, bl5)) | 0;
8332 hi = (hi + Math.imul(ah6, bh5)) | 0;
8333 lo = (lo + Math.imul(al5, bl6)) | 0;
8334 mid = (mid + Math.imul(al5, bh6)) | 0;
8335 mid = (mid + Math.imul(ah5, bl6)) | 0;
8336 hi = (hi + Math.imul(ah5, bh6)) | 0;
8337 lo = (lo + Math.imul(al4, bl7)) | 0;
8338 mid = (mid + Math.imul(al4, bh7)) | 0;
8339 mid = (mid + Math.imul(ah4, bl7)) | 0;
8340 hi = (hi + Math.imul(ah4, bh7)) | 0;
8341 lo = (lo + Math.imul(al3, bl8)) | 0;
8342 mid = (mid + Math.imul(al3, bh8)) | 0;
8343 mid = (mid + Math.imul(ah3, bl8)) | 0;
8344 hi = (hi + Math.imul(ah3, bh8)) | 0;
8345 lo = (lo + Math.imul(al2, bl9)) | 0;
8346 mid = (mid + Math.imul(al2, bh9)) | 0;
8347 mid = (mid + Math.imul(ah2, bl9)) | 0;
8348 hi = (hi + Math.imul(ah2, bh9)) | 0;
8349 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8350 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
8351 w11 &= 0x3ffffff;
8352 /* k = 12 */
8353 lo = Math.imul(al9, bl3);
8354 mid = Math.imul(al9, bh3);
8355 mid = (mid + Math.imul(ah9, bl3)) | 0;
8356 hi = Math.imul(ah9, bh3);
8357 lo = (lo + Math.imul(al8, bl4)) | 0;
8358 mid = (mid + Math.imul(al8, bh4)) | 0;
8359 mid = (mid + Math.imul(ah8, bl4)) | 0;
8360 hi = (hi + Math.imul(ah8, bh4)) | 0;
8361 lo = (lo + Math.imul(al7, bl5)) | 0;
8362 mid = (mid + Math.imul(al7, bh5)) | 0;
8363 mid = (mid + Math.imul(ah7, bl5)) | 0;
8364 hi = (hi + Math.imul(ah7, bh5)) | 0;
8365 lo = (lo + Math.imul(al6, bl6)) | 0;
8366 mid = (mid + Math.imul(al6, bh6)) | 0;
8367 mid = (mid + Math.imul(ah6, bl6)) | 0;
8368 hi = (hi + Math.imul(ah6, bh6)) | 0;
8369 lo = (lo + Math.imul(al5, bl7)) | 0;
8370 mid = (mid + Math.imul(al5, bh7)) | 0;
8371 mid = (mid + Math.imul(ah5, bl7)) | 0;
8372 hi = (hi + Math.imul(ah5, bh7)) | 0;
8373 lo = (lo + Math.imul(al4, bl8)) | 0;
8374 mid = (mid + Math.imul(al4, bh8)) | 0;
8375 mid = (mid + Math.imul(ah4, bl8)) | 0;
8376 hi = (hi + Math.imul(ah4, bh8)) | 0;
8377 lo = (lo + Math.imul(al3, bl9)) | 0;
8378 mid = (mid + Math.imul(al3, bh9)) | 0;
8379 mid = (mid + Math.imul(ah3, bl9)) | 0;
8380 hi = (hi + Math.imul(ah3, bh9)) | 0;
8381 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8382 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
8383 w12 &= 0x3ffffff;
8384 /* k = 13 */
8385 lo = Math.imul(al9, bl4);
8386 mid = Math.imul(al9, bh4);
8387 mid = (mid + Math.imul(ah9, bl4)) | 0;
8388 hi = Math.imul(ah9, bh4);
8389 lo = (lo + Math.imul(al8, bl5)) | 0;
8390 mid = (mid + Math.imul(al8, bh5)) | 0;
8391 mid = (mid + Math.imul(ah8, bl5)) | 0;
8392 hi = (hi + Math.imul(ah8, bh5)) | 0;
8393 lo = (lo + Math.imul(al7, bl6)) | 0;
8394 mid = (mid + Math.imul(al7, bh6)) | 0;
8395 mid = (mid + Math.imul(ah7, bl6)) | 0;
8396 hi = (hi + Math.imul(ah7, bh6)) | 0;
8397 lo = (lo + Math.imul(al6, bl7)) | 0;
8398 mid = (mid + Math.imul(al6, bh7)) | 0;
8399 mid = (mid + Math.imul(ah6, bl7)) | 0;
8400 hi = (hi + Math.imul(ah6, bh7)) | 0;
8401 lo = (lo + Math.imul(al5, bl8)) | 0;
8402 mid = (mid + Math.imul(al5, bh8)) | 0;
8403 mid = (mid + Math.imul(ah5, bl8)) | 0;
8404 hi = (hi + Math.imul(ah5, bh8)) | 0;
8405 lo = (lo + Math.imul(al4, bl9)) | 0;
8406 mid = (mid + Math.imul(al4, bh9)) | 0;
8407 mid = (mid + Math.imul(ah4, bl9)) | 0;
8408 hi = (hi + Math.imul(ah4, bh9)) | 0;
8409 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8410 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
8411 w13 &= 0x3ffffff;
8412 /* k = 14 */
8413 lo = Math.imul(al9, bl5);
8414 mid = Math.imul(al9, bh5);
8415 mid = (mid + Math.imul(ah9, bl5)) | 0;
8416 hi = Math.imul(ah9, bh5);
8417 lo = (lo + Math.imul(al8, bl6)) | 0;
8418 mid = (mid + Math.imul(al8, bh6)) | 0;
8419 mid = (mid + Math.imul(ah8, bl6)) | 0;
8420 hi = (hi + Math.imul(ah8, bh6)) | 0;
8421 lo = (lo + Math.imul(al7, bl7)) | 0;
8422 mid = (mid + Math.imul(al7, bh7)) | 0;
8423 mid = (mid + Math.imul(ah7, bl7)) | 0;
8424 hi = (hi + Math.imul(ah7, bh7)) | 0;
8425 lo = (lo + Math.imul(al6, bl8)) | 0;
8426 mid = (mid + Math.imul(al6, bh8)) | 0;
8427 mid = (mid + Math.imul(ah6, bl8)) | 0;
8428 hi = (hi + Math.imul(ah6, bh8)) | 0;
8429 lo = (lo + Math.imul(al5, bl9)) | 0;
8430 mid = (mid + Math.imul(al5, bh9)) | 0;
8431 mid = (mid + Math.imul(ah5, bl9)) | 0;
8432 hi = (hi + Math.imul(ah5, bh9)) | 0;
8433 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8434 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
8435 w14 &= 0x3ffffff;
8436 /* k = 15 */
8437 lo = Math.imul(al9, bl6);
8438 mid = Math.imul(al9, bh6);
8439 mid = (mid + Math.imul(ah9, bl6)) | 0;
8440 hi = Math.imul(ah9, bh6);
8441 lo = (lo + Math.imul(al8, bl7)) | 0;
8442 mid = (mid + Math.imul(al8, bh7)) | 0;
8443 mid = (mid + Math.imul(ah8, bl7)) | 0;
8444 hi = (hi + Math.imul(ah8, bh7)) | 0;
8445 lo = (lo + Math.imul(al7, bl8)) | 0;
8446 mid = (mid + Math.imul(al7, bh8)) | 0;
8447 mid = (mid + Math.imul(ah7, bl8)) | 0;
8448 hi = (hi + Math.imul(ah7, bh8)) | 0;
8449 lo = (lo + Math.imul(al6, bl9)) | 0;
8450 mid = (mid + Math.imul(al6, bh9)) | 0;
8451 mid = (mid + Math.imul(ah6, bl9)) | 0;
8452 hi = (hi + Math.imul(ah6, bh9)) | 0;
8453 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8454 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
8455 w15 &= 0x3ffffff;
8456 /* k = 16 */
8457 lo = Math.imul(al9, bl7);
8458 mid = Math.imul(al9, bh7);
8459 mid = (mid + Math.imul(ah9, bl7)) | 0;
8460 hi = Math.imul(ah9, bh7);
8461 lo = (lo + Math.imul(al8, bl8)) | 0;
8462 mid = (mid + Math.imul(al8, bh8)) | 0;
8463 mid = (mid + Math.imul(ah8, bl8)) | 0;
8464 hi = (hi + Math.imul(ah8, bh8)) | 0;
8465 lo = (lo + Math.imul(al7, bl9)) | 0;
8466 mid = (mid + Math.imul(al7, bh9)) | 0;
8467 mid = (mid + Math.imul(ah7, bl9)) | 0;
8468 hi = (hi + Math.imul(ah7, bh9)) | 0;
8469 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8470 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
8471 w16 &= 0x3ffffff;
8472 /* k = 17 */
8473 lo = Math.imul(al9, bl8);
8474 mid = Math.imul(al9, bh8);
8475 mid = (mid + Math.imul(ah9, bl8)) | 0;
8476 hi = Math.imul(ah9, bh8);
8477 lo = (lo + Math.imul(al8, bl9)) | 0;
8478 mid = (mid + Math.imul(al8, bh9)) | 0;
8479 mid = (mid + Math.imul(ah8, bl9)) | 0;
8480 hi = (hi + Math.imul(ah8, bh9)) | 0;
8481 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8482 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
8483 w17 &= 0x3ffffff;
8484 /* k = 18 */
8485 lo = Math.imul(al9, bl9);
8486 mid = Math.imul(al9, bh9);
8487 mid = (mid + Math.imul(ah9, bl9)) | 0;
8488 hi = Math.imul(ah9, bh9);
8489 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8490 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
8491 w18 &= 0x3ffffff;
8492 o[0] = w0;
8493 o[1] = w1;
8494 o[2] = w2;
8495 o[3] = w3;
8496 o[4] = w4;
8497 o[5] = w5;
8498 o[6] = w6;
8499 o[7] = w7;
8500 o[8] = w8;
8501 o[9] = w9;
8502 o[10] = w10;
8503 o[11] = w11;
8504 o[12] = w12;
8505 o[13] = w13;
8506 o[14] = w14;
8507 o[15] = w15;
8508 o[16] = w16;
8509 o[17] = w17;
8510 o[18] = w18;
8511 if (c !== 0) {
8512 o[19] = c;
8513 out.length++;
8514 }
8515 return out;
8516 };
8517
8518 // Polyfill comb
8519 if (!Math.imul) {
8520 comb10MulTo = smallMulTo;
8521 }
8522
8523 function bigMulTo (self, num, out) {
8524 out.negative = num.negative ^ self.negative;
8525 out.length = self.length + num.length;
8526
8527 var carry = 0;
8528 var hncarry = 0;
8529 for (var k = 0; k < out.length - 1; k++) {
8530 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
8531 // note that ncarry could be >= 0x3ffffff
8532 var ncarry = hncarry;
8533 hncarry = 0;
8534 var rword = carry & 0x3ffffff;
8535 var maxJ = Math.min(k, num.length - 1);
8536 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
8537 var i = k - j;
8538 var a = self.words[i] | 0;
8539 var b = num.words[j] | 0;
8540 var r = a * b;
8541
8542 var lo = r & 0x3ffffff;
8543 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
8544 lo = (lo + rword) | 0;
8545 rword = lo & 0x3ffffff;
8546 ncarry = (ncarry + (lo >>> 26)) | 0;
8547
8548 hncarry += ncarry >>> 26;
8549 ncarry &= 0x3ffffff;
8550 }
8551 out.words[k] = rword;
8552 carry = ncarry;
8553 ncarry = hncarry;
8554 }
8555 if (carry !== 0) {
8556 out.words[k] = carry;
8557 } else {
8558 out.length--;
8559 }
8560
8561 return out.strip();
8562 }
8563
8564 function jumboMulTo (self, num, out) {
8565 var fftm = new FFTM();
8566 return fftm.mulp(self, num, out);
8567 }
8568
8569 BN.prototype.mulTo = function mulTo (num, out) {
8570 var res;
8571 var len = this.length + num.length;
8572 if (this.length === 10 && num.length === 10) {
8573 res = comb10MulTo(this, num, out);
8574 } else if (len < 63) {
8575 res = smallMulTo(this, num, out);
8576 } else if (len < 1024) {
8577 res = bigMulTo(this, num, out);
8578 } else {
8579 res = jumboMulTo(this, num, out);
8580 }
8581
8582 return res;
8583 };
8584
8585 // Cooley-Tukey algorithm for FFT
8586 // slightly revisited to rely on looping instead of recursion
8587
8588 function FFTM (x, y) {
8589 this.x = x;
8590 this.y = y;
8591 }
8592
8593 FFTM.prototype.makeRBT = function makeRBT (N) {
8594 var t = new Array(N);
8595 var l = BN.prototype._countBits(N) - 1;
8596 for (var i = 0; i < N; i++) {
8597 t[i] = this.revBin(i, l, N);
8598 }
8599
8600 return t;
8601 };
8602
8603 // Returns binary-reversed representation of `x`
8604 FFTM.prototype.revBin = function revBin (x, l, N) {
8605 if (x === 0 || x === N - 1) return x;
8606
8607 var rb = 0;
8608 for (var i = 0; i < l; i++) {
8609 rb |= (x & 1) << (l - i - 1);
8610 x >>= 1;
8611 }
8612
8613 return rb;
8614 };
8615
8616 // Performs "tweedling" phase, therefore 'emulating'
8617 // behaviour of the recursive algorithm
8618 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
8619 for (var i = 0; i < N; i++) {
8620 rtws[i] = rws[rbt[i]];
8621 itws[i] = iws[rbt[i]];
8622 }
8623 };
8624
8625 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
8626 this.permute(rbt, rws, iws, rtws, itws, N);
8627
8628 for (var s = 1; s < N; s <<= 1) {
8629 var l = s << 1;
8630
8631 var rtwdf = Math.cos(2 * Math.PI / l);
8632 var itwdf = Math.sin(2 * Math.PI / l);
8633
8634 for (var p = 0; p < N; p += l) {
8635 var rtwdf_ = rtwdf;
8636 var itwdf_ = itwdf;
8637
8638 for (var j = 0; j < s; j++) {
8639 var re = rtws[p + j];
8640 var ie = itws[p + j];
8641
8642 var ro = rtws[p + j + s];
8643 var io = itws[p + j + s];
8644
8645 var rx = rtwdf_ * ro - itwdf_ * io;
8646
8647 io = rtwdf_ * io + itwdf_ * ro;
8648 ro = rx;
8649
8650 rtws[p + j] = re + ro;
8651 itws[p + j] = ie + io;
8652
8653 rtws[p + j + s] = re - ro;
8654 itws[p + j + s] = ie - io;
8655
8656 /* jshint maxdepth : false */
8657 if (j !== l) {
8658 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
8659
8660 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
8661 rtwdf_ = rx;
8662 }
8663 }
8664 }
8665 }
8666 };
8667
8668 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
8669 var N = Math.max(m, n) | 1;
8670 var odd = N & 1;
8671 var i = 0;
8672 for (N = N / 2 | 0; N; N = N >>> 1) {
8673 i++;
8674 }
8675
8676 return 1 << i + 1 + odd;
8677 };
8678
8679 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
8680 if (N <= 1) return;
8681
8682 for (var i = 0; i < N / 2; i++) {
8683 var t = rws[i];
8684
8685 rws[i] = rws[N - i - 1];
8686 rws[N - i - 1] = t;
8687
8688 t = iws[i];
8689
8690 iws[i] = -iws[N - i - 1];
8691 iws[N - i - 1] = -t;
8692 }
8693 };
8694
8695 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
8696 var carry = 0;
8697 for (var i = 0; i < N / 2; i++) {
8698 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
8699 Math.round(ws[2 * i] / N) +
8700 carry;
8701
8702 ws[i] = w & 0x3ffffff;
8703
8704 if (w < 0x4000000) {
8705 carry = 0;
8706 } else {
8707 carry = w / 0x4000000 | 0;
8708 }
8709 }
8710
8711 return ws;
8712 };
8713
8714 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
8715 var carry = 0;
8716 for (var i = 0; i < len; i++) {
8717 carry = carry + (ws[i] | 0);
8718
8719 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
8720 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
8721 }
8722
8723 // Pad with zeroes
8724 for (i = 2 * len; i < N; ++i) {
8725 rws[i] = 0;
8726 }
8727
8728 assert(carry === 0);
8729 assert((carry & ~0x1fff) === 0);
8730 };
8731
8732 FFTM.prototype.stub = function stub (N) {
8733 var ph = new Array(N);
8734 for (var i = 0; i < N; i++) {
8735 ph[i] = 0;
8736 }
8737
8738 return ph;
8739 };
8740
8741 FFTM.prototype.mulp = function mulp (x, y, out) {
8742 var N = 2 * this.guessLen13b(x.length, y.length);
8743
8744 var rbt = this.makeRBT(N);
8745
8746 var _ = this.stub(N);
8747
8748 var rws = new Array(N);
8749 var rwst = new Array(N);
8750 var iwst = new Array(N);
8751
8752 var nrws = new Array(N);
8753 var nrwst = new Array(N);
8754 var niwst = new Array(N);
8755
8756 var rmws = out.words;
8757 rmws.length = N;
8758
8759 this.convert13b(x.words, x.length, rws, N);
8760 this.convert13b(y.words, y.length, nrws, N);
8761
8762 this.transform(rws, _, rwst, iwst, N, rbt);
8763 this.transform(nrws, _, nrwst, niwst, N, rbt);
8764
8765 for (var i = 0; i < N; i++) {
8766 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
8767 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
8768 rwst[i] = rx;
8769 }
8770
8771 this.conjugate(rwst, iwst, N);
8772 this.transform(rwst, iwst, rmws, _, N, rbt);
8773 this.conjugate(rmws, _, N);
8774 this.normalize13b(rmws, N);
8775
8776 out.negative = x.negative ^ y.negative;
8777 out.length = x.length + y.length;
8778 return out.strip();
8779 };
8780
8781 // Multiply `this` by `num`
8782 BN.prototype.mul = function mul (num) {
8783 var out = new BN(null);
8784 out.words = new Array(this.length + num.length);
8785 return this.mulTo(num, out);
8786 };
8787
8788 // Multiply employing FFT
8789 BN.prototype.mulf = function mulf (num) {
8790 var out = new BN(null);
8791 out.words = new Array(this.length + num.length);
8792 return jumboMulTo(this, num, out);
8793 };
8794
8795 // In-place Multiplication
8796 BN.prototype.imul = function imul (num) {
8797 return this.clone().mulTo(num, this);
8798 };
8799
8800 BN.prototype.imuln = function imuln (num) {
8801 assert(typeof num === 'number');
8802 assert(num < 0x4000000);
8803
8804 // Carry
8805 var carry = 0;
8806 for (var i = 0; i < this.length; i++) {
8807 var w = (this.words[i] | 0) * num;
8808 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
8809 carry >>= 26;
8810 carry += (w / 0x4000000) | 0;
8811 // NOTE: lo is 27bit maximum
8812 carry += lo >>> 26;
8813 this.words[i] = lo & 0x3ffffff;
8814 }
8815
8816 if (carry !== 0) {
8817 this.words[i] = carry;
8818 this.length++;
8819 }
8820
8821 return this;
8822 };
8823
8824 BN.prototype.muln = function muln (num) {
8825 return this.clone().imuln(num);
8826 };
8827
8828 // `this` * `this`
8829 BN.prototype.sqr = function sqr () {
8830 return this.mul(this);
8831 };
8832
8833 // `this` * `this` in-place
8834 BN.prototype.isqr = function isqr () {
8835 return this.imul(this.clone());
8836 };
8837
8838 // Math.pow(`this`, `num`)
8839 BN.prototype.pow = function pow (num) {
8840 var w = toBitArray(num);
8841 if (w.length === 0) return new BN(1);
8842
8843 // Skip leading zeroes
8844 var res = this;
8845 for (var i = 0; i < w.length; i++, res = res.sqr()) {
8846 if (w[i] !== 0) break;
8847 }
8848
8849 if (++i < w.length) {
8850 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
8851 if (w[i] === 0) continue;
8852
8853 res = res.mul(q);
8854 }
8855 }
8856
8857 return res;
8858 };
8859
8860 // Shift-left in-place
8861 BN.prototype.iushln = function iushln (bits) {
8862 assert(typeof bits === 'number' && bits >= 0);
8863 var r = bits % 26;
8864 var s = (bits - r) / 26;
8865 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
8866 var i;
8867
8868 if (r !== 0) {
8869 var carry = 0;
8870
8871 for (i = 0; i < this.length; i++) {
8872 var newCarry = this.words[i] & carryMask;
8873 var c = ((this.words[i] | 0) - newCarry) << r;
8874 this.words[i] = c | carry;
8875 carry = newCarry >>> (26 - r);
8876 }
8877
8878 if (carry) {
8879 this.words[i] = carry;
8880 this.length++;
8881 }
8882 }
8883
8884 if (s !== 0) {
8885 for (i = this.length - 1; i >= 0; i--) {
8886 this.words[i + s] = this.words[i];
8887 }
8888
8889 for (i = 0; i < s; i++) {
8890 this.words[i] = 0;
8891 }
8892
8893 this.length += s;
8894 }
8895
8896 return this.strip();
8897 };
8898
8899 BN.prototype.ishln = function ishln (bits) {
8900 // TODO(indutny): implement me
8901 assert(this.negative === 0);
8902 return this.iushln(bits);
8903 };
8904
8905 // Shift-right in-place
8906 // NOTE: `hint` is a lowest bit before trailing zeroes
8907 // NOTE: if `extended` is present - it will be filled with destroyed bits
8908 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
8909 assert(typeof bits === 'number' && bits >= 0);
8910 var h;
8911 if (hint) {
8912 h = (hint - (hint % 26)) / 26;
8913 } else {
8914 h = 0;
8915 }
8916
8917 var r = bits % 26;
8918 var s = Math.min((bits - r) / 26, this.length);
8919 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
8920 var maskedWords = extended;
8921
8922 h -= s;
8923 h = Math.max(0, h);
8924
8925 // Extended mode, copy masked part
8926 if (maskedWords) {
8927 for (var i = 0; i < s; i++) {
8928 maskedWords.words[i] = this.words[i];
8929 }
8930 maskedWords.length = s;
8931 }
8932
8933 if (s === 0) {
8934 // No-op, we should not move anything at all
8935 } else if (this.length > s) {
8936 this.length -= s;
8937 for (i = 0; i < this.length; i++) {
8938 this.words[i] = this.words[i + s];
8939 }
8940 } else {
8941 this.words[0] = 0;
8942 this.length = 1;
8943 }
8944
8945 var carry = 0;
8946 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
8947 var word = this.words[i] | 0;
8948 this.words[i] = (carry << (26 - r)) | (word >>> r);
8949 carry = word & mask;
8950 }
8951
8952 // Push carried bits as a mask
8953 if (maskedWords && carry !== 0) {
8954 maskedWords.words[maskedWords.length++] = carry;
8955 }
8956
8957 if (this.length === 0) {
8958 this.words[0] = 0;
8959 this.length = 1;
8960 }
8961
8962 return this.strip();
8963 };
8964
8965 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
8966 // TODO(indutny): implement me
8967 assert(this.negative === 0);
8968 return this.iushrn(bits, hint, extended);
8969 };
8970
8971 // Shift-left
8972 BN.prototype.shln = function shln (bits) {
8973 return this.clone().ishln(bits);
8974 };
8975
8976 BN.prototype.ushln = function ushln (bits) {
8977 return this.clone().iushln(bits);
8978 };
8979
8980 // Shift-right
8981 BN.prototype.shrn = function shrn (bits) {
8982 return this.clone().ishrn(bits);
8983 };
8984
8985 BN.prototype.ushrn = function ushrn (bits) {
8986 return this.clone().iushrn(bits);
8987 };
8988
8989 // Test if n bit is set
8990 BN.prototype.testn = function testn (bit) {
8991 assert(typeof bit === 'number' && bit >= 0);
8992 var r = bit % 26;
8993 var s = (bit - r) / 26;
8994 var q = 1 << r;
8995
8996 // Fast case: bit is much higher than all existing words
8997 if (this.length <= s) return false;
8998
8999 // Check bit and return
9000 var w = this.words[s];
9001
9002 return !!(w & q);
9003 };
9004
9005 // Return only lowers bits of number (in-place)
9006 BN.prototype.imaskn = function imaskn (bits) {
9007 assert(typeof bits === 'number' && bits >= 0);
9008 var r = bits % 26;
9009 var s = (bits - r) / 26;
9010
9011 assert(this.negative === 0, 'imaskn works only with positive numbers');
9012
9013 if (this.length <= s) {
9014 return this;
9015 }
9016
9017 if (r !== 0) {
9018 s++;
9019 }
9020 this.length = Math.min(s, this.length);
9021
9022 if (r !== 0) {
9023 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
9024 this.words[this.length - 1] &= mask;
9025 }
9026
9027 return this.strip();
9028 };
9029
9030 // Return only lowers bits of number
9031 BN.prototype.maskn = function maskn (bits) {
9032 return this.clone().imaskn(bits);
9033 };
9034
9035 // Add plain number `num` to `this`
9036 BN.prototype.iaddn = function iaddn (num) {
9037 assert(typeof num === 'number');
9038 assert(num < 0x4000000);
9039 if (num < 0) return this.isubn(-num);
9040
9041 // Possible sign change
9042 if (this.negative !== 0) {
9043 if (this.length === 1 && (this.words[0] | 0) < num) {
9044 this.words[0] = num - (this.words[0] | 0);
9045 this.negative = 0;
9046 return this;
9047 }
9048
9049 this.negative = 0;
9050 this.isubn(num);
9051 this.negative = 1;
9052 return this;
9053 }
9054
9055 // Add without checks
9056 return this._iaddn(num);
9057 };
9058
9059 BN.prototype._iaddn = function _iaddn (num) {
9060 this.words[0] += num;
9061
9062 // Carry
9063 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
9064 this.words[i] -= 0x4000000;
9065 if (i === this.length - 1) {
9066 this.words[i + 1] = 1;
9067 } else {
9068 this.words[i + 1]++;
9069 }
9070 }
9071 this.length = Math.max(this.length, i + 1);
9072
9073 return this;
9074 };
9075
9076 // Subtract plain number `num` from `this`
9077 BN.prototype.isubn = function isubn (num) {
9078 assert(typeof num === 'number');
9079 assert(num < 0x4000000);
9080 if (num < 0) return this.iaddn(-num);
9081
9082 if (this.negative !== 0) {
9083 this.negative = 0;
9084 this.iaddn(num);
9085 this.negative = 1;
9086 return this;
9087 }
9088
9089 this.words[0] -= num;
9090
9091 if (this.length === 1 && this.words[0] < 0) {
9092 this.words[0] = -this.words[0];
9093 this.negative = 1;
9094 } else {
9095 // Carry
9096 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
9097 this.words[i] += 0x4000000;
9098 this.words[i + 1] -= 1;
9099 }
9100 }
9101
9102 return this.strip();
9103 };
9104
9105 BN.prototype.addn = function addn (num) {
9106 return this.clone().iaddn(num);
9107 };
9108
9109 BN.prototype.subn = function subn (num) {
9110 return this.clone().isubn(num);
9111 };
9112
9113 BN.prototype.iabs = function iabs () {
9114 this.negative = 0;
9115
9116 return this;
9117 };
9118
9119 BN.prototype.abs = function abs () {
9120 return this.clone().iabs();
9121 };
9122
9123 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
9124 var len = num.length + shift;
9125 var i;
9126
9127 this._expand(len);
9128
9129 var w;
9130 var carry = 0;
9131 for (i = 0; i < num.length; i++) {
9132 w = (this.words[i + shift] | 0) + carry;
9133 var right = (num.words[i] | 0) * mul;
9134 w -= right & 0x3ffffff;
9135 carry = (w >> 26) - ((right / 0x4000000) | 0);
9136 this.words[i + shift] = w & 0x3ffffff;
9137 }
9138 for (; i < this.length - shift; i++) {
9139 w = (this.words[i + shift] | 0) + carry;
9140 carry = w >> 26;
9141 this.words[i + shift] = w & 0x3ffffff;
9142 }
9143
9144 if (carry === 0) return this.strip();
9145
9146 // Subtraction overflow
9147 assert(carry === -1);
9148 carry = 0;
9149 for (i = 0; i < this.length; i++) {
9150 w = -(this.words[i] | 0) + carry;
9151 carry = w >> 26;
9152 this.words[i] = w & 0x3ffffff;
9153 }
9154 this.negative = 1;
9155
9156 return this.strip();
9157 };
9158
9159 BN.prototype._wordDiv = function _wordDiv (num, mode) {
9160 var shift = this.length - num.length;
9161
9162 var a = this.clone();
9163 var b = num;
9164
9165 // Normalize
9166 var bhi = b.words[b.length - 1] | 0;
9167 var bhiBits = this._countBits(bhi);
9168 shift = 26 - bhiBits;
9169 if (shift !== 0) {
9170 b = b.ushln(shift);
9171 a.iushln(shift);
9172 bhi = b.words[b.length - 1] | 0;
9173 }
9174
9175 // Initialize quotient
9176 var m = a.length - b.length;
9177 var q;
9178
9179 if (mode !== 'mod') {
9180 q = new BN(null);
9181 q.length = m + 1;
9182 q.words = new Array(q.length);
9183 for (var i = 0; i < q.length; i++) {
9184 q.words[i] = 0;
9185 }
9186 }
9187
9188 var diff = a.clone()._ishlnsubmul(b, 1, m);
9189 if (diff.negative === 0) {
9190 a = diff;
9191 if (q) {
9192 q.words[m] = 1;
9193 }
9194 }
9195
9196 for (var j = m - 1; j >= 0; j--) {
9197 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
9198 (a.words[b.length + j - 1] | 0);
9199
9200 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
9201 // (0x7ffffff)
9202 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
9203
9204 a._ishlnsubmul(b, qj, j);
9205 while (a.negative !== 0) {
9206 qj--;
9207 a.negative = 0;
9208 a._ishlnsubmul(b, 1, j);
9209 if (!a.isZero()) {
9210 a.negative ^= 1;
9211 }
9212 }
9213 if (q) {
9214 q.words[j] = qj;
9215 }
9216 }
9217 if (q) {
9218 q.strip();
9219 }
9220 a.strip();
9221
9222 // Denormalize
9223 if (mode !== 'div' && shift !== 0) {
9224 a.iushrn(shift);
9225 }
9226
9227 return {
9228 div: q || null,
9229 mod: a
9230 };
9231 };
9232
9233 // NOTE: 1) `mode` can be set to `mod` to request mod only,
9234 // to `div` to request div only, or be absent to
9235 // request both div & mod
9236 // 2) `positive` is true if unsigned mod is requested
9237 BN.prototype.divmod = function divmod (num, mode, positive) {
9238 assert(!num.isZero());
9239
9240 if (this.isZero()) {
9241 return {
9242 div: new BN(0),
9243 mod: new BN(0)
9244 };
9245 }
9246
9247 var div, mod, res;
9248 if (this.negative !== 0 && num.negative === 0) {
9249 res = this.neg().divmod(num, mode);
9250
9251 if (mode !== 'mod') {
9252 div = res.div.neg();
9253 }
9254
9255 if (mode !== 'div') {
9256 mod = res.mod.neg();
9257 if (positive && mod.negative !== 0) {
9258 mod.iadd(num);
9259 }
9260 }
9261
9262 return {
9263 div: div,
9264 mod: mod
9265 };
9266 }
9267
9268 if (this.negative === 0 && num.negative !== 0) {
9269 res = this.divmod(num.neg(), mode);
9270
9271 if (mode !== 'mod') {
9272 div = res.div.neg();
9273 }
9274
9275 return {
9276 div: div,
9277 mod: res.mod
9278 };
9279 }
9280
9281 if ((this.negative & num.negative) !== 0) {
9282 res = this.neg().divmod(num.neg(), mode);
9283
9284 if (mode !== 'div') {
9285 mod = res.mod.neg();
9286 if (positive && mod.negative !== 0) {
9287 mod.isub(num);
9288 }
9289 }
9290
9291 return {
9292 div: res.div,
9293 mod: mod
9294 };
9295 }
9296
9297 // Both numbers are positive at this point
9298
9299 // Strip both numbers to approximate shift value
9300 if (num.length > this.length || this.cmp(num) < 0) {
9301 return {
9302 div: new BN(0),
9303 mod: this
9304 };
9305 }
9306
9307 // Very short reduction
9308 if (num.length === 1) {
9309 if (mode === 'div') {
9310 return {
9311 div: this.divn(num.words[0]),
9312 mod: null
9313 };
9314 }
9315
9316 if (mode === 'mod') {
9317 return {
9318 div: null,
9319 mod: new BN(this.modn(num.words[0]))
9320 };
9321 }
9322
9323 return {
9324 div: this.divn(num.words[0]),
9325 mod: new BN(this.modn(num.words[0]))
9326 };
9327 }
9328
9329 return this._wordDiv(num, mode);
9330 };
9331
9332 // Find `this` / `num`
9333 BN.prototype.div = function div (num) {
9334 return this.divmod(num, 'div', false).div;
9335 };
9336
9337 // Find `this` % `num`
9338 BN.prototype.mod = function mod (num) {
9339 return this.divmod(num, 'mod', false).mod;
9340 };
9341
9342 BN.prototype.umod = function umod (num) {
9343 return this.divmod(num, 'mod', true).mod;
9344 };
9345
9346 // Find Round(`this` / `num`)
9347 BN.prototype.divRound = function divRound (num) {
9348 var dm = this.divmod(num);
9349
9350 // Fast case - exact division
9351 if (dm.mod.isZero()) return dm.div;
9352
9353 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
9354
9355 var half = num.ushrn(1);
9356 var r2 = num.andln(1);
9357 var cmp = mod.cmp(half);
9358
9359 // Round down
9360 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
9361
9362 // Round up
9363 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
9364 };
9365
9366 BN.prototype.modn = function modn (num) {
9367 assert(num <= 0x3ffffff);
9368 var p = (1 << 26) % num;
9369
9370 var acc = 0;
9371 for (var i = this.length - 1; i >= 0; i--) {
9372 acc = (p * acc + (this.words[i] | 0)) % num;
9373 }
9374
9375 return acc;
9376 };
9377
9378 // In-place division by number
9379 BN.prototype.idivn = function idivn (num) {
9380 assert(num <= 0x3ffffff);
9381
9382 var carry = 0;
9383 for (var i = this.length - 1; i >= 0; i--) {
9384 var w = (this.words[i] | 0) + carry * 0x4000000;
9385 this.words[i] = (w / num) | 0;
9386 carry = w % num;
9387 }
9388
9389 return this.strip();
9390 };
9391
9392 BN.prototype.divn = function divn (num) {
9393 return this.clone().idivn(num);
9394 };
9395
9396 BN.prototype.egcd = function egcd (p) {
9397 assert(p.negative === 0);
9398 assert(!p.isZero());
9399
9400 var x = this;
9401 var y = p.clone();
9402
9403 if (x.negative !== 0) {
9404 x = x.umod(p);
9405 } else {
9406 x = x.clone();
9407 }
9408
9409 // A * x + B * y = x
9410 var A = new BN(1);
9411 var B = new BN(0);
9412
9413 // C * x + D * y = y
9414 var C = new BN(0);
9415 var D = new BN(1);
9416
9417 var g = 0;
9418
9419 while (x.isEven() && y.isEven()) {
9420 x.iushrn(1);
9421 y.iushrn(1);
9422 ++g;
9423 }
9424
9425 var yp = y.clone();
9426 var xp = x.clone();
9427
9428 while (!x.isZero()) {
9429 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
9430 if (i > 0) {
9431 x.iushrn(i);
9432 while (i-- > 0) {
9433 if (A.isOdd() || B.isOdd()) {
9434 A.iadd(yp);
9435 B.isub(xp);
9436 }
9437
9438 A.iushrn(1);
9439 B.iushrn(1);
9440 }
9441 }
9442
9443 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
9444 if (j > 0) {
9445 y.iushrn(j);
9446 while (j-- > 0) {
9447 if (C.isOdd() || D.isOdd()) {
9448 C.iadd(yp);
9449 D.isub(xp);
9450 }
9451
9452 C.iushrn(1);
9453 D.iushrn(1);
9454 }
9455 }
9456
9457 if (x.cmp(y) >= 0) {
9458 x.isub(y);
9459 A.isub(C);
9460 B.isub(D);
9461 } else {
9462 y.isub(x);
9463 C.isub(A);
9464 D.isub(B);
9465 }
9466 }
9467
9468 return {
9469 a: C,
9470 b: D,
9471 gcd: y.iushln(g)
9472 };
9473 };
9474
9475 // This is reduced incarnation of the binary EEA
9476 // above, designated to invert members of the
9477 // _prime_ fields F(p) at a maximal speed
9478 BN.prototype._invmp = function _invmp (p) {
9479 assert(p.negative === 0);
9480 assert(!p.isZero());
9481
9482 var a = this;
9483 var b = p.clone();
9484
9485 if (a.negative !== 0) {
9486 a = a.umod(p);
9487 } else {
9488 a = a.clone();
9489 }
9490
9491 var x1 = new BN(1);
9492 var x2 = new BN(0);
9493
9494 var delta = b.clone();
9495
9496 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
9497 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
9498 if (i > 0) {
9499 a.iushrn(i);
9500 while (i-- > 0) {
9501 if (x1.isOdd()) {
9502 x1.iadd(delta);
9503 }
9504
9505 x1.iushrn(1);
9506 }
9507 }
9508
9509 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
9510 if (j > 0) {
9511 b.iushrn(j);
9512 while (j-- > 0) {
9513 if (x2.isOdd()) {
9514 x2.iadd(delta);
9515 }
9516
9517 x2.iushrn(1);
9518 }
9519 }
9520
9521 if (a.cmp(b) >= 0) {
9522 a.isub(b);
9523 x1.isub(x2);
9524 } else {
9525 b.isub(a);
9526 x2.isub(x1);
9527 }
9528 }
9529
9530 var res;
9531 if (a.cmpn(1) === 0) {
9532 res = x1;
9533 } else {
9534 res = x2;
9535 }
9536
9537 if (res.cmpn(0) < 0) {
9538 res.iadd(p);
9539 }
9540
9541 return res;
9542 };
9543
9544 BN.prototype.gcd = function gcd (num) {
9545 if (this.isZero()) return num.abs();
9546 if (num.isZero()) return this.abs();
9547
9548 var a = this.clone();
9549 var b = num.clone();
9550 a.negative = 0;
9551 b.negative = 0;
9552
9553 // Remove common factor of two
9554 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
9555 a.iushrn(1);
9556 b.iushrn(1);
9557 }
9558
9559 do {
9560 while (a.isEven()) {
9561 a.iushrn(1);
9562 }
9563 while (b.isEven()) {
9564 b.iushrn(1);
9565 }
9566
9567 var r = a.cmp(b);
9568 if (r < 0) {
9569 // Swap `a` and `b` to make `a` always bigger than `b`
9570 var t = a;
9571 a = b;
9572 b = t;
9573 } else if (r === 0 || b.cmpn(1) === 0) {
9574 break;
9575 }
9576
9577 a.isub(b);
9578 } while (true);
9579
9580 return b.iushln(shift);
9581 };
9582
9583 // Invert number in the field F(num)
9584 BN.prototype.invm = function invm (num) {
9585 return this.egcd(num).a.umod(num);
9586 };
9587
9588 BN.prototype.isEven = function isEven () {
9589 return (this.words[0] & 1) === 0;
9590 };
9591
9592 BN.prototype.isOdd = function isOdd () {
9593 return (this.words[0] & 1) === 1;
9594 };
9595
9596 // And first word and num
9597 BN.prototype.andln = function andln (num) {
9598 return this.words[0] & num;
9599 };
9600
9601 // Increment at the bit position in-line
9602 BN.prototype.bincn = function bincn (bit) {
9603 assert(typeof bit === 'number');
9604 var r = bit % 26;
9605 var s = (bit - r) / 26;
9606 var q = 1 << r;
9607
9608 // Fast case: bit is much higher than all existing words
9609 if (this.length <= s) {
9610 this._expand(s + 1);
9611 this.words[s] |= q;
9612 return this;
9613 }
9614
9615 // Add bit and propagate, if needed
9616 var carry = q;
9617 for (var i = s; carry !== 0 && i < this.length; i++) {
9618 var w = this.words[i] | 0;
9619 w += carry;
9620 carry = w >>> 26;
9621 w &= 0x3ffffff;
9622 this.words[i] = w;
9623 }
9624 if (carry !== 0) {
9625 this.words[i] = carry;
9626 this.length++;
9627 }
9628 return this;
9629 };
9630
9631 BN.prototype.isZero = function isZero () {
9632 return this.length === 1 && this.words[0] === 0;
9633 };
9634
9635 BN.prototype.cmpn = function cmpn (num) {
9636 var negative = num < 0;
9637
9638 if (this.negative !== 0 && !negative) return -1;
9639 if (this.negative === 0 && negative) return 1;
9640
9641 this.strip();
9642
9643 var res;
9644 if (this.length > 1) {
9645 res = 1;
9646 } else {
9647 if (negative) {
9648 num = -num;
9649 }
9650
9651 assert(num <= 0x3ffffff, 'Number is too big');
9652
9653 var w = this.words[0] | 0;
9654 res = w === num ? 0 : w < num ? -1 : 1;
9655 }
9656 if (this.negative !== 0) return -res | 0;
9657 return res;
9658 };
9659
9660 // Compare two numbers and return:
9661 // 1 - if `this` > `num`
9662 // 0 - if `this` == `num`
9663 // -1 - if `this` < `num`
9664 BN.prototype.cmp = function cmp (num) {
9665 if (this.negative !== 0 && num.negative === 0) return -1;
9666 if (this.negative === 0 && num.negative !== 0) return 1;
9667
9668 var res = this.ucmp(num);
9669 if (this.negative !== 0) return -res | 0;
9670 return res;
9671 };
9672
9673 // Unsigned comparison
9674 BN.prototype.ucmp = function ucmp (num) {
9675 // At this point both numbers have the same sign
9676 if (this.length > num.length) return 1;
9677 if (this.length < num.length) return -1;
9678
9679 var res = 0;
9680 for (var i = this.length - 1; i >= 0; i--) {
9681 var a = this.words[i] | 0;
9682 var b = num.words[i] | 0;
9683
9684 if (a === b) continue;
9685 if (a < b) {
9686 res = -1;
9687 } else if (a > b) {
9688 res = 1;
9689 }
9690 break;
9691 }
9692 return res;
9693 };
9694
9695 BN.prototype.gtn = function gtn (num) {
9696 return this.cmpn(num) === 1;
9697 };
9698
9699 BN.prototype.gt = function gt (num) {
9700 return this.cmp(num) === 1;
9701 };
9702
9703 BN.prototype.gten = function gten (num) {
9704 return this.cmpn(num) >= 0;
9705 };
9706
9707 BN.prototype.gte = function gte (num) {
9708 return this.cmp(num) >= 0;
9709 };
9710
9711 BN.prototype.ltn = function ltn (num) {
9712 return this.cmpn(num) === -1;
9713 };
9714
9715 BN.prototype.lt = function lt (num) {
9716 return this.cmp(num) === -1;
9717 };
9718
9719 BN.prototype.lten = function lten (num) {
9720 return this.cmpn(num) <= 0;
9721 };
9722
9723 BN.prototype.lte = function lte (num) {
9724 return this.cmp(num) <= 0;
9725 };
9726
9727 BN.prototype.eqn = function eqn (num) {
9728 return this.cmpn(num) === 0;
9729 };
9730
9731 BN.prototype.eq = function eq (num) {
9732 return this.cmp(num) === 0;
9733 };
9734
9735 //
9736 // A reduce context, could be using montgomery or something better, depending
9737 // on the `m` itself.
9738 //
9739 BN.red = function red (num) {
9740 return new Red(num);
9741 };
9742
9743 BN.prototype.toRed = function toRed (ctx) {
9744 assert(!this.red, 'Already a number in reduction context');
9745 assert(this.negative === 0, 'red works only with positives');
9746 return ctx.convertTo(this)._forceRed(ctx);
9747 };
9748
9749 BN.prototype.fromRed = function fromRed () {
9750 assert(this.red, 'fromRed works only with numbers in reduction context');
9751 return this.red.convertFrom(this);
9752 };
9753
9754 BN.prototype._forceRed = function _forceRed (ctx) {
9755 this.red = ctx;
9756 return this;
9757 };
9758
9759 BN.prototype.forceRed = function forceRed (ctx) {
9760 assert(!this.red, 'Already a number in reduction context');
9761 return this._forceRed(ctx);
9762 };
9763
9764 BN.prototype.redAdd = function redAdd (num) {
9765 assert(this.red, 'redAdd works only with red numbers');
9766 return this.red.add(this, num);
9767 };
9768
9769 BN.prototype.redIAdd = function redIAdd (num) {
9770 assert(this.red, 'redIAdd works only with red numbers');
9771 return this.red.iadd(this, num);
9772 };
9773
9774 BN.prototype.redSub = function redSub (num) {
9775 assert(this.red, 'redSub works only with red numbers');
9776 return this.red.sub(this, num);
9777 };
9778
9779 BN.prototype.redISub = function redISub (num) {
9780 assert(this.red, 'redISub works only with red numbers');
9781 return this.red.isub(this, num);
9782 };
9783
9784 BN.prototype.redShl = function redShl (num) {
9785 assert(this.red, 'redShl works only with red numbers');
9786 return this.red.shl(this, num);
9787 };
9788
9789 BN.prototype.redMul = function redMul (num) {
9790 assert(this.red, 'redMul works only with red numbers');
9791 this.red._verify2(this, num);
9792 return this.red.mul(this, num);
9793 };
9794
9795 BN.prototype.redIMul = function redIMul (num) {
9796 assert(this.red, 'redMul works only with red numbers');
9797 this.red._verify2(this, num);
9798 return this.red.imul(this, num);
9799 };
9800
9801 BN.prototype.redSqr = function redSqr () {
9802 assert(this.red, 'redSqr works only with red numbers');
9803 this.red._verify1(this);
9804 return this.red.sqr(this);
9805 };
9806
9807 BN.prototype.redISqr = function redISqr () {
9808 assert(this.red, 'redISqr works only with red numbers');
9809 this.red._verify1(this);
9810 return this.red.isqr(this);
9811 };
9812
9813 // Square root over p
9814 BN.prototype.redSqrt = function redSqrt () {
9815 assert(this.red, 'redSqrt works only with red numbers');
9816 this.red._verify1(this);
9817 return this.red.sqrt(this);
9818 };
9819
9820 BN.prototype.redInvm = function redInvm () {
9821 assert(this.red, 'redInvm works only with red numbers');
9822 this.red._verify1(this);
9823 return this.red.invm(this);
9824 };
9825
9826 // Return negative clone of `this` % `red modulo`
9827 BN.prototype.redNeg = function redNeg () {
9828 assert(this.red, 'redNeg works only with red numbers');
9829 this.red._verify1(this);
9830 return this.red.neg(this);
9831 };
9832
9833 BN.prototype.redPow = function redPow (num) {
9834 assert(this.red && !num.red, 'redPow(normalNum)');
9835 this.red._verify1(this);
9836 return this.red.pow(this, num);
9837 };
9838
9839 // Prime numbers with efficient reduction
9840 var primes = {
9841 k256: null,
9842 p224: null,
9843 p192: null,
9844 p25519: null
9845 };
9846
9847 // Pseudo-Mersenne prime
9848 function MPrime (name, p) {
9849 // P = 2 ^ N - K
9850 this.name = name;
9851 this.p = new BN(p, 16);
9852 this.n = this.p.bitLength();
9853 this.k = new BN(1).iushln(this.n).isub(this.p);
9854
9855 this.tmp = this._tmp();
9856 }
9857
9858 MPrime.prototype._tmp = function _tmp () {
9859 var tmp = new BN(null);
9860 tmp.words = new Array(Math.ceil(this.n / 13));
9861 return tmp;
9862 };
9863
9864 MPrime.prototype.ireduce = function ireduce (num) {
9865 // Assumes that `num` is less than `P^2`
9866 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
9867 var r = num;
9868 var rlen;
9869
9870 do {
9871 this.split(r, this.tmp);
9872 r = this.imulK(r);
9873 r = r.iadd(this.tmp);
9874 rlen = r.bitLength();
9875 } while (rlen > this.n);
9876
9877 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
9878 if (cmp === 0) {
9879 r.words[0] = 0;
9880 r.length = 1;
9881 } else if (cmp > 0) {
9882 r.isub(this.p);
9883 } else {
9884 r.strip();
9885 }
9886
9887 return r;
9888 };
9889
9890 MPrime.prototype.split = function split (input, out) {
9891 input.iushrn(this.n, 0, out);
9892 };
9893
9894 MPrime.prototype.imulK = function imulK (num) {
9895 return num.imul(this.k);
9896 };
9897
9898 function K256 () {
9899 MPrime.call(
9900 this,
9901 'k256',
9902 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
9903 }
9904 inherits(K256, MPrime);
9905
9906 K256.prototype.split = function split (input, output) {
9907 // 256 = 9 * 26 + 22
9908 var mask = 0x3fffff;
9909
9910 var outLen = Math.min(input.length, 9);
9911 for (var i = 0; i < outLen; i++) {
9912 output.words[i] = input.words[i];
9913 }
9914 output.length = outLen;
9915
9916 if (input.length <= 9) {
9917 input.words[0] = 0;
9918 input.length = 1;
9919 return;
9920 }
9921
9922 // Shift by 9 limbs
9923 var prev = input.words[9];
9924 output.words[output.length++] = prev & mask;
9925
9926 for (i = 10; i < input.length; i++) {
9927 var next = input.words[i] | 0;
9928 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
9929 prev = next;
9930 }
9931 prev >>>= 22;
9932 input.words[i - 10] = prev;
9933 if (prev === 0 && input.length > 10) {
9934 input.length -= 10;
9935 } else {
9936 input.length -= 9;
9937 }
9938 };
9939
9940 K256.prototype.imulK = function imulK (num) {
9941 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
9942 num.words[num.length] = 0;
9943 num.words[num.length + 1] = 0;
9944 num.length += 2;
9945
9946 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
9947 var lo = 0;
9948 for (var i = 0; i < num.length; i++) {
9949 var w = num.words[i] | 0;
9950 lo += w * 0x3d1;
9951 num.words[i] = lo & 0x3ffffff;
9952 lo = w * 0x40 + ((lo / 0x4000000) | 0);
9953 }
9954
9955 // Fast length reduction
9956 if (num.words[num.length - 1] === 0) {
9957 num.length--;
9958 if (num.words[num.length - 1] === 0) {
9959 num.length--;
9960 }
9961 }
9962 return num;
9963 };
9964
9965 function P224 () {
9966 MPrime.call(
9967 this,
9968 'p224',
9969 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
9970 }
9971 inherits(P224, MPrime);
9972
9973 function P192 () {
9974 MPrime.call(
9975 this,
9976 'p192',
9977 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
9978 }
9979 inherits(P192, MPrime);
9980
9981 function P25519 () {
9982 // 2 ^ 255 - 19
9983 MPrime.call(
9984 this,
9985 '25519',
9986 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
9987 }
9988 inherits(P25519, MPrime);
9989
9990 P25519.prototype.imulK = function imulK (num) {
9991 // K = 0x13
9992 var carry = 0;
9993 for (var i = 0; i < num.length; i++) {
9994 var hi = (num.words[i] | 0) * 0x13 + carry;
9995 var lo = hi & 0x3ffffff;
9996 hi >>>= 26;
9997
9998 num.words[i] = lo;
9999 carry = hi;
10000 }
10001 if (carry !== 0) {
10002 num.words[num.length++] = carry;
10003 }
10004 return num;
10005 };
10006
10007 // Exported mostly for testing purposes, use plain name instead
10008 BN._prime = function prime (name) {
10009 // Cached version of prime
10010 if (primes[name]) return primes[name];
10011
10012 var prime;
10013 if (name === 'k256') {
10014 prime = new K256();
10015 } else if (name === 'p224') {
10016 prime = new P224();
10017 } else if (name === 'p192') {
10018 prime = new P192();
10019 } else if (name === 'p25519') {
10020 prime = new P25519();
10021 } else {
10022 throw new Error('Unknown prime ' + name);
10023 }
10024 primes[name] = prime;
10025
10026 return prime;
10027 };
10028
10029 //
10030 // Base reduction engine
10031 //
10032 function Red (m) {
10033 if (typeof m === 'string') {
10034 var prime = BN._prime(m);
10035 this.m = prime.p;
10036 this.prime = prime;
10037 } else {
10038 assert(m.gtn(1), 'modulus must be greater than 1');
10039 this.m = m;
10040 this.prime = null;
10041 }
10042 }
10043
10044 Red.prototype._verify1 = function _verify1 (a) {
10045 assert(a.negative === 0, 'red works only with positives');
10046 assert(a.red, 'red works only with red numbers');
10047 };
10048
10049 Red.prototype._verify2 = function _verify2 (a, b) {
10050 assert((a.negative | b.negative) === 0, 'red works only with positives');
10051 assert(a.red && a.red === b.red,
10052 'red works only with red numbers');
10053 };
10054
10055 Red.prototype.imod = function imod (a) {
10056 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
10057 return a.umod(this.m)._forceRed(this);
10058 };
10059
10060 Red.prototype.neg = function neg (a) {
10061 if (a.isZero()) {
10062 return a.clone();
10063 }
10064
10065 return this.m.sub(a)._forceRed(this);
10066 };
10067
10068 Red.prototype.add = function add (a, b) {
10069 this._verify2(a, b);
10070
10071 var res = a.add(b);
10072 if (res.cmp(this.m) >= 0) {
10073 res.isub(this.m);
10074 }
10075 return res._forceRed(this);
10076 };
10077
10078 Red.prototype.iadd = function iadd (a, b) {
10079 this._verify2(a, b);
10080
10081 var res = a.iadd(b);
10082 if (res.cmp(this.m) >= 0) {
10083 res.isub(this.m);
10084 }
10085 return res;
10086 };
10087
10088 Red.prototype.sub = function sub (a, b) {
10089 this._verify2(a, b);
10090
10091 var res = a.sub(b);
10092 if (res.cmpn(0) < 0) {
10093 res.iadd(this.m);
10094 }
10095 return res._forceRed(this);
10096 };
10097
10098 Red.prototype.isub = function isub (a, b) {
10099 this._verify2(a, b);
10100
10101 var res = a.isub(b);
10102 if (res.cmpn(0) < 0) {
10103 res.iadd(this.m);
10104 }
10105 return res;
10106 };
10107
10108 Red.prototype.shl = function shl (a, num) {
10109 this._verify1(a);
10110 return this.imod(a.ushln(num));
10111 };
10112
10113 Red.prototype.imul = function imul (a, b) {
10114 this._verify2(a, b);
10115 return this.imod(a.imul(b));
10116 };
10117
10118 Red.prototype.mul = function mul (a, b) {
10119 this._verify2(a, b);
10120 return this.imod(a.mul(b));
10121 };
10122
10123 Red.prototype.isqr = function isqr (a) {
10124 return this.imul(a, a.clone());
10125 };
10126
10127 Red.prototype.sqr = function sqr (a) {
10128 return this.mul(a, a);
10129 };
10130
10131 Red.prototype.sqrt = function sqrt (a) {
10132 if (a.isZero()) return a.clone();
10133
10134 var mod3 = this.m.andln(3);
10135 assert(mod3 % 2 === 1);
10136
10137 // Fast case
10138 if (mod3 === 3) {
10139 var pow = this.m.add(new BN(1)).iushrn(2);
10140 return this.pow(a, pow);
10141 }
10142
10143 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
10144 //
10145 // Find Q and S, that Q * 2 ^ S = (P - 1)
10146 var q = this.m.subn(1);
10147 var s = 0;
10148 while (!q.isZero() && q.andln(1) === 0) {
10149 s++;
10150 q.iushrn(1);
10151 }
10152 assert(!q.isZero());
10153
10154 var one = new BN(1).toRed(this);
10155 var nOne = one.redNeg();
10156
10157 // Find quadratic non-residue
10158 // NOTE: Max is such because of generalized Riemann hypothesis.
10159 var lpow = this.m.subn(1).iushrn(1);
10160 var z = this.m.bitLength();
10161 z = new BN(2 * z * z).toRed(this);
10162
10163 while (this.pow(z, lpow).cmp(nOne) !== 0) {
10164 z.redIAdd(nOne);
10165 }
10166
10167 var c = this.pow(z, q);
10168 var r = this.pow(a, q.addn(1).iushrn(1));
10169 var t = this.pow(a, q);
10170 var m = s;
10171 while (t.cmp(one) !== 0) {
10172 var tmp = t;
10173 for (var i = 0; tmp.cmp(one) !== 0; i++) {
10174 tmp = tmp.redSqr();
10175 }
10176 assert(i < m);
10177 var b = this.pow(c, new BN(1).iushln(m - i - 1));
10178
10179 r = r.redMul(b);
10180 c = b.redSqr();
10181 t = t.redMul(c);
10182 m = i;
10183 }
10184
10185 return r;
10186 };
10187
10188 Red.prototype.invm = function invm (a) {
10189 var inv = a._invmp(this.m);
10190 if (inv.negative !== 0) {
10191 inv.negative = 0;
10192 return this.imod(inv).redNeg();
10193 } else {
10194 return this.imod(inv);
10195 }
10196 };
10197
10198 Red.prototype.pow = function pow (a, num) {
10199 if (num.isZero()) return new BN(1);
10200 if (num.cmpn(1) === 0) return a.clone();
10201
10202 var windowSize = 4;
10203 var wnd = new Array(1 << windowSize);
10204 wnd[0] = new BN(1).toRed(this);
10205 wnd[1] = a;
10206 for (var i = 2; i < wnd.length; i++) {
10207 wnd[i] = this.mul(wnd[i - 1], a);
10208 }
10209
10210 var res = wnd[0];
10211 var current = 0;
10212 var currentLen = 0;
10213 var start = num.bitLength() % 26;
10214 if (start === 0) {
10215 start = 26;
10216 }
10217
10218 for (i = num.length - 1; i >= 0; i--) {
10219 var word = num.words[i];
10220 for (var j = start - 1; j >= 0; j--) {
10221 var bit = (word >> j) & 1;
10222 if (res !== wnd[0]) {
10223 res = this.sqr(res);
10224 }
10225
10226 if (bit === 0 && current === 0) {
10227 currentLen = 0;
10228 continue;
10229 }
10230
10231 current <<= 1;
10232 current |= bit;
10233 currentLen++;
10234 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
10235
10236 res = this.mul(res, wnd[current]);
10237 currentLen = 0;
10238 current = 0;
10239 }
10240 start = 26;
10241 }
10242
10243 return res;
10244 };
10245
10246 Red.prototype.convertTo = function convertTo (num) {
10247 var r = num.umod(this.m);
10248
10249 return r === num ? r.clone() : r;
10250 };
10251
10252 Red.prototype.convertFrom = function convertFrom (num) {
10253 var res = num.clone();
10254 res.red = null;
10255 return res;
10256 };
10257
10258 //
10259 // Montgomery method engine
10260 //
10261
10262 BN.mont = function mont (num) {
10263 return new Mont(num);
10264 };
10265
10266 function Mont (m) {
10267 Red.call(this, m);
10268
10269 this.shift = this.m.bitLength();
10270 if (this.shift % 26 !== 0) {
10271 this.shift += 26 - (this.shift % 26);
10272 }
10273
10274 this.r = new BN(1).iushln(this.shift);
10275 this.r2 = this.imod(this.r.sqr());
10276 this.rinv = this.r._invmp(this.m);
10277
10278 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
10279 this.minv = this.minv.umod(this.r);
10280 this.minv = this.r.sub(this.minv);
10281 }
10282 inherits(Mont, Red);
10283
10284 Mont.prototype.convertTo = function convertTo (num) {
10285 return this.imod(num.ushln(this.shift));
10286 };
10287
10288 Mont.prototype.convertFrom = function convertFrom (num) {
10289 var r = this.imod(num.mul(this.rinv));
10290 r.red = null;
10291 return r;
10292 };
10293
10294 Mont.prototype.imul = function imul (a, b) {
10295 if (a.isZero() || b.isZero()) {
10296 a.words[0] = 0;
10297 a.length = 1;
10298 return a;
10299 }
10300
10301 var t = a.imul(b);
10302 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
10303 var u = t.isub(c).iushrn(this.shift);
10304 var res = u;
10305
10306 if (u.cmp(this.m) >= 0) {
10307 res = u.isub(this.m);
10308 } else if (u.cmpn(0) < 0) {
10309 res = u.iadd(this.m);
10310 }
10311
10312 return res._forceRed(this);
10313 };
10314
10315 Mont.prototype.mul = function mul (a, b) {
10316 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
10317
10318 var t = a.mul(b);
10319 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
10320 var u = t.isub(c).iushrn(this.shift);
10321 var res = u;
10322 if (u.cmp(this.m) >= 0) {
10323 res = u.isub(this.m);
10324 } else if (u.cmpn(0) < 0) {
10325 res = u.iadd(this.m);
10326 }
10327
10328 return res._forceRed(this);
10329 };
10330
10331 Mont.prototype.invm = function invm (a) {
10332 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
10333 var res = this.imod(a._invmp(this.m).mul(this.r2));
10334 return res._forceRed(this);
10335 };
10336})(typeof module === 'undefined' || module, this);
10337
10338},{}],34:[function(require,module,exports){
10339var r;
10340
10341module.exports = function rand(len) {
10342 if (!r)
10343 r = new Rand(null);
10344
10345 return r.generate(len);
10346};
10347
10348function Rand(rand) {
10349 this.rand = rand;
10350}
10351module.exports.Rand = Rand;
10352
10353Rand.prototype.generate = function generate(len) {
10354 return this._rand(len);
10355};
10356
10357if (typeof self === 'object') {
10358 if (self.crypto && self.crypto.getRandomValues) {
10359 // Modern browsers
10360 Rand.prototype._rand = function _rand(n) {
10361 var arr = new Uint8Array(n);
10362 self.crypto.getRandomValues(arr);
10363 return arr;
10364 };
10365 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
10366 // IE
10367 Rand.prototype._rand = function _rand(n) {
10368 var arr = new Uint8Array(n);
10369 self.msCrypto.getRandomValues(arr);
10370 return arr;
10371 };
10372 } else {
10373 // Old junk
10374 Rand.prototype._rand = function() {
10375 throw new Error('Not implemented yet');
10376 };
10377 }
10378} else {
10379 // Node.js or Web worker with no crypto support
10380 try {
10381 var crypto = require('crypto');
10382
10383 Rand.prototype._rand = function _rand(n) {
10384 return crypto.randomBytes(n);
10385 };
10386 } catch (e) {
10387 // Emulate crypto API using randy
10388 Rand.prototype._rand = function _rand(n) {
10389 var res = new Uint8Array(n);
10390 for (var i = 0; i < res.length; i++)
10391 res[i] = this.rand.getByte();
10392 return res;
10393 };
10394 }
10395}
10396
10397},{"crypto":3}],35:[function(require,module,exports){
10398(function (Buffer){
10399var Transform = require('stream').Transform
10400var inherits = require('inherits')
10401var StringDecoder = require('string_decoder').StringDecoder
10402module.exports = CipherBase
10403inherits(CipherBase, Transform)
10404function CipherBase (hashMode) {
10405 Transform.call(this)
10406 this.hashMode = typeof hashMode === 'string'
10407 if (this.hashMode) {
10408 this[hashMode] = this._finalOrDigest
10409 } else {
10410 this.final = this._finalOrDigest
10411 }
10412 this._decoder = null
10413 this._encoding = null
10414}
10415CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
10416 if (typeof data === 'string') {
10417 data = new Buffer(data, inputEnc)
10418 }
10419 var outData = this._update(data)
10420 if (this.hashMode) {
10421 return this
10422 }
10423 if (outputEnc) {
10424 outData = this._toString(outData, outputEnc)
10425 }
10426 return outData
10427}
10428
10429CipherBase.prototype.setAutoPadding = function () {}
10430
10431CipherBase.prototype.getAuthTag = function () {
10432 throw new Error('trying to get auth tag in unsupported state')
10433}
10434
10435CipherBase.prototype.setAuthTag = function () {
10436 throw new Error('trying to set auth tag in unsupported state')
10437}
10438
10439CipherBase.prototype.setAAD = function () {
10440 throw new Error('trying to set aad in unsupported state')
10441}
10442
10443CipherBase.prototype._transform = function (data, _, next) {
10444 var err
10445 try {
10446 if (this.hashMode) {
10447 this._update(data)
10448 } else {
10449 this.push(this._update(data))
10450 }
10451 } catch (e) {
10452 err = e
10453 } finally {
10454 next(err)
10455 }
10456}
10457CipherBase.prototype._flush = function (done) {
10458 var err
10459 try {
10460 this.push(this._final())
10461 } catch (e) {
10462 err = e
10463 } finally {
10464 done(err)
10465 }
10466}
10467CipherBase.prototype._finalOrDigest = function (outputEnc) {
10468 var outData = this._final() || new Buffer('')
10469 if (outputEnc) {
10470 outData = this._toString(outData, outputEnc, true)
10471 }
10472 return outData
10473}
10474
10475CipherBase.prototype._toString = function (value, enc, fin) {
10476 if (!this._decoder) {
10477 this._decoder = new StringDecoder(enc)
10478 this._encoding = enc
10479 }
10480 if (this._encoding !== enc) {
10481 throw new Error('can\'t switch encodings')
10482 }
10483 var out = this._decoder.write(value)
10484 if (fin) {
10485 out += this._decoder.end()
10486 }
10487 return out
10488}
10489
10490}).call(this,require("buffer").Buffer)
10491},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
10492(function (Buffer){
10493'use strict';
10494var inherits = require('inherits')
10495var md5 = require('./md5')
10496var rmd160 = require('ripemd160')
10497var sha = require('sha.js')
10498
10499var Base = require('cipher-base')
10500
10501function HashNoConstructor(hash) {
10502 Base.call(this, 'digest')
10503
10504 this._hash = hash
10505 this.buffers = []
10506}
10507
10508inherits(HashNoConstructor, Base)
10509
10510HashNoConstructor.prototype._update = function (data) {
10511 this.buffers.push(data)
10512}
10513
10514HashNoConstructor.prototype._final = function () {
10515 var buf = Buffer.concat(this.buffers)
10516 var r = this._hash(buf)
10517 this.buffers = null
10518
10519 return r
10520}
10521
10522function Hash(hash) {
10523 Base.call(this, 'digest')
10524
10525 this._hash = hash
10526}
10527
10528inherits(Hash, Base)
10529
10530Hash.prototype._update = function (data) {
10531 this._hash.update(data)
10532}
10533
10534Hash.prototype._final = function () {
10535 return this._hash.digest()
10536}
10537
10538module.exports = function createHash (alg) {
10539 alg = alg.toLowerCase()
10540 if ('md5' === alg) return new HashNoConstructor(md5)
10541 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
10542
10543 return new Hash(sha(alg))
10544}
10545
10546}).call(this,require("buffer").Buffer)
10547},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
10548(function (Buffer){
10549'use strict';
10550var intSize = 4;
10551var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
10552var chrsz = 8;
10553
10554function toArray(buf, bigEndian) {
10555 if ((buf.length % intSize) !== 0) {
10556 var len = buf.length + (intSize - (buf.length % intSize));
10557 buf = Buffer.concat([buf, zeroBuffer], len);
10558 }
10559
10560 var arr = [];
10561 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
10562 for (var i = 0; i < buf.length; i += intSize) {
10563 arr.push(fn.call(buf, i));
10564 }
10565 return arr;
10566}
10567
10568function toBuffer(arr, size, bigEndian) {
10569 var buf = new Buffer(size);
10570 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
10571 for (var i = 0; i < arr.length; i++) {
10572 fn.call(buf, arr[i], i * 4, true);
10573 }
10574 return buf;
10575}
10576
10577function hash(buf, fn, hashSize, bigEndian) {
10578 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
10579 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
10580 return toBuffer(arr, hashSize, bigEndian);
10581}
10582exports.hash = hash;
10583}).call(this,require("buffer").Buffer)
10584},{"buffer":5}],38:[function(require,module,exports){
10585'use strict';
10586/*
10587 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
10588 * Digest Algorithm, as defined in RFC 1321.
10589 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
10590 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
10591 * Distributed under the BSD License
10592 * See http://pajhome.org.uk/crypt/md5 for more info.
10593 */
10594
10595var helpers = require('./helpers');
10596
10597/*
10598 * Calculate the MD5 of an array of little-endian words, and a bit length
10599 */
10600function core_md5(x, len)
10601{
10602 /* append padding */
10603 x[len >> 5] |= 0x80 << ((len) % 32);
10604 x[(((len + 64) >>> 9) << 4) + 14] = len;
10605
10606 var a = 1732584193;
10607 var b = -271733879;
10608 var c = -1732584194;
10609 var d = 271733878;
10610
10611 for(var i = 0; i < x.length; i += 16)
10612 {
10613 var olda = a;
10614 var oldb = b;
10615 var oldc = c;
10616 var oldd = d;
10617
10618 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
10619 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
10620 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
10621 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
10622 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
10623 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
10624 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
10625 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
10626 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
10627 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
10628 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
10629 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
10630 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
10631 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
10632 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
10633 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
10634
10635 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
10636 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
10637 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
10638 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
10639 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
10640 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
10641 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
10642 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
10643 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
10644 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
10645 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
10646 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
10647 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
10648 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
10649 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
10650 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
10651
10652 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
10653 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
10654 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
10655 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
10656 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
10657 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
10658 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
10659 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
10660 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
10661 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
10662 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
10663 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
10664 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
10665 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
10666 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
10667 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
10668
10669 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
10670 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
10671 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
10672 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
10673 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
10674 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
10675 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
10676 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
10677 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
10678 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
10679 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
10680 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
10681 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
10682 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
10683 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
10684 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
10685
10686 a = safe_add(a, olda);
10687 b = safe_add(b, oldb);
10688 c = safe_add(c, oldc);
10689 d = safe_add(d, oldd);
10690 }
10691 return Array(a, b, c, d);
10692
10693}
10694
10695/*
10696 * These functions implement the four basic operations the algorithm uses.
10697 */
10698function md5_cmn(q, a, b, x, s, t)
10699{
10700 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
10701}
10702function md5_ff(a, b, c, d, x, s, t)
10703{
10704 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
10705}
10706function md5_gg(a, b, c, d, x, s, t)
10707{
10708 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
10709}
10710function md5_hh(a, b, c, d, x, s, t)
10711{
10712 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
10713}
10714function md5_ii(a, b, c, d, x, s, t)
10715{
10716 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
10717}
10718
10719/*
10720 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
10721 * to work around bugs in some JS interpreters.
10722 */
10723function safe_add(x, y)
10724{
10725 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
10726 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
10727 return (msw << 16) | (lsw & 0xFFFF);
10728}
10729
10730/*
10731 * Bitwise rotate a 32-bit number to the left.
10732 */
10733function bit_rol(num, cnt)
10734{
10735 return (num << cnt) | (num >>> (32 - cnt));
10736}
10737
10738module.exports = function md5(buf) {
10739 return helpers.hash(buf, core_md5, 16);
10740};
10741},{"./helpers":37}],39:[function(require,module,exports){
10742'use strict';
10743
10744var elliptic = exports;
10745
10746elliptic.version = require('../package.json').version;
10747elliptic.utils = require('./elliptic/utils');
10748elliptic.rand = require('brorand');
10749elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
10750elliptic.curve = require('./elliptic/curve');
10751elliptic.curves = require('./elliptic/curves');
10752
10753// Protocols
10754elliptic.ec = require('./elliptic/ec');
10755elliptic.eddsa = require('./elliptic/eddsa');
10756
10757},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
10758'use strict';
10759
10760var BN = require('bn.js');
10761var elliptic = require('../../elliptic');
10762var utils = elliptic.utils;
10763var getNAF = utils.getNAF;
10764var getJSF = utils.getJSF;
10765var assert = utils.assert;
10766
10767function BaseCurve(type, conf) {
10768 this.type = type;
10769 this.p = new BN(conf.p, 16);
10770
10771 // Use Montgomery, when there is no fast reduction for the prime
10772 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
10773
10774 // Useful for many curves
10775 this.zero = new BN(0).toRed(this.red);
10776 this.one = new BN(1).toRed(this.red);
10777 this.two = new BN(2).toRed(this.red);
10778
10779 // Curve configuration, optional
10780 this.n = conf.n && new BN(conf.n, 16);
10781 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
10782
10783 // Temporary arrays
10784 this._wnafT1 = new Array(4);
10785 this._wnafT2 = new Array(4);
10786 this._wnafT3 = new Array(4);
10787 this._wnafT4 = new Array(4);
10788
10789 // Generalized Greg Maxwell's trick
10790 var adjustCount = this.n && this.p.div(this.n);
10791 if (!adjustCount || adjustCount.cmpn(100) > 0) {
10792 this.redN = null;
10793 } else {
10794 this._maxwellTrick = true;
10795 this.redN = this.n.toRed(this.red);
10796 }
10797}
10798module.exports = BaseCurve;
10799
10800BaseCurve.prototype.point = function point() {
10801 throw new Error('Not implemented');
10802};
10803
10804BaseCurve.prototype.validate = function validate() {
10805 throw new Error('Not implemented');
10806};
10807
10808BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
10809 assert(p.precomputed);
10810 var doubles = p._getDoubles();
10811
10812 var naf = getNAF(k, 1);
10813 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
10814 I /= 3;
10815
10816 // Translate into more windowed form
10817 var repr = [];
10818 for (var j = 0; j < naf.length; j += doubles.step) {
10819 var nafW = 0;
10820 for (var k = j + doubles.step - 1; k >= j; k--)
10821 nafW = (nafW << 1) + naf[k];
10822 repr.push(nafW);
10823 }
10824
10825 var a = this.jpoint(null, null, null);
10826 var b = this.jpoint(null, null, null);
10827 for (var i = I; i > 0; i--) {
10828 for (var j = 0; j < repr.length; j++) {
10829 var nafW = repr[j];
10830 if (nafW === i)
10831 b = b.mixedAdd(doubles.points[j]);
10832 else if (nafW === -i)
10833 b = b.mixedAdd(doubles.points[j].neg());
10834 }
10835 a = a.add(b);
10836 }
10837 return a.toP();
10838};
10839
10840BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
10841 var w = 4;
10842
10843 // Precompute window
10844 var nafPoints = p._getNAFPoints(w);
10845 w = nafPoints.wnd;
10846 var wnd = nafPoints.points;
10847
10848 // Get NAF form
10849 var naf = getNAF(k, w);
10850
10851 // Add `this`*(N+1) for every w-NAF index
10852 var acc = this.jpoint(null, null, null);
10853 for (var i = naf.length - 1; i >= 0; i--) {
10854 // Count zeroes
10855 for (var k = 0; i >= 0 && naf[i] === 0; i--)
10856 k++;
10857 if (i >= 0)
10858 k++;
10859 acc = acc.dblp(k);
10860
10861 if (i < 0)
10862 break;
10863 var z = naf[i];
10864 assert(z !== 0);
10865 if (p.type === 'affine') {
10866 // J +- P
10867 if (z > 0)
10868 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
10869 else
10870 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
10871 } else {
10872 // J +- J
10873 if (z > 0)
10874 acc = acc.add(wnd[(z - 1) >> 1]);
10875 else
10876 acc = acc.add(wnd[(-z - 1) >> 1].neg());
10877 }
10878 }
10879 return p.type === 'affine' ? acc.toP() : acc;
10880};
10881
10882BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
10883 points,
10884 coeffs,
10885 len,
10886 jacobianResult) {
10887 var wndWidth = this._wnafT1;
10888 var wnd = this._wnafT2;
10889 var naf = this._wnafT3;
10890
10891 // Fill all arrays
10892 var max = 0;
10893 for (var i = 0; i < len; i++) {
10894 var p = points[i];
10895 var nafPoints = p._getNAFPoints(defW);
10896 wndWidth[i] = nafPoints.wnd;
10897 wnd[i] = nafPoints.points;
10898 }
10899
10900 // Comb small window NAFs
10901 for (var i = len - 1; i >= 1; i -= 2) {
10902 var a = i - 1;
10903 var b = i;
10904 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
10905 naf[a] = getNAF(coeffs[a], wndWidth[a]);
10906 naf[b] = getNAF(coeffs[b], wndWidth[b]);
10907 max = Math.max(naf[a].length, max);
10908 max = Math.max(naf[b].length, max);
10909 continue;
10910 }
10911
10912 var comb = [
10913 points[a], /* 1 */
10914 null, /* 3 */
10915 null, /* 5 */
10916 points[b] /* 7 */
10917 ];
10918
10919 // Try to avoid Projective points, if possible
10920 if (points[a].y.cmp(points[b].y) === 0) {
10921 comb[1] = points[a].add(points[b]);
10922 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
10923 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
10924 comb[1] = points[a].toJ().mixedAdd(points[b]);
10925 comb[2] = points[a].add(points[b].neg());
10926 } else {
10927 comb[1] = points[a].toJ().mixedAdd(points[b]);
10928 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
10929 }
10930
10931 var index = [
10932 -3, /* -1 -1 */
10933 -1, /* -1 0 */
10934 -5, /* -1 1 */
10935 -7, /* 0 -1 */
10936 0, /* 0 0 */
10937 7, /* 0 1 */
10938 5, /* 1 -1 */
10939 1, /* 1 0 */
10940 3 /* 1 1 */
10941 ];
10942
10943 var jsf = getJSF(coeffs[a], coeffs[b]);
10944 max = Math.max(jsf[0].length, max);
10945 naf[a] = new Array(max);
10946 naf[b] = new Array(max);
10947 for (var j = 0; j < max; j++) {
10948 var ja = jsf[0][j] | 0;
10949 var jb = jsf[1][j] | 0;
10950
10951 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
10952 naf[b][j] = 0;
10953 wnd[a] = comb;
10954 }
10955 }
10956
10957 var acc = this.jpoint(null, null, null);
10958 var tmp = this._wnafT4;
10959 for (var i = max; i >= 0; i--) {
10960 var k = 0;
10961
10962 while (i >= 0) {
10963 var zero = true;
10964 for (var j = 0; j < len; j++) {
10965 tmp[j] = naf[j][i] | 0;
10966 if (tmp[j] !== 0)
10967 zero = false;
10968 }
10969 if (!zero)
10970 break;
10971 k++;
10972 i--;
10973 }
10974 if (i >= 0)
10975 k++;
10976 acc = acc.dblp(k);
10977 if (i < 0)
10978 break;
10979
10980 for (var j = 0; j < len; j++) {
10981 var z = tmp[j];
10982 var p;
10983 if (z === 0)
10984 continue;
10985 else if (z > 0)
10986 p = wnd[j][(z - 1) >> 1];
10987 else if (z < 0)
10988 p = wnd[j][(-z - 1) >> 1].neg();
10989
10990 if (p.type === 'affine')
10991 acc = acc.mixedAdd(p);
10992 else
10993 acc = acc.add(p);
10994 }
10995 }
10996 // Zeroify references
10997 for (var i = 0; i < len; i++)
10998 wnd[i] = null;
10999
11000 if (jacobianResult)
11001 return acc;
11002 else
11003 return acc.toP();
11004};
11005
11006function BasePoint(curve, type) {
11007 this.curve = curve;
11008 this.type = type;
11009 this.precomputed = null;
11010}
11011BaseCurve.BasePoint = BasePoint;
11012
11013BasePoint.prototype.eq = function eq(/*other*/) {
11014 throw new Error('Not implemented');
11015};
11016
11017BasePoint.prototype.validate = function validate() {
11018 return this.curve.validate(this);
11019};
11020
11021BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
11022 bytes = utils.toArray(bytes, enc);
11023
11024 var len = this.p.byteLength();
11025
11026 // uncompressed, hybrid-odd, hybrid-even
11027 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
11028 bytes.length - 1 === 2 * len) {
11029 if (bytes[0] === 0x06)
11030 assert(bytes[bytes.length - 1] % 2 === 0);
11031 else if (bytes[0] === 0x07)
11032 assert(bytes[bytes.length - 1] % 2 === 1);
11033
11034 var res = this.point(bytes.slice(1, 1 + len),
11035 bytes.slice(1 + len, 1 + 2 * len));
11036
11037 return res;
11038 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
11039 bytes.length - 1 === len) {
11040 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
11041 }
11042 throw new Error('Unknown point format');
11043};
11044
11045BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
11046 return this.encode(enc, true);
11047};
11048
11049BasePoint.prototype._encode = function _encode(compact) {
11050 var len = this.curve.p.byteLength();
11051 var x = this.getX().toArray('be', len);
11052
11053 if (compact)
11054 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
11055
11056 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
11057};
11058
11059BasePoint.prototype.encode = function encode(enc, compact) {
11060 return utils.encode(this._encode(compact), enc);
11061};
11062
11063BasePoint.prototype.precompute = function precompute(power) {
11064 if (this.precomputed)
11065 return this;
11066
11067 var precomputed = {
11068 doubles: null,
11069 naf: null,
11070 beta: null
11071 };
11072 precomputed.naf = this._getNAFPoints(8);
11073 precomputed.doubles = this._getDoubles(4, power);
11074 precomputed.beta = this._getBeta();
11075 this.precomputed = precomputed;
11076
11077 return this;
11078};
11079
11080BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
11081 if (!this.precomputed)
11082 return false;
11083
11084 var doubles = this.precomputed.doubles;
11085 if (!doubles)
11086 return false;
11087
11088 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
11089};
11090
11091BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
11092 if (this.precomputed && this.precomputed.doubles)
11093 return this.precomputed.doubles;
11094
11095 var doubles = [ this ];
11096 var acc = this;
11097 for (var i = 0; i < power; i += step) {
11098 for (var j = 0; j < step; j++)
11099 acc = acc.dbl();
11100 doubles.push(acc);
11101 }
11102 return {
11103 step: step,
11104 points: doubles
11105 };
11106};
11107
11108BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
11109 if (this.precomputed && this.precomputed.naf)
11110 return this.precomputed.naf;
11111
11112 var res = [ this ];
11113 var max = (1 << wnd) - 1;
11114 var dbl = max === 1 ? null : this.dbl();
11115 for (var i = 1; i < max; i++)
11116 res[i] = res[i - 1].add(dbl);
11117 return {
11118 wnd: wnd,
11119 points: res
11120 };
11121};
11122
11123BasePoint.prototype._getBeta = function _getBeta() {
11124 return null;
11125};
11126
11127BasePoint.prototype.dblp = function dblp(k) {
11128 var r = this;
11129 for (var i = 0; i < k; i++)
11130 r = r.dbl();
11131 return r;
11132};
11133
11134},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
11135'use strict';
11136
11137var curve = require('../curve');
11138var elliptic = require('../../elliptic');
11139var BN = require('bn.js');
11140var inherits = require('inherits');
11141var Base = curve.base;
11142
11143var assert = elliptic.utils.assert;
11144
11145function EdwardsCurve(conf) {
11146 // NOTE: Important as we are creating point in Base.call()
11147 this.twisted = (conf.a | 0) !== 1;
11148 this.mOneA = this.twisted && (conf.a | 0) === -1;
11149 this.extended = this.mOneA;
11150
11151 Base.call(this, 'edwards', conf);
11152
11153 this.a = new BN(conf.a, 16).umod(this.red.m);
11154 this.a = this.a.toRed(this.red);
11155 this.c = new BN(conf.c, 16).toRed(this.red);
11156 this.c2 = this.c.redSqr();
11157 this.d = new BN(conf.d, 16).toRed(this.red);
11158 this.dd = this.d.redAdd(this.d);
11159
11160 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
11161 this.oneC = (conf.c | 0) === 1;
11162}
11163inherits(EdwardsCurve, Base);
11164module.exports = EdwardsCurve;
11165
11166EdwardsCurve.prototype._mulA = function _mulA(num) {
11167 if (this.mOneA)
11168 return num.redNeg();
11169 else
11170 return this.a.redMul(num);
11171};
11172
11173EdwardsCurve.prototype._mulC = function _mulC(num) {
11174 if (this.oneC)
11175 return num;
11176 else
11177 return this.c.redMul(num);
11178};
11179
11180// Just for compatibility with Short curve
11181EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
11182 return this.point(x, y, z, t);
11183};
11184
11185EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
11186 x = new BN(x, 16);
11187 if (!x.red)
11188 x = x.toRed(this.red);
11189
11190 var x2 = x.redSqr();
11191 var rhs = this.c2.redSub(this.a.redMul(x2));
11192 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
11193
11194 var y2 = rhs.redMul(lhs.redInvm());
11195 var y = y2.redSqrt();
11196 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
11197 throw new Error('invalid point');
11198
11199 var isOdd = y.fromRed().isOdd();
11200 if (odd && !isOdd || !odd && isOdd)
11201 y = y.redNeg();
11202
11203 return this.point(x, y);
11204};
11205
11206EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
11207 y = new BN(y, 16);
11208 if (!y.red)
11209 y = y.toRed(this.red);
11210
11211 // x^2 = (y^2 - 1) / (d y^2 + 1)
11212 var y2 = y.redSqr();
11213 var lhs = y2.redSub(this.one);
11214 var rhs = y2.redMul(this.d).redAdd(this.one);
11215 var x2 = lhs.redMul(rhs.redInvm());
11216
11217 if (x2.cmp(this.zero) === 0) {
11218 if (odd)
11219 throw new Error('invalid point');
11220 else
11221 return this.point(this.zero, y);
11222 }
11223
11224 var x = x2.redSqrt();
11225 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
11226 throw new Error('invalid point');
11227
11228 if (x.isOdd() !== odd)
11229 x = x.redNeg();
11230
11231 return this.point(x, y);
11232};
11233
11234EdwardsCurve.prototype.validate = function validate(point) {
11235 if (point.isInfinity())
11236 return true;
11237
11238 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
11239 point.normalize();
11240
11241 var x2 = point.x.redSqr();
11242 var y2 = point.y.redSqr();
11243 var lhs = x2.redMul(this.a).redAdd(y2);
11244 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
11245
11246 return lhs.cmp(rhs) === 0;
11247};
11248
11249function Point(curve, x, y, z, t) {
11250 Base.BasePoint.call(this, curve, 'projective');
11251 if (x === null && y === null && z === null) {
11252 this.x = this.curve.zero;
11253 this.y = this.curve.one;
11254 this.z = this.curve.one;
11255 this.t = this.curve.zero;
11256 this.zOne = true;
11257 } else {
11258 this.x = new BN(x, 16);
11259 this.y = new BN(y, 16);
11260 this.z = z ? new BN(z, 16) : this.curve.one;
11261 this.t = t && new BN(t, 16);
11262 if (!this.x.red)
11263 this.x = this.x.toRed(this.curve.red);
11264 if (!this.y.red)
11265 this.y = this.y.toRed(this.curve.red);
11266 if (!this.z.red)
11267 this.z = this.z.toRed(this.curve.red);
11268 if (this.t && !this.t.red)
11269 this.t = this.t.toRed(this.curve.red);
11270 this.zOne = this.z === this.curve.one;
11271
11272 // Use extended coordinates
11273 if (this.curve.extended && !this.t) {
11274 this.t = this.x.redMul(this.y);
11275 if (!this.zOne)
11276 this.t = this.t.redMul(this.z.redInvm());
11277 }
11278 }
11279}
11280inherits(Point, Base.BasePoint);
11281
11282EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
11283 return Point.fromJSON(this, obj);
11284};
11285
11286EdwardsCurve.prototype.point = function point(x, y, z, t) {
11287 return new Point(this, x, y, z, t);
11288};
11289
11290Point.fromJSON = function fromJSON(curve, obj) {
11291 return new Point(curve, obj[0], obj[1], obj[2]);
11292};
11293
11294Point.prototype.inspect = function inspect() {
11295 if (this.isInfinity())
11296 return '<EC Point Infinity>';
11297 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
11298 ' y: ' + this.y.fromRed().toString(16, 2) +
11299 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
11300};
11301
11302Point.prototype.isInfinity = function isInfinity() {
11303 // XXX This code assumes that zero is always zero in red
11304 return this.x.cmpn(0) === 0 &&
11305 this.y.cmp(this.z) === 0;
11306};
11307
11308Point.prototype._extDbl = function _extDbl() {
11309 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
11310 // #doubling-dbl-2008-hwcd
11311 // 4M + 4S
11312
11313 // A = X1^2
11314 var a = this.x.redSqr();
11315 // B = Y1^2
11316 var b = this.y.redSqr();
11317 // C = 2 * Z1^2
11318 var c = this.z.redSqr();
11319 c = c.redIAdd(c);
11320 // D = a * A
11321 var d = this.curve._mulA(a);
11322 // E = (X1 + Y1)^2 - A - B
11323 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
11324 // G = D + B
11325 var g = d.redAdd(b);
11326 // F = G - C
11327 var f = g.redSub(c);
11328 // H = D - B
11329 var h = d.redSub(b);
11330 // X3 = E * F
11331 var nx = e.redMul(f);
11332 // Y3 = G * H
11333 var ny = g.redMul(h);
11334 // T3 = E * H
11335 var nt = e.redMul(h);
11336 // Z3 = F * G
11337 var nz = f.redMul(g);
11338 return this.curve.point(nx, ny, nz, nt);
11339};
11340
11341Point.prototype._projDbl = function _projDbl() {
11342 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
11343 // #doubling-dbl-2008-bbjlp
11344 // #doubling-dbl-2007-bl
11345 // and others
11346 // Generally 3M + 4S or 2M + 4S
11347
11348 // B = (X1 + Y1)^2
11349 var b = this.x.redAdd(this.y).redSqr();
11350 // C = X1^2
11351 var c = this.x.redSqr();
11352 // D = Y1^2
11353 var d = this.y.redSqr();
11354
11355 var nx;
11356 var ny;
11357 var nz;
11358 if (this.curve.twisted) {
11359 // E = a * C
11360 var e = this.curve._mulA(c);
11361 // F = E + D
11362 var f = e.redAdd(d);
11363 if (this.zOne) {
11364 // X3 = (B - C - D) * (F - 2)
11365 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
11366 // Y3 = F * (E - D)
11367 ny = f.redMul(e.redSub(d));
11368 // Z3 = F^2 - 2 * F
11369 nz = f.redSqr().redSub(f).redSub(f);
11370 } else {
11371 // H = Z1^2
11372 var h = this.z.redSqr();
11373 // J = F - 2 * H
11374 var j = f.redSub(h).redISub(h);
11375 // X3 = (B-C-D)*J
11376 nx = b.redSub(c).redISub(d).redMul(j);
11377 // Y3 = F * (E - D)
11378 ny = f.redMul(e.redSub(d));
11379 // Z3 = F * J
11380 nz = f.redMul(j);
11381 }
11382 } else {
11383 // E = C + D
11384 var e = c.redAdd(d);
11385 // H = (c * Z1)^2
11386 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
11387 // J = E - 2 * H
11388 var j = e.redSub(h).redSub(h);
11389 // X3 = c * (B - E) * J
11390 nx = this.curve._mulC(b.redISub(e)).redMul(j);
11391 // Y3 = c * E * (C - D)
11392 ny = this.curve._mulC(e).redMul(c.redISub(d));
11393 // Z3 = E * J
11394 nz = e.redMul(j);
11395 }
11396 return this.curve.point(nx, ny, nz);
11397};
11398
11399Point.prototype.dbl = function dbl() {
11400 if (this.isInfinity())
11401 return this;
11402
11403 // Double in extended coordinates
11404 if (this.curve.extended)
11405 return this._extDbl();
11406 else
11407 return this._projDbl();
11408};
11409
11410Point.prototype._extAdd = function _extAdd(p) {
11411 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
11412 // #addition-add-2008-hwcd-3
11413 // 8M
11414
11415 // A = (Y1 - X1) * (Y2 - X2)
11416 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
11417 // B = (Y1 + X1) * (Y2 + X2)
11418 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
11419 // C = T1 * k * T2
11420 var c = this.t.redMul(this.curve.dd).redMul(p.t);
11421 // D = Z1 * 2 * Z2
11422 var d = this.z.redMul(p.z.redAdd(p.z));
11423 // E = B - A
11424 var e = b.redSub(a);
11425 // F = D - C
11426 var f = d.redSub(c);
11427 // G = D + C
11428 var g = d.redAdd(c);
11429 // H = B + A
11430 var h = b.redAdd(a);
11431 // X3 = E * F
11432 var nx = e.redMul(f);
11433 // Y3 = G * H
11434 var ny = g.redMul(h);
11435 // T3 = E * H
11436 var nt = e.redMul(h);
11437 // Z3 = F * G
11438 var nz = f.redMul(g);
11439 return this.curve.point(nx, ny, nz, nt);
11440};
11441
11442Point.prototype._projAdd = function _projAdd(p) {
11443 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
11444 // #addition-add-2008-bbjlp
11445 // #addition-add-2007-bl
11446 // 10M + 1S
11447
11448 // A = Z1 * Z2
11449 var a = this.z.redMul(p.z);
11450 // B = A^2
11451 var b = a.redSqr();
11452 // C = X1 * X2
11453 var c = this.x.redMul(p.x);
11454 // D = Y1 * Y2
11455 var d = this.y.redMul(p.y);
11456 // E = d * C * D
11457 var e = this.curve.d.redMul(c).redMul(d);
11458 // F = B - E
11459 var f = b.redSub(e);
11460 // G = B + E
11461 var g = b.redAdd(e);
11462 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
11463 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
11464 var nx = a.redMul(f).redMul(tmp);
11465 var ny;
11466 var nz;
11467 if (this.curve.twisted) {
11468 // Y3 = A * G * (D - a * C)
11469 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
11470 // Z3 = F * G
11471 nz = f.redMul(g);
11472 } else {
11473 // Y3 = A * G * (D - C)
11474 ny = a.redMul(g).redMul(d.redSub(c));
11475 // Z3 = c * F * G
11476 nz = this.curve._mulC(f).redMul(g);
11477 }
11478 return this.curve.point(nx, ny, nz);
11479};
11480
11481Point.prototype.add = function add(p) {
11482 if (this.isInfinity())
11483 return p;
11484 if (p.isInfinity())
11485 return this;
11486
11487 if (this.curve.extended)
11488 return this._extAdd(p);
11489 else
11490 return this._projAdd(p);
11491};
11492
11493Point.prototype.mul = function mul(k) {
11494 if (this._hasDoubles(k))
11495 return this.curve._fixedNafMul(this, k);
11496 else
11497 return this.curve._wnafMul(this, k);
11498};
11499
11500Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
11501 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
11502};
11503
11504Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
11505 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
11506};
11507
11508Point.prototype.normalize = function normalize() {
11509 if (this.zOne)
11510 return this;
11511
11512 // Normalize coordinates
11513 var zi = this.z.redInvm();
11514 this.x = this.x.redMul(zi);
11515 this.y = this.y.redMul(zi);
11516 if (this.t)
11517 this.t = this.t.redMul(zi);
11518 this.z = this.curve.one;
11519 this.zOne = true;
11520 return this;
11521};
11522
11523Point.prototype.neg = function neg() {
11524 return this.curve.point(this.x.redNeg(),
11525 this.y,
11526 this.z,
11527 this.t && this.t.redNeg());
11528};
11529
11530Point.prototype.getX = function getX() {
11531 this.normalize();
11532 return this.x.fromRed();
11533};
11534
11535Point.prototype.getY = function getY() {
11536 this.normalize();
11537 return this.y.fromRed();
11538};
11539
11540Point.prototype.eq = function eq(other) {
11541 return this === other ||
11542 this.getX().cmp(other.getX()) === 0 &&
11543 this.getY().cmp(other.getY()) === 0;
11544};
11545
11546Point.prototype.eqXToP = function eqXToP(x) {
11547 var rx = x.toRed(this.curve.red).redMul(this.z);
11548 if (this.x.cmp(rx) === 0)
11549 return true;
11550
11551 var xc = x.clone();
11552 var t = this.curve.redN.redMul(this.z);
11553 for (;;) {
11554 xc.iadd(this.curve.n);
11555 if (xc.cmp(this.curve.p) >= 0)
11556 return false;
11557
11558 rx.redIAdd(t);
11559 if (this.x.cmp(rx) === 0)
11560 return true;
11561 }
11562 return false;
11563};
11564
11565// Compatibility with BaseCurve
11566Point.prototype.toP = Point.prototype.normalize;
11567Point.prototype.mixedAdd = Point.prototype.add;
11568
11569},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
11570'use strict';
11571
11572var curve = exports;
11573
11574curve.base = require('./base');
11575curve.short = require('./short');
11576curve.mont = require('./mont');
11577curve.edwards = require('./edwards');
11578
11579},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
11580'use strict';
11581
11582var curve = require('../curve');
11583var BN = require('bn.js');
11584var inherits = require('inherits');
11585var Base = curve.base;
11586
11587var elliptic = require('../../elliptic');
11588var utils = elliptic.utils;
11589
11590function MontCurve(conf) {
11591 Base.call(this, 'mont', conf);
11592
11593 this.a = new BN(conf.a, 16).toRed(this.red);
11594 this.b = new BN(conf.b, 16).toRed(this.red);
11595 this.i4 = new BN(4).toRed(this.red).redInvm();
11596 this.two = new BN(2).toRed(this.red);
11597 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
11598}
11599inherits(MontCurve, Base);
11600module.exports = MontCurve;
11601
11602MontCurve.prototype.validate = function validate(point) {
11603 var x = point.normalize().x;
11604 var x2 = x.redSqr();
11605 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
11606 var y = rhs.redSqrt();
11607
11608 return y.redSqr().cmp(rhs) === 0;
11609};
11610
11611function Point(curve, x, z) {
11612 Base.BasePoint.call(this, curve, 'projective');
11613 if (x === null && z === null) {
11614 this.x = this.curve.one;
11615 this.z = this.curve.zero;
11616 } else {
11617 this.x = new BN(x, 16);
11618 this.z = new BN(z, 16);
11619 if (!this.x.red)
11620 this.x = this.x.toRed(this.curve.red);
11621 if (!this.z.red)
11622 this.z = this.z.toRed(this.curve.red);
11623 }
11624}
11625inherits(Point, Base.BasePoint);
11626
11627MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
11628 return this.point(utils.toArray(bytes, enc), 1);
11629};
11630
11631MontCurve.prototype.point = function point(x, z) {
11632 return new Point(this, x, z);
11633};
11634
11635MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
11636 return Point.fromJSON(this, obj);
11637};
11638
11639Point.prototype.precompute = function precompute() {
11640 // No-op
11641};
11642
11643Point.prototype._encode = function _encode() {
11644 return this.getX().toArray('be', this.curve.p.byteLength());
11645};
11646
11647Point.fromJSON = function fromJSON(curve, obj) {
11648 return new Point(curve, obj[0], obj[1] || curve.one);
11649};
11650
11651Point.prototype.inspect = function inspect() {
11652 if (this.isInfinity())
11653 return '<EC Point Infinity>';
11654 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
11655 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
11656};
11657
11658Point.prototype.isInfinity = function isInfinity() {
11659 // XXX This code assumes that zero is always zero in red
11660 return this.z.cmpn(0) === 0;
11661};
11662
11663Point.prototype.dbl = function dbl() {
11664 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
11665 // 2M + 2S + 4A
11666
11667 // A = X1 + Z1
11668 var a = this.x.redAdd(this.z);
11669 // AA = A^2
11670 var aa = a.redSqr();
11671 // B = X1 - Z1
11672 var b = this.x.redSub(this.z);
11673 // BB = B^2
11674 var bb = b.redSqr();
11675 // C = AA - BB
11676 var c = aa.redSub(bb);
11677 // X3 = AA * BB
11678 var nx = aa.redMul(bb);
11679 // Z3 = C * (BB + A24 * C)
11680 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
11681 return this.curve.point(nx, nz);
11682};
11683
11684Point.prototype.add = function add() {
11685 throw new Error('Not supported on Montgomery curve');
11686};
11687
11688Point.prototype.diffAdd = function diffAdd(p, diff) {
11689 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
11690 // 4M + 2S + 6A
11691
11692 // A = X2 + Z2
11693 var a = this.x.redAdd(this.z);
11694 // B = X2 - Z2
11695 var b = this.x.redSub(this.z);
11696 // C = X3 + Z3
11697 var c = p.x.redAdd(p.z);
11698 // D = X3 - Z3
11699 var d = p.x.redSub(p.z);
11700 // DA = D * A
11701 var da = d.redMul(a);
11702 // CB = C * B
11703 var cb = c.redMul(b);
11704 // X5 = Z1 * (DA + CB)^2
11705 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
11706 // Z5 = X1 * (DA - CB)^2
11707 var nz = diff.x.redMul(da.redISub(cb).redSqr());
11708 return this.curve.point(nx, nz);
11709};
11710
11711Point.prototype.mul = function mul(k) {
11712 var t = k.clone();
11713 var a = this; // (N / 2) * Q + Q
11714 var b = this.curve.point(null, null); // (N / 2) * Q
11715 var c = this; // Q
11716
11717 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
11718 bits.push(t.andln(1));
11719
11720 for (var i = bits.length - 1; i >= 0; i--) {
11721 if (bits[i] === 0) {
11722 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
11723 a = a.diffAdd(b, c);
11724 // N * Q = 2 * ((N / 2) * Q + Q))
11725 b = b.dbl();
11726 } else {
11727 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
11728 b = a.diffAdd(b, c);
11729 // N * Q + Q = 2 * ((N / 2) * Q + Q)
11730 a = a.dbl();
11731 }
11732 }
11733 return b;
11734};
11735
11736Point.prototype.mulAdd = function mulAdd() {
11737 throw new Error('Not supported on Montgomery curve');
11738};
11739
11740Point.prototype.jumlAdd = function jumlAdd() {
11741 throw new Error('Not supported on Montgomery curve');
11742};
11743
11744Point.prototype.eq = function eq(other) {
11745 return this.getX().cmp(other.getX()) === 0;
11746};
11747
11748Point.prototype.normalize = function normalize() {
11749 this.x = this.x.redMul(this.z.redInvm());
11750 this.z = this.curve.one;
11751 return this;
11752};
11753
11754Point.prototype.getX = function getX() {
11755 // Normalize coordinates
11756 this.normalize();
11757
11758 return this.x.fromRed();
11759};
11760
11761},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
11762'use strict';
11763
11764var curve = require('../curve');
11765var elliptic = require('../../elliptic');
11766var BN = require('bn.js');
11767var inherits = require('inherits');
11768var Base = curve.base;
11769
11770var assert = elliptic.utils.assert;
11771
11772function ShortCurve(conf) {
11773 Base.call(this, 'short', conf);
11774
11775 this.a = new BN(conf.a, 16).toRed(this.red);
11776 this.b = new BN(conf.b, 16).toRed(this.red);
11777 this.tinv = this.two.redInvm();
11778
11779 this.zeroA = this.a.fromRed().cmpn(0) === 0;
11780 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
11781
11782 // If the curve is endomorphic, precalculate beta and lambda
11783 this.endo = this._getEndomorphism(conf);
11784 this._endoWnafT1 = new Array(4);
11785 this._endoWnafT2 = new Array(4);
11786}
11787inherits(ShortCurve, Base);
11788module.exports = ShortCurve;
11789
11790ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
11791 // No efficient endomorphism
11792 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
11793 return;
11794
11795 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
11796 var beta;
11797 var lambda;
11798 if (conf.beta) {
11799 beta = new BN(conf.beta, 16).toRed(this.red);
11800 } else {
11801 var betas = this._getEndoRoots(this.p);
11802 // Choose the smallest beta
11803 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
11804 beta = beta.toRed(this.red);
11805 }
11806 if (conf.lambda) {
11807 lambda = new BN(conf.lambda, 16);
11808 } else {
11809 // Choose the lambda that is matching selected beta
11810 var lambdas = this._getEndoRoots(this.n);
11811 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
11812 lambda = lambdas[0];
11813 } else {
11814 lambda = lambdas[1];
11815 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
11816 }
11817 }
11818
11819 // Get basis vectors, used for balanced length-two representation
11820 var basis;
11821 if (conf.basis) {
11822 basis = conf.basis.map(function(vec) {
11823 return {
11824 a: new BN(vec.a, 16),
11825 b: new BN(vec.b, 16)
11826 };
11827 });
11828 } else {
11829 basis = this._getEndoBasis(lambda);
11830 }
11831
11832 return {
11833 beta: beta,
11834 lambda: lambda,
11835 basis: basis
11836 };
11837};
11838
11839ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
11840 // Find roots of for x^2 + x + 1 in F
11841 // Root = (-1 +- Sqrt(-3)) / 2
11842 //
11843 var red = num === this.p ? this.red : BN.mont(num);
11844 var tinv = new BN(2).toRed(red).redInvm();
11845 var ntinv = tinv.redNeg();
11846
11847 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
11848
11849 var l1 = ntinv.redAdd(s).fromRed();
11850 var l2 = ntinv.redSub(s).fromRed();
11851 return [ l1, l2 ];
11852};
11853
11854ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
11855 // aprxSqrt >= sqrt(this.n)
11856 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
11857
11858 // 3.74
11859 // Run EGCD, until r(L + 1) < aprxSqrt
11860 var u = lambda;
11861 var v = this.n.clone();
11862 var x1 = new BN(1);
11863 var y1 = new BN(0);
11864 var x2 = new BN(0);
11865 var y2 = new BN(1);
11866
11867 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
11868 var a0;
11869 var b0;
11870 // First vector
11871 var a1;
11872 var b1;
11873 // Second vector
11874 var a2;
11875 var b2;
11876
11877 var prevR;
11878 var i = 0;
11879 var r;
11880 var x;
11881 while (u.cmpn(0) !== 0) {
11882 var q = v.div(u);
11883 r = v.sub(q.mul(u));
11884 x = x2.sub(q.mul(x1));
11885 var y = y2.sub(q.mul(y1));
11886
11887 if (!a1 && r.cmp(aprxSqrt) < 0) {
11888 a0 = prevR.neg();
11889 b0 = x1;
11890 a1 = r.neg();
11891 b1 = x;
11892 } else if (a1 && ++i === 2) {
11893 break;
11894 }
11895 prevR = r;
11896
11897 v = u;
11898 u = r;
11899 x2 = x1;
11900 x1 = x;
11901 y2 = y1;
11902 y1 = y;
11903 }
11904 a2 = r.neg();
11905 b2 = x;
11906
11907 var len1 = a1.sqr().add(b1.sqr());
11908 var len2 = a2.sqr().add(b2.sqr());
11909 if (len2.cmp(len1) >= 0) {
11910 a2 = a0;
11911 b2 = b0;
11912 }
11913
11914 // Normalize signs
11915 if (a1.negative) {
11916 a1 = a1.neg();
11917 b1 = b1.neg();
11918 }
11919 if (a2.negative) {
11920 a2 = a2.neg();
11921 b2 = b2.neg();
11922 }
11923
11924 return [
11925 { a: a1, b: b1 },
11926 { a: a2, b: b2 }
11927 ];
11928};
11929
11930ShortCurve.prototype._endoSplit = function _endoSplit(k) {
11931 var basis = this.endo.basis;
11932 var v1 = basis[0];
11933 var v2 = basis[1];
11934
11935 var c1 = v2.b.mul(k).divRound(this.n);
11936 var c2 = v1.b.neg().mul(k).divRound(this.n);
11937
11938 var p1 = c1.mul(v1.a);
11939 var p2 = c2.mul(v2.a);
11940 var q1 = c1.mul(v1.b);
11941 var q2 = c2.mul(v2.b);
11942
11943 // Calculate answer
11944 var k1 = k.sub(p1).sub(p2);
11945 var k2 = q1.add(q2).neg();
11946 return { k1: k1, k2: k2 };
11947};
11948
11949ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
11950 x = new BN(x, 16);
11951 if (!x.red)
11952 x = x.toRed(this.red);
11953
11954 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
11955 var y = y2.redSqrt();
11956 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
11957 throw new Error('invalid point');
11958
11959 // XXX Is there any way to tell if the number is odd without converting it
11960 // to non-red form?
11961 var isOdd = y.fromRed().isOdd();
11962 if (odd && !isOdd || !odd && isOdd)
11963 y = y.redNeg();
11964
11965 return this.point(x, y);
11966};
11967
11968ShortCurve.prototype.validate = function validate(point) {
11969 if (point.inf)
11970 return true;
11971
11972 var x = point.x;
11973 var y = point.y;
11974
11975 var ax = this.a.redMul(x);
11976 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
11977 return y.redSqr().redISub(rhs).cmpn(0) === 0;
11978};
11979
11980ShortCurve.prototype._endoWnafMulAdd =
11981 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
11982 var npoints = this._endoWnafT1;
11983 var ncoeffs = this._endoWnafT2;
11984 for (var i = 0; i < points.length; i++) {
11985 var split = this._endoSplit(coeffs[i]);
11986 var p = points[i];
11987 var beta = p._getBeta();
11988
11989 if (split.k1.negative) {
11990 split.k1.ineg();
11991 p = p.neg(true);
11992 }
11993 if (split.k2.negative) {
11994 split.k2.ineg();
11995 beta = beta.neg(true);
11996 }
11997
11998 npoints[i * 2] = p;
11999 npoints[i * 2 + 1] = beta;
12000 ncoeffs[i * 2] = split.k1;
12001 ncoeffs[i * 2 + 1] = split.k2;
12002 }
12003 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
12004
12005 // Clean-up references to points and coefficients
12006 for (var j = 0; j < i * 2; j++) {
12007 npoints[j] = null;
12008 ncoeffs[j] = null;
12009 }
12010 return res;
12011};
12012
12013function Point(curve, x, y, isRed) {
12014 Base.BasePoint.call(this, curve, 'affine');
12015 if (x === null && y === null) {
12016 this.x = null;
12017 this.y = null;
12018 this.inf = true;
12019 } else {
12020 this.x = new BN(x, 16);
12021 this.y = new BN(y, 16);
12022 // Force redgomery representation when loading from JSON
12023 if (isRed) {
12024 this.x.forceRed(this.curve.red);
12025 this.y.forceRed(this.curve.red);
12026 }
12027 if (!this.x.red)
12028 this.x = this.x.toRed(this.curve.red);
12029 if (!this.y.red)
12030 this.y = this.y.toRed(this.curve.red);
12031 this.inf = false;
12032 }
12033}
12034inherits(Point, Base.BasePoint);
12035
12036ShortCurve.prototype.point = function point(x, y, isRed) {
12037 return new Point(this, x, y, isRed);
12038};
12039
12040ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
12041 return Point.fromJSON(this, obj, red);
12042};
12043
12044Point.prototype._getBeta = function _getBeta() {
12045 if (!this.curve.endo)
12046 return;
12047
12048 var pre = this.precomputed;
12049 if (pre && pre.beta)
12050 return pre.beta;
12051
12052 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
12053 if (pre) {
12054 var curve = this.curve;
12055 var endoMul = function(p) {
12056 return curve.point(p.x.redMul(curve.endo.beta), p.y);
12057 };
12058 pre.beta = beta;
12059 beta.precomputed = {
12060 beta: null,
12061 naf: pre.naf && {
12062 wnd: pre.naf.wnd,
12063 points: pre.naf.points.map(endoMul)
12064 },
12065 doubles: pre.doubles && {
12066 step: pre.doubles.step,
12067 points: pre.doubles.points.map(endoMul)
12068 }
12069 };
12070 }
12071 return beta;
12072};
12073
12074Point.prototype.toJSON = function toJSON() {
12075 if (!this.precomputed)
12076 return [ this.x, this.y ];
12077
12078 return [ this.x, this.y, this.precomputed && {
12079 doubles: this.precomputed.doubles && {
12080 step: this.precomputed.doubles.step,
12081 points: this.precomputed.doubles.points.slice(1)
12082 },
12083 naf: this.precomputed.naf && {
12084 wnd: this.precomputed.naf.wnd,
12085 points: this.precomputed.naf.points.slice(1)
12086 }
12087 } ];
12088};
12089
12090Point.fromJSON = function fromJSON(curve, obj, red) {
12091 if (typeof obj === 'string')
12092 obj = JSON.parse(obj);
12093 var res = curve.point(obj[0], obj[1], red);
12094 if (!obj[2])
12095 return res;
12096
12097 function obj2point(obj) {
12098 return curve.point(obj[0], obj[1], red);
12099 }
12100
12101 var pre = obj[2];
12102 res.precomputed = {
12103 beta: null,
12104 doubles: pre.doubles && {
12105 step: pre.doubles.step,
12106 points: [ res ].concat(pre.doubles.points.map(obj2point))
12107 },
12108 naf: pre.naf && {
12109 wnd: pre.naf.wnd,
12110 points: [ res ].concat(pre.naf.points.map(obj2point))
12111 }
12112 };
12113 return res;
12114};
12115
12116Point.prototype.inspect = function inspect() {
12117 if (this.isInfinity())
12118 return '<EC Point Infinity>';
12119 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
12120 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
12121};
12122
12123Point.prototype.isInfinity = function isInfinity() {
12124 return this.inf;
12125};
12126
12127Point.prototype.add = function add(p) {
12128 // O + P = P
12129 if (this.inf)
12130 return p;
12131
12132 // P + O = P
12133 if (p.inf)
12134 return this;
12135
12136 // P + P = 2P
12137 if (this.eq(p))
12138 return this.dbl();
12139
12140 // P + (-P) = O
12141 if (this.neg().eq(p))
12142 return this.curve.point(null, null);
12143
12144 // P + Q = O
12145 if (this.x.cmp(p.x) === 0)
12146 return this.curve.point(null, null);
12147
12148 var c = this.y.redSub(p.y);
12149 if (c.cmpn(0) !== 0)
12150 c = c.redMul(this.x.redSub(p.x).redInvm());
12151 var nx = c.redSqr().redISub(this.x).redISub(p.x);
12152 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
12153 return this.curve.point(nx, ny);
12154};
12155
12156Point.prototype.dbl = function dbl() {
12157 if (this.inf)
12158 return this;
12159
12160 // 2P = O
12161 var ys1 = this.y.redAdd(this.y);
12162 if (ys1.cmpn(0) === 0)
12163 return this.curve.point(null, null);
12164
12165 var a = this.curve.a;
12166
12167 var x2 = this.x.redSqr();
12168 var dyinv = ys1.redInvm();
12169 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
12170
12171 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
12172 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
12173 return this.curve.point(nx, ny);
12174};
12175
12176Point.prototype.getX = function getX() {
12177 return this.x.fromRed();
12178};
12179
12180Point.prototype.getY = function getY() {
12181 return this.y.fromRed();
12182};
12183
12184Point.prototype.mul = function mul(k) {
12185 k = new BN(k, 16);
12186
12187 if (this._hasDoubles(k))
12188 return this.curve._fixedNafMul(this, k);
12189 else if (this.curve.endo)
12190 return this.curve._endoWnafMulAdd([ this ], [ k ]);
12191 else
12192 return this.curve._wnafMul(this, k);
12193};
12194
12195Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
12196 var points = [ this, p2 ];
12197 var coeffs = [ k1, k2 ];
12198 if (this.curve.endo)
12199 return this.curve._endoWnafMulAdd(points, coeffs);
12200 else
12201 return this.curve._wnafMulAdd(1, points, coeffs, 2);
12202};
12203
12204Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
12205 var points = [ this, p2 ];
12206 var coeffs = [ k1, k2 ];
12207 if (this.curve.endo)
12208 return this.curve._endoWnafMulAdd(points, coeffs, true);
12209 else
12210 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
12211};
12212
12213Point.prototype.eq = function eq(p) {
12214 return this === p ||
12215 this.inf === p.inf &&
12216 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
12217};
12218
12219Point.prototype.neg = function neg(_precompute) {
12220 if (this.inf)
12221 return this;
12222
12223 var res = this.curve.point(this.x, this.y.redNeg());
12224 if (_precompute && this.precomputed) {
12225 var pre = this.precomputed;
12226 var negate = function(p) {
12227 return p.neg();
12228 };
12229 res.precomputed = {
12230 naf: pre.naf && {
12231 wnd: pre.naf.wnd,
12232 points: pre.naf.points.map(negate)
12233 },
12234 doubles: pre.doubles && {
12235 step: pre.doubles.step,
12236 points: pre.doubles.points.map(negate)
12237 }
12238 };
12239 }
12240 return res;
12241};
12242
12243Point.prototype.toJ = function toJ() {
12244 if (this.inf)
12245 return this.curve.jpoint(null, null, null);
12246
12247 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
12248 return res;
12249};
12250
12251function JPoint(curve, x, y, z) {
12252 Base.BasePoint.call(this, curve, 'jacobian');
12253 if (x === null && y === null && z === null) {
12254 this.x = this.curve.one;
12255 this.y = this.curve.one;
12256 this.z = new BN(0);
12257 } else {
12258 this.x = new BN(x, 16);
12259 this.y = new BN(y, 16);
12260 this.z = new BN(z, 16);
12261 }
12262 if (!this.x.red)
12263 this.x = this.x.toRed(this.curve.red);
12264 if (!this.y.red)
12265 this.y = this.y.toRed(this.curve.red);
12266 if (!this.z.red)
12267 this.z = this.z.toRed(this.curve.red);
12268
12269 this.zOne = this.z === this.curve.one;
12270}
12271inherits(JPoint, Base.BasePoint);
12272
12273ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
12274 return new JPoint(this, x, y, z);
12275};
12276
12277JPoint.prototype.toP = function toP() {
12278 if (this.isInfinity())
12279 return this.curve.point(null, null);
12280
12281 var zinv = this.z.redInvm();
12282 var zinv2 = zinv.redSqr();
12283 var ax = this.x.redMul(zinv2);
12284 var ay = this.y.redMul(zinv2).redMul(zinv);
12285
12286 return this.curve.point(ax, ay);
12287};
12288
12289JPoint.prototype.neg = function neg() {
12290 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
12291};
12292
12293JPoint.prototype.add = function add(p) {
12294 // O + P = P
12295 if (this.isInfinity())
12296 return p;
12297
12298 // P + O = P
12299 if (p.isInfinity())
12300 return this;
12301
12302 // 12M + 4S + 7A
12303 var pz2 = p.z.redSqr();
12304 var z2 = this.z.redSqr();
12305 var u1 = this.x.redMul(pz2);
12306 var u2 = p.x.redMul(z2);
12307 var s1 = this.y.redMul(pz2.redMul(p.z));
12308 var s2 = p.y.redMul(z2.redMul(this.z));
12309
12310 var h = u1.redSub(u2);
12311 var r = s1.redSub(s2);
12312 if (h.cmpn(0) === 0) {
12313 if (r.cmpn(0) !== 0)
12314 return this.curve.jpoint(null, null, null);
12315 else
12316 return this.dbl();
12317 }
12318
12319 var h2 = h.redSqr();
12320 var h3 = h2.redMul(h);
12321 var v = u1.redMul(h2);
12322
12323 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
12324 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
12325 var nz = this.z.redMul(p.z).redMul(h);
12326
12327 return this.curve.jpoint(nx, ny, nz);
12328};
12329
12330JPoint.prototype.mixedAdd = function mixedAdd(p) {
12331 // O + P = P
12332 if (this.isInfinity())
12333 return p.toJ();
12334
12335 // P + O = P
12336 if (p.isInfinity())
12337 return this;
12338
12339 // 8M + 3S + 7A
12340 var z2 = this.z.redSqr();
12341 var u1 = this.x;
12342 var u2 = p.x.redMul(z2);
12343 var s1 = this.y;
12344 var s2 = p.y.redMul(z2).redMul(this.z);
12345
12346 var h = u1.redSub(u2);
12347 var r = s1.redSub(s2);
12348 if (h.cmpn(0) === 0) {
12349 if (r.cmpn(0) !== 0)
12350 return this.curve.jpoint(null, null, null);
12351 else
12352 return this.dbl();
12353 }
12354
12355 var h2 = h.redSqr();
12356 var h3 = h2.redMul(h);
12357 var v = u1.redMul(h2);
12358
12359 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
12360 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
12361 var nz = this.z.redMul(h);
12362
12363 return this.curve.jpoint(nx, ny, nz);
12364};
12365
12366JPoint.prototype.dblp = function dblp(pow) {
12367 if (pow === 0)
12368 return this;
12369 if (this.isInfinity())
12370 return this;
12371 if (!pow)
12372 return this.dbl();
12373
12374 if (this.curve.zeroA || this.curve.threeA) {
12375 var r = this;
12376 for (var i = 0; i < pow; i++)
12377 r = r.dbl();
12378 return r;
12379 }
12380
12381 // 1M + 2S + 1A + N * (4S + 5M + 8A)
12382 // N = 1 => 6M + 6S + 9A
12383 var a = this.curve.a;
12384 var tinv = this.curve.tinv;
12385
12386 var jx = this.x;
12387 var jy = this.y;
12388 var jz = this.z;
12389 var jz4 = jz.redSqr().redSqr();
12390
12391 // Reuse results
12392 var jyd = jy.redAdd(jy);
12393 for (var i = 0; i < pow; i++) {
12394 var jx2 = jx.redSqr();
12395 var jyd2 = jyd.redSqr();
12396 var jyd4 = jyd2.redSqr();
12397 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
12398
12399 var t1 = jx.redMul(jyd2);
12400 var nx = c.redSqr().redISub(t1.redAdd(t1));
12401 var t2 = t1.redISub(nx);
12402 var dny = c.redMul(t2);
12403 dny = dny.redIAdd(dny).redISub(jyd4);
12404 var nz = jyd.redMul(jz);
12405 if (i + 1 < pow)
12406 jz4 = jz4.redMul(jyd4);
12407
12408 jx = nx;
12409 jz = nz;
12410 jyd = dny;
12411 }
12412
12413 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
12414};
12415
12416JPoint.prototype.dbl = function dbl() {
12417 if (this.isInfinity())
12418 return this;
12419
12420 if (this.curve.zeroA)
12421 return this._zeroDbl();
12422 else if (this.curve.threeA)
12423 return this._threeDbl();
12424 else
12425 return this._dbl();
12426};
12427
12428JPoint.prototype._zeroDbl = function _zeroDbl() {
12429 var nx;
12430 var ny;
12431 var nz;
12432 // Z = 1
12433 if (this.zOne) {
12434 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
12435 // #doubling-mdbl-2007-bl
12436 // 1M + 5S + 14A
12437
12438 // XX = X1^2
12439 var xx = this.x.redSqr();
12440 // YY = Y1^2
12441 var yy = this.y.redSqr();
12442 // YYYY = YY^2
12443 var yyyy = yy.redSqr();
12444 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
12445 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
12446 s = s.redIAdd(s);
12447 // M = 3 * XX + a; a = 0
12448 var m = xx.redAdd(xx).redIAdd(xx);
12449 // T = M ^ 2 - 2*S
12450 var t = m.redSqr().redISub(s).redISub(s);
12451
12452 // 8 * YYYY
12453 var yyyy8 = yyyy.redIAdd(yyyy);
12454 yyyy8 = yyyy8.redIAdd(yyyy8);
12455 yyyy8 = yyyy8.redIAdd(yyyy8);
12456
12457 // X3 = T
12458 nx = t;
12459 // Y3 = M * (S - T) - 8 * YYYY
12460 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
12461 // Z3 = 2*Y1
12462 nz = this.y.redAdd(this.y);
12463 } else {
12464 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
12465 // #doubling-dbl-2009-l
12466 // 2M + 5S + 13A
12467
12468 // A = X1^2
12469 var a = this.x.redSqr();
12470 // B = Y1^2
12471 var b = this.y.redSqr();
12472 // C = B^2
12473 var c = b.redSqr();
12474 // D = 2 * ((X1 + B)^2 - A - C)
12475 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
12476 d = d.redIAdd(d);
12477 // E = 3 * A
12478 var e = a.redAdd(a).redIAdd(a);
12479 // F = E^2
12480 var f = e.redSqr();
12481
12482 // 8 * C
12483 var c8 = c.redIAdd(c);
12484 c8 = c8.redIAdd(c8);
12485 c8 = c8.redIAdd(c8);
12486
12487 // X3 = F - 2 * D
12488 nx = f.redISub(d).redISub(d);
12489 // Y3 = E * (D - X3) - 8 * C
12490 ny = e.redMul(d.redISub(nx)).redISub(c8);
12491 // Z3 = 2 * Y1 * Z1
12492 nz = this.y.redMul(this.z);
12493 nz = nz.redIAdd(nz);
12494 }
12495
12496 return this.curve.jpoint(nx, ny, nz);
12497};
12498
12499JPoint.prototype._threeDbl = function _threeDbl() {
12500 var nx;
12501 var ny;
12502 var nz;
12503 // Z = 1
12504 if (this.zOne) {
12505 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
12506 // #doubling-mdbl-2007-bl
12507 // 1M + 5S + 15A
12508
12509 // XX = X1^2
12510 var xx = this.x.redSqr();
12511 // YY = Y1^2
12512 var yy = this.y.redSqr();
12513 // YYYY = YY^2
12514 var yyyy = yy.redSqr();
12515 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
12516 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
12517 s = s.redIAdd(s);
12518 // M = 3 * XX + a
12519 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
12520 // T = M^2 - 2 * S
12521 var t = m.redSqr().redISub(s).redISub(s);
12522 // X3 = T
12523 nx = t;
12524 // Y3 = M * (S - T) - 8 * YYYY
12525 var yyyy8 = yyyy.redIAdd(yyyy);
12526 yyyy8 = yyyy8.redIAdd(yyyy8);
12527 yyyy8 = yyyy8.redIAdd(yyyy8);
12528 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
12529 // Z3 = 2 * Y1
12530 nz = this.y.redAdd(this.y);
12531 } else {
12532 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
12533 // 3M + 5S
12534
12535 // delta = Z1^2
12536 var delta = this.z.redSqr();
12537 // gamma = Y1^2
12538 var gamma = this.y.redSqr();
12539 // beta = X1 * gamma
12540 var beta = this.x.redMul(gamma);
12541 // alpha = 3 * (X1 - delta) * (X1 + delta)
12542 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
12543 alpha = alpha.redAdd(alpha).redIAdd(alpha);
12544 // X3 = alpha^2 - 8 * beta
12545 var beta4 = beta.redIAdd(beta);
12546 beta4 = beta4.redIAdd(beta4);
12547 var beta8 = beta4.redAdd(beta4);
12548 nx = alpha.redSqr().redISub(beta8);
12549 // Z3 = (Y1 + Z1)^2 - gamma - delta
12550 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
12551 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
12552 var ggamma8 = gamma.redSqr();
12553 ggamma8 = ggamma8.redIAdd(ggamma8);
12554 ggamma8 = ggamma8.redIAdd(ggamma8);
12555 ggamma8 = ggamma8.redIAdd(ggamma8);
12556 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
12557 }
12558
12559 return this.curve.jpoint(nx, ny, nz);
12560};
12561
12562JPoint.prototype._dbl = function _dbl() {
12563 var a = this.curve.a;
12564
12565 // 4M + 6S + 10A
12566 var jx = this.x;
12567 var jy = this.y;
12568 var jz = this.z;
12569 var jz4 = jz.redSqr().redSqr();
12570
12571 var jx2 = jx.redSqr();
12572 var jy2 = jy.redSqr();
12573
12574 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
12575
12576 var jxd4 = jx.redAdd(jx);
12577 jxd4 = jxd4.redIAdd(jxd4);
12578 var t1 = jxd4.redMul(jy2);
12579 var nx = c.redSqr().redISub(t1.redAdd(t1));
12580 var t2 = t1.redISub(nx);
12581
12582 var jyd8 = jy2.redSqr();
12583 jyd8 = jyd8.redIAdd(jyd8);
12584 jyd8 = jyd8.redIAdd(jyd8);
12585 jyd8 = jyd8.redIAdd(jyd8);
12586 var ny = c.redMul(t2).redISub(jyd8);
12587 var nz = jy.redAdd(jy).redMul(jz);
12588
12589 return this.curve.jpoint(nx, ny, nz);
12590};
12591
12592JPoint.prototype.trpl = function trpl() {
12593 if (!this.curve.zeroA)
12594 return this.dbl().add(this);
12595
12596 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
12597 // 5M + 10S + ...
12598
12599 // XX = X1^2
12600 var xx = this.x.redSqr();
12601 // YY = Y1^2
12602 var yy = this.y.redSqr();
12603 // ZZ = Z1^2
12604 var zz = this.z.redSqr();
12605 // YYYY = YY^2
12606 var yyyy = yy.redSqr();
12607 // M = 3 * XX + a * ZZ2; a = 0
12608 var m = xx.redAdd(xx).redIAdd(xx);
12609 // MM = M^2
12610 var mm = m.redSqr();
12611 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
12612 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
12613 e = e.redIAdd(e);
12614 e = e.redAdd(e).redIAdd(e);
12615 e = e.redISub(mm);
12616 // EE = E^2
12617 var ee = e.redSqr();
12618 // T = 16*YYYY
12619 var t = yyyy.redIAdd(yyyy);
12620 t = t.redIAdd(t);
12621 t = t.redIAdd(t);
12622 t = t.redIAdd(t);
12623 // U = (M + E)^2 - MM - EE - T
12624 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
12625 // X3 = 4 * (X1 * EE - 4 * YY * U)
12626 var yyu4 = yy.redMul(u);
12627 yyu4 = yyu4.redIAdd(yyu4);
12628 yyu4 = yyu4.redIAdd(yyu4);
12629 var nx = this.x.redMul(ee).redISub(yyu4);
12630 nx = nx.redIAdd(nx);
12631 nx = nx.redIAdd(nx);
12632 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
12633 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
12634 ny = ny.redIAdd(ny);
12635 ny = ny.redIAdd(ny);
12636 ny = ny.redIAdd(ny);
12637 // Z3 = (Z1 + E)^2 - ZZ - EE
12638 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
12639
12640 return this.curve.jpoint(nx, ny, nz);
12641};
12642
12643JPoint.prototype.mul = function mul(k, kbase) {
12644 k = new BN(k, kbase);
12645
12646 return this.curve._wnafMul(this, k);
12647};
12648
12649JPoint.prototype.eq = function eq(p) {
12650 if (p.type === 'affine')
12651 return this.eq(p.toJ());
12652
12653 if (this === p)
12654 return true;
12655
12656 // x1 * z2^2 == x2 * z1^2
12657 var z2 = this.z.redSqr();
12658 var pz2 = p.z.redSqr();
12659 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
12660 return false;
12661
12662 // y1 * z2^3 == y2 * z1^3
12663 var z3 = z2.redMul(this.z);
12664 var pz3 = pz2.redMul(p.z);
12665 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
12666};
12667
12668JPoint.prototype.eqXToP = function eqXToP(x) {
12669 var zs = this.z.redSqr();
12670 var rx = x.toRed(this.curve.red).redMul(zs);
12671 if (this.x.cmp(rx) === 0)
12672 return true;
12673
12674 var xc = x.clone();
12675 var t = this.curve.redN.redMul(zs);
12676 for (;;) {
12677 xc.iadd(this.curve.n);
12678 if (xc.cmp(this.curve.p) >= 0)
12679 return false;
12680
12681 rx.redIAdd(t);
12682 if (this.x.cmp(rx) === 0)
12683 return true;
12684 }
12685 return false;
12686};
12687
12688JPoint.prototype.inspect = function inspect() {
12689 if (this.isInfinity())
12690 return '<EC JPoint Infinity>';
12691 return '<EC JPoint x: ' + this.x.toString(16, 2) +
12692 ' y: ' + this.y.toString(16, 2) +
12693 ' z: ' + this.z.toString(16, 2) + '>';
12694};
12695
12696JPoint.prototype.isInfinity = function isInfinity() {
12697 // XXX This code assumes that zero is always zero in red
12698 return this.z.cmpn(0) === 0;
12699};
12700
12701},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
12702'use strict';
12703
12704var curves = exports;
12705
12706var hash = require('hash.js');
12707var elliptic = require('../elliptic');
12708
12709var assert = elliptic.utils.assert;
12710
12711function PresetCurve(options) {
12712 if (options.type === 'short')
12713 this.curve = new elliptic.curve.short(options);
12714 else if (options.type === 'edwards')
12715 this.curve = new elliptic.curve.edwards(options);
12716 else
12717 this.curve = new elliptic.curve.mont(options);
12718 this.g = this.curve.g;
12719 this.n = this.curve.n;
12720 this.hash = options.hash;
12721
12722 assert(this.g.validate(), 'Invalid curve');
12723 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
12724}
12725curves.PresetCurve = PresetCurve;
12726
12727function defineCurve(name, options) {
12728 Object.defineProperty(curves, name, {
12729 configurable: true,
12730 enumerable: true,
12731 get: function() {
12732 var curve = new PresetCurve(options);
12733 Object.defineProperty(curves, name, {
12734 configurable: true,
12735 enumerable: true,
12736 value: curve
12737 });
12738 return curve;
12739 }
12740 });
12741}
12742
12743defineCurve('p192', {
12744 type: 'short',
12745 prime: 'p192',
12746 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
12747 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
12748 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
12749 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
12750 hash: hash.sha256,
12751 gRed: false,
12752 g: [
12753 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
12754 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
12755 ]
12756});
12757
12758defineCurve('p224', {
12759 type: 'short',
12760 prime: 'p224',
12761 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
12762 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
12763 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
12764 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
12765 hash: hash.sha256,
12766 gRed: false,
12767 g: [
12768 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
12769 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
12770 ]
12771});
12772
12773defineCurve('p256', {
12774 type: 'short',
12775 prime: null,
12776 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
12777 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
12778 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
12779 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
12780 hash: hash.sha256,
12781 gRed: false,
12782 g: [
12783 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
12784 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
12785 ]
12786});
12787
12788defineCurve('p384', {
12789 type: 'short',
12790 prime: null,
12791 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12792 'fffffffe ffffffff 00000000 00000000 ffffffff',
12793 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12794 'fffffffe ffffffff 00000000 00000000 fffffffc',
12795 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
12796 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
12797 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
12798 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
12799 hash: hash.sha384,
12800 gRed: false,
12801 g: [
12802 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
12803 '5502f25d bf55296c 3a545e38 72760ab7',
12804 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
12805 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
12806 ]
12807});
12808
12809defineCurve('p521', {
12810 type: 'short',
12811 prime: null,
12812 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12813 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12814 'ffffffff ffffffff ffffffff ffffffff ffffffff',
12815 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12816 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12817 'ffffffff ffffffff ffffffff ffffffff fffffffc',
12818 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
12819 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
12820 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
12821 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12822 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
12823 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
12824 hash: hash.sha512,
12825 gRed: false,
12826 g: [
12827 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
12828 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
12829 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
12830 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
12831 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
12832 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
12833 ]
12834});
12835
12836defineCurve('curve25519', {
12837 type: 'mont',
12838 prime: 'p25519',
12839 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
12840 a: '76d06',
12841 b: '1',
12842 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
12843 hash: hash.sha256,
12844 gRed: false,
12845 g: [
12846 '9'
12847 ]
12848});
12849
12850defineCurve('ed25519', {
12851 type: 'edwards',
12852 prime: 'p25519',
12853 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
12854 a: '-1',
12855 c: '1',
12856 // -121665 * (121666^(-1)) (mod P)
12857 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
12858 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
12859 hash: hash.sha256,
12860 gRed: false,
12861 g: [
12862 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
12863
12864 // 4/5
12865 '6666666666666666666666666666666666666666666666666666666666666658'
12866 ]
12867});
12868
12869var pre;
12870try {
12871 pre = require('./precomputed/secp256k1');
12872} catch (e) {
12873 pre = undefined;
12874}
12875
12876defineCurve('secp256k1', {
12877 type: 'short',
12878 prime: 'k256',
12879 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
12880 a: '0',
12881 b: '7',
12882 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
12883 h: '1',
12884 hash: hash.sha256,
12885
12886 // Precomputed endomorphism
12887 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
12888 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
12889 basis: [
12890 {
12891 a: '3086d221a7d46bcde86c90e49284eb15',
12892 b: '-e4437ed6010e88286f547fa90abfe4c3'
12893 },
12894 {
12895 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
12896 b: '3086d221a7d46bcde86c90e49284eb15'
12897 }
12898 ],
12899
12900 gRed: false,
12901 g: [
12902 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
12903 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
12904 pre
12905 ]
12906});
12907
12908},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
12909'use strict';
12910
12911var BN = require('bn.js');
12912var elliptic = require('../../elliptic');
12913var utils = elliptic.utils;
12914var assert = utils.assert;
12915
12916var KeyPair = require('./key');
12917var Signature = require('./signature');
12918
12919function EC(options) {
12920 if (!(this instanceof EC))
12921 return new EC(options);
12922
12923 // Shortcut `elliptic.ec(curve-name)`
12924 if (typeof options === 'string') {
12925 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
12926
12927 options = elliptic.curves[options];
12928 }
12929
12930 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
12931 if (options instanceof elliptic.curves.PresetCurve)
12932 options = { curve: options };
12933
12934 this.curve = options.curve.curve;
12935 this.n = this.curve.n;
12936 this.nh = this.n.ushrn(1);
12937 this.g = this.curve.g;
12938
12939 // Point on curve
12940 this.g = options.curve.g;
12941 this.g.precompute(options.curve.n.bitLength() + 1);
12942
12943 // Hash for function for DRBG
12944 this.hash = options.hash || options.curve.hash;
12945}
12946module.exports = EC;
12947
12948EC.prototype.keyPair = function keyPair(options) {
12949 return new KeyPair(this, options);
12950};
12951
12952EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
12953 return KeyPair.fromPrivate(this, priv, enc);
12954};
12955
12956EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
12957 return KeyPair.fromPublic(this, pub, enc);
12958};
12959
12960EC.prototype.genKeyPair = function genKeyPair(options) {
12961 if (!options)
12962 options = {};
12963
12964 // Instantiate Hmac_DRBG
12965 var drbg = new elliptic.hmacDRBG({
12966 hash: this.hash,
12967 pers: options.pers,
12968 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
12969 nonce: this.n.toArray()
12970 });
12971
12972 var bytes = this.n.byteLength();
12973 var ns2 = this.n.sub(new BN(2));
12974 do {
12975 var priv = new BN(drbg.generate(bytes));
12976 if (priv.cmp(ns2) > 0)
12977 continue;
12978
12979 priv.iaddn(1);
12980 return this.keyFromPrivate(priv);
12981 } while (true);
12982};
12983
12984EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
12985 var delta = msg.byteLength() * 8 - this.n.bitLength();
12986 if (delta > 0)
12987 msg = msg.ushrn(delta);
12988 if (!truncOnly && msg.cmp(this.n) >= 0)
12989 return msg.sub(this.n);
12990 else
12991 return msg;
12992};
12993
12994EC.prototype.sign = function sign(msg, key, enc, options) {
12995 if (typeof enc === 'object') {
12996 options = enc;
12997 enc = null;
12998 }
12999 if (!options)
13000 options = {};
13001
13002 key = this.keyFromPrivate(key, enc);
13003 msg = this._truncateToN(new BN(msg, 16));
13004
13005 // Zero-extend key to provide enough entropy
13006 var bytes = this.n.byteLength();
13007 var bkey = key.getPrivate().toArray('be', bytes);
13008
13009 // Zero-extend nonce to have the same byte size as N
13010 var nonce = msg.toArray('be', bytes);
13011
13012 // Instantiate Hmac_DRBG
13013 var drbg = new elliptic.hmacDRBG({
13014 hash: this.hash,
13015 entropy: bkey,
13016 nonce: nonce,
13017 pers: options.pers,
13018 persEnc: options.persEnc
13019 });
13020
13021 // Number of bytes to generate
13022 var ns1 = this.n.sub(new BN(1));
13023
13024 for (var iter = 0; true; iter++) {
13025 var k = options.k ?
13026 options.k(iter) :
13027 new BN(drbg.generate(this.n.byteLength()));
13028 k = this._truncateToN(k, true);
13029 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
13030 continue;
13031
13032 var kp = this.g.mul(k);
13033 if (kp.isInfinity())
13034 continue;
13035
13036 var kpX = kp.getX();
13037 var r = kpX.umod(this.n);
13038 if (r.cmpn(0) === 0)
13039 continue;
13040
13041 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
13042 s = s.umod(this.n);
13043 if (s.cmpn(0) === 0)
13044 continue;
13045
13046 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
13047 (kpX.cmp(r) !== 0 ? 2 : 0);
13048
13049 // Use complement of `s`, if it is > `n / 2`
13050 if (options.canonical && s.cmp(this.nh) > 0) {
13051 s = this.n.sub(s);
13052 recoveryParam ^= 1;
13053 }
13054
13055 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
13056 }
13057};
13058
13059EC.prototype.verify = function verify(msg, signature, key, enc) {
13060 msg = this._truncateToN(new BN(msg, 16));
13061 key = this.keyFromPublic(key, enc);
13062 signature = new Signature(signature, 'hex');
13063
13064 // Perform primitive values validation
13065 var r = signature.r;
13066 var s = signature.s;
13067 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
13068 return false;
13069 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
13070 return false;
13071
13072 // Validate signature
13073 var sinv = s.invm(this.n);
13074 var u1 = sinv.mul(msg).umod(this.n);
13075 var u2 = sinv.mul(r).umod(this.n);
13076
13077 if (!this.curve._maxwellTrick) {
13078 var p = this.g.mulAdd(u1, key.getPublic(), u2);
13079 if (p.isInfinity())
13080 return false;
13081
13082 return p.getX().umod(this.n).cmp(r) === 0;
13083 }
13084
13085 // NOTE: Greg Maxwell's trick, inspired by:
13086 // https://git.io/vad3K
13087
13088 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
13089 if (p.isInfinity())
13090 return false;
13091
13092 // Compare `p.x` of Jacobian point with `r`,
13093 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
13094 // inverse of `p.z^2`
13095 return p.eqXToP(r);
13096};
13097
13098EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
13099 assert((3 & j) === j, 'The recovery param is more than two bits');
13100 signature = new Signature(signature, enc);
13101
13102 var n = this.n;
13103 var e = new BN(msg);
13104 var r = signature.r;
13105 var s = signature.s;
13106
13107 // A set LSB signifies that the y-coordinate is odd
13108 var isYOdd = j & 1;
13109 var isSecondKey = j >> 1;
13110 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
13111 throw new Error('Unable to find sencond key candinate');
13112
13113 // 1.1. Let x = r + jn.
13114 if (isSecondKey)
13115 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
13116 else
13117 r = this.curve.pointFromX(r, isYOdd);
13118
13119 var rInv = signature.r.invm(n);
13120 var s1 = n.sub(e).mul(rInv).umod(n);
13121 var s2 = s.mul(rInv).umod(n);
13122
13123 // 1.6.1 Compute Q = r^-1 (sR - eG)
13124 // Q = r^-1 (sR + -eG)
13125 return this.g.mulAdd(s1, r, s2);
13126};
13127
13128EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
13129 signature = new Signature(signature, enc);
13130 if (signature.recoveryParam !== null)
13131 return signature.recoveryParam;
13132
13133 for (var i = 0; i < 4; i++) {
13134 var Qprime;
13135 try {
13136 Qprime = this.recoverPubKey(e, signature, i);
13137 } catch (e) {
13138 continue;
13139 }
13140
13141 if (Qprime.eq(Q))
13142 return i;
13143 }
13144 throw new Error('Unable to find valid recovery factor');
13145};
13146
13147},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
13148'use strict';
13149
13150var BN = require('bn.js');
13151var elliptic = require('../../elliptic');
13152var utils = elliptic.utils;
13153var assert = utils.assert;
13154
13155function KeyPair(ec, options) {
13156 this.ec = ec;
13157 this.priv = null;
13158 this.pub = null;
13159
13160 // KeyPair(ec, { priv: ..., pub: ... })
13161 if (options.priv)
13162 this._importPrivate(options.priv, options.privEnc);
13163 if (options.pub)
13164 this._importPublic(options.pub, options.pubEnc);
13165}
13166module.exports = KeyPair;
13167
13168KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
13169 if (pub instanceof KeyPair)
13170 return pub;
13171
13172 return new KeyPair(ec, {
13173 pub: pub,
13174 pubEnc: enc
13175 });
13176};
13177
13178KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
13179 if (priv instanceof KeyPair)
13180 return priv;
13181
13182 return new KeyPair(ec, {
13183 priv: priv,
13184 privEnc: enc
13185 });
13186};
13187
13188KeyPair.prototype.validate = function validate() {
13189 var pub = this.getPublic();
13190
13191 if (pub.isInfinity())
13192 return { result: false, reason: 'Invalid public key' };
13193 if (!pub.validate())
13194 return { result: false, reason: 'Public key is not a point' };
13195 if (!pub.mul(this.ec.curve.n).isInfinity())
13196 return { result: false, reason: 'Public key * N != O' };
13197
13198 return { result: true, reason: null };
13199};
13200
13201KeyPair.prototype.getPublic = function getPublic(compact, enc) {
13202 // compact is optional argument
13203 if (typeof compact === 'string') {
13204 enc = compact;
13205 compact = null;
13206 }
13207
13208 if (!this.pub)
13209 this.pub = this.ec.g.mul(this.priv);
13210
13211 if (!enc)
13212 return this.pub;
13213
13214 return this.pub.encode(enc, compact);
13215};
13216
13217KeyPair.prototype.getPrivate = function getPrivate(enc) {
13218 if (enc === 'hex')
13219 return this.priv.toString(16, 2);
13220 else
13221 return this.priv;
13222};
13223
13224KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
13225 this.priv = new BN(key, enc || 16);
13226
13227 // Ensure that the priv won't be bigger than n, otherwise we may fail
13228 // in fixed multiplication method
13229 this.priv = this.priv.umod(this.ec.curve.n);
13230};
13231
13232KeyPair.prototype._importPublic = function _importPublic(key, enc) {
13233 if (key.x || key.y) {
13234 // Montgomery points only have an `x` coordinate.
13235 // Weierstrass/Edwards points on the other hand have both `x` and
13236 // `y` coordinates.
13237 if (this.ec.curve.type === 'mont') {
13238 assert(key.x, 'Need x coordinate');
13239 } else if (this.ec.curve.type === 'short' ||
13240 this.ec.curve.type === 'edwards') {
13241 assert(key.x && key.y, 'Need both x and y coordinate');
13242 }
13243 this.pub = this.ec.curve.point(key.x, key.y);
13244 return;
13245 }
13246 this.pub = this.ec.curve.decodePoint(key, enc);
13247};
13248
13249// ECDH
13250KeyPair.prototype.derive = function derive(pub) {
13251 return pub.mul(this.priv).getX();
13252};
13253
13254// ECDSA
13255KeyPair.prototype.sign = function sign(msg, enc, options) {
13256 return this.ec.sign(msg, this, enc, options);
13257};
13258
13259KeyPair.prototype.verify = function verify(msg, signature) {
13260 return this.ec.verify(msg, signature, this);
13261};
13262
13263KeyPair.prototype.inspect = function inspect() {
13264 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
13265 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
13266};
13267
13268},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
13269'use strict';
13270
13271var BN = require('bn.js');
13272
13273var elliptic = require('../../elliptic');
13274var utils = elliptic.utils;
13275var assert = utils.assert;
13276
13277function Signature(options, enc) {
13278 if (options instanceof Signature)
13279 return options;
13280
13281 if (this._importDER(options, enc))
13282 return;
13283
13284 assert(options.r && options.s, 'Signature without r or s');
13285 this.r = new BN(options.r, 16);
13286 this.s = new BN(options.s, 16);
13287 if (options.recoveryParam === undefined)
13288 this.recoveryParam = null;
13289 else
13290 this.recoveryParam = options.recoveryParam;
13291}
13292module.exports = Signature;
13293
13294function Position() {
13295 this.place = 0;
13296}
13297
13298function getLength(buf, p) {
13299 var initial = buf[p.place++];
13300 if (!(initial & 0x80)) {
13301 return initial;
13302 }
13303 var octetLen = initial & 0xf;
13304 var val = 0;
13305 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
13306 val <<= 8;
13307 val |= buf[off];
13308 }
13309 p.place = off;
13310 return val;
13311}
13312
13313function rmPadding(buf) {
13314 var i = 0;
13315 var len = buf.length - 1;
13316 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
13317 i++;
13318 }
13319 if (i === 0) {
13320 return buf;
13321 }
13322 return buf.slice(i);
13323}
13324
13325Signature.prototype._importDER = function _importDER(data, enc) {
13326 data = utils.toArray(data, enc);
13327 var p = new Position();
13328 if (data[p.place++] !== 0x30) {
13329 return false;
13330 }
13331 var len = getLength(data, p);
13332 if ((len + p.place) !== data.length) {
13333 return false;
13334 }
13335 if (data[p.place++] !== 0x02) {
13336 return false;
13337 }
13338 var rlen = getLength(data, p);
13339 var r = data.slice(p.place, rlen + p.place);
13340 p.place += rlen;
13341 if (data[p.place++] !== 0x02) {
13342 return false;
13343 }
13344 var slen = getLength(data, p);
13345 if (data.length !== slen + p.place) {
13346 return false;
13347 }
13348 var s = data.slice(p.place, slen + p.place);
13349 if (r[0] === 0 && (r[1] & 0x80)) {
13350 r = r.slice(1);
13351 }
13352 if (s[0] === 0 && (s[1] & 0x80)) {
13353 s = s.slice(1);
13354 }
13355
13356 this.r = new BN(r);
13357 this.s = new BN(s);
13358 this.recoveryParam = null;
13359
13360 return true;
13361};
13362
13363function constructLength(arr, len) {
13364 if (len < 0x80) {
13365 arr.push(len);
13366 return;
13367 }
13368 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
13369 arr.push(octets | 0x80);
13370 while (--octets) {
13371 arr.push((len >>> (octets << 3)) & 0xff);
13372 }
13373 arr.push(len);
13374}
13375
13376Signature.prototype.toDER = function toDER(enc) {
13377 var r = this.r.toArray();
13378 var s = this.s.toArray();
13379
13380 // Pad values
13381 if (r[0] & 0x80)
13382 r = [ 0 ].concat(r);
13383 // Pad values
13384 if (s[0] & 0x80)
13385 s = [ 0 ].concat(s);
13386
13387 r = rmPadding(r);
13388 s = rmPadding(s);
13389
13390 while (!s[0] && !(s[1] & 0x80)) {
13391 s = s.slice(1);
13392 }
13393 var arr = [ 0x02 ];
13394 constructLength(arr, r.length);
13395 arr = arr.concat(r);
13396 arr.push(0x02);
13397 constructLength(arr, s.length);
13398 var backHalf = arr.concat(s);
13399 var res = [ 0x30 ];
13400 constructLength(res, backHalf.length);
13401 res = res.concat(backHalf);
13402 return utils.encode(res, enc);
13403};
13404
13405},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
13406'use strict';
13407
13408var hash = require('hash.js');
13409var elliptic = require('../../elliptic');
13410var utils = elliptic.utils;
13411var assert = utils.assert;
13412var parseBytes = utils.parseBytes;
13413var KeyPair = require('./key');
13414var Signature = require('./signature');
13415
13416function EDDSA(curve) {
13417 assert(curve === 'ed25519', 'only tested with ed25519 so far');
13418
13419 if (!(this instanceof EDDSA))
13420 return new EDDSA(curve);
13421
13422 var curve = elliptic.curves[curve].curve;
13423 this.curve = curve;
13424 this.g = curve.g;
13425 this.g.precompute(curve.n.bitLength() + 1);
13426
13427 this.pointClass = curve.point().constructor;
13428 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
13429 this.hash = hash.sha512;
13430}
13431
13432module.exports = EDDSA;
13433
13434/**
13435* @param {Array|String} message - message bytes
13436* @param {Array|String|KeyPair} secret - secret bytes or a keypair
13437* @returns {Signature} - signature
13438*/
13439EDDSA.prototype.sign = function sign(message, secret) {
13440 message = parseBytes(message);
13441 var key = this.keyFromSecret(secret);
13442 var r = this.hashInt(key.messagePrefix(), message);
13443 var R = this.g.mul(r);
13444 var Rencoded = this.encodePoint(R);
13445 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
13446 .mul(key.priv());
13447 var S = r.add(s_).umod(this.curve.n);
13448 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
13449};
13450
13451/**
13452* @param {Array} message - message bytes
13453* @param {Array|String|Signature} sig - sig bytes
13454* @param {Array|String|Point|KeyPair} pub - public key
13455* @returns {Boolean} - true if public key matches sig of message
13456*/
13457EDDSA.prototype.verify = function verify(message, sig, pub) {
13458 message = parseBytes(message);
13459 sig = this.makeSignature(sig);
13460 var key = this.keyFromPublic(pub);
13461 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
13462 var SG = this.g.mul(sig.S());
13463 var RplusAh = sig.R().add(key.pub().mul(h));
13464 return RplusAh.eq(SG);
13465};
13466
13467EDDSA.prototype.hashInt = function hashInt() {
13468 var hash = this.hash();
13469 for (var i = 0; i < arguments.length; i++)
13470 hash.update(arguments[i]);
13471 return utils.intFromLE(hash.digest()).umod(this.curve.n);
13472};
13473
13474EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
13475 return KeyPair.fromPublic(this, pub);
13476};
13477
13478EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
13479 return KeyPair.fromSecret(this, secret);
13480};
13481
13482EDDSA.prototype.makeSignature = function makeSignature(sig) {
13483 if (sig instanceof Signature)
13484 return sig;
13485 return new Signature(this, sig);
13486};
13487
13488/**
13489* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
13490*
13491* EDDSA defines methods for encoding and decoding points and integers. These are
13492* helper convenience methods, that pass along to utility functions implied
13493* parameters.
13494*
13495*/
13496EDDSA.prototype.encodePoint = function encodePoint(point) {
13497 var enc = point.getY().toArray('le', this.encodingLength);
13498 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
13499 return enc;
13500};
13501
13502EDDSA.prototype.decodePoint = function decodePoint(bytes) {
13503 bytes = utils.parseBytes(bytes);
13504
13505 var lastIx = bytes.length - 1;
13506 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
13507 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
13508
13509 var y = utils.intFromLE(normed);
13510 return this.curve.pointFromY(y, xIsOdd);
13511};
13512
13513EDDSA.prototype.encodeInt = function encodeInt(num) {
13514 return num.toArray('le', this.encodingLength);
13515};
13516
13517EDDSA.prototype.decodeInt = function decodeInt(bytes) {
13518 return utils.intFromLE(bytes);
13519};
13520
13521EDDSA.prototype.isPoint = function isPoint(val) {
13522 return val instanceof this.pointClass;
13523};
13524
13525},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
13526'use strict';
13527
13528var elliptic = require('../../elliptic');
13529var utils = elliptic.utils;
13530var assert = utils.assert;
13531var parseBytes = utils.parseBytes;
13532var cachedProperty = utils.cachedProperty;
13533
13534/**
13535* @param {EDDSA} eddsa - instance
13536* @param {Object} params - public/private key parameters
13537*
13538* @param {Array<Byte>} [params.secret] - secret seed bytes
13539* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
13540* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
13541*
13542*/
13543function KeyPair(eddsa, params) {
13544 this.eddsa = eddsa;
13545 this._secret = parseBytes(params.secret);
13546 if (eddsa.isPoint(params.pub))
13547 this._pub = params.pub;
13548 else
13549 this._pubBytes = parseBytes(params.pub);
13550}
13551
13552KeyPair.fromPublic = function fromPublic(eddsa, pub) {
13553 if (pub instanceof KeyPair)
13554 return pub;
13555 return new KeyPair(eddsa, { pub: pub });
13556};
13557
13558KeyPair.fromSecret = function fromSecret(eddsa, secret) {
13559 if (secret instanceof KeyPair)
13560 return secret;
13561 return new KeyPair(eddsa, { secret: secret });
13562};
13563
13564KeyPair.prototype.secret = function secret() {
13565 return this._secret;
13566};
13567
13568cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
13569 return this.eddsa.encodePoint(this.pub());
13570});
13571
13572cachedProperty(KeyPair, 'pub', function pub() {
13573 if (this._pubBytes)
13574 return this.eddsa.decodePoint(this._pubBytes);
13575 return this.eddsa.g.mul(this.priv());
13576});
13577
13578cachedProperty(KeyPair, 'privBytes', function privBytes() {
13579 var eddsa = this.eddsa;
13580 var hash = this.hash();
13581 var lastIx = eddsa.encodingLength - 1;
13582
13583 var a = hash.slice(0, eddsa.encodingLength);
13584 a[0] &= 248;
13585 a[lastIx] &= 127;
13586 a[lastIx] |= 64;
13587
13588 return a;
13589});
13590
13591cachedProperty(KeyPair, 'priv', function priv() {
13592 return this.eddsa.decodeInt(this.privBytes());
13593});
13594
13595cachedProperty(KeyPair, 'hash', function hash() {
13596 return this.eddsa.hash().update(this.secret()).digest();
13597});
13598
13599cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
13600 return this.hash().slice(this.eddsa.encodingLength);
13601});
13602
13603KeyPair.prototype.sign = function sign(message) {
13604 assert(this._secret, 'KeyPair can only verify');
13605 return this.eddsa.sign(message, this);
13606};
13607
13608KeyPair.prototype.verify = function verify(message, sig) {
13609 return this.eddsa.verify(message, sig, this);
13610};
13611
13612KeyPair.prototype.getSecret = function getSecret(enc) {
13613 assert(this._secret, 'KeyPair is public only');
13614 return utils.encode(this.secret(), enc);
13615};
13616
13617KeyPair.prototype.getPublic = function getPublic(enc) {
13618 return utils.encode(this.pubBytes(), enc);
13619};
13620
13621module.exports = KeyPair;
13622
13623},{"../../elliptic":39}],51:[function(require,module,exports){
13624'use strict';
13625
13626var BN = require('bn.js');
13627var elliptic = require('../../elliptic');
13628var utils = elliptic.utils;
13629var assert = utils.assert;
13630var cachedProperty = utils.cachedProperty;
13631var parseBytes = utils.parseBytes;
13632
13633/**
13634* @param {EDDSA} eddsa - eddsa instance
13635* @param {Array<Bytes>|Object} sig -
13636* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
13637* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
13638* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
13639* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
13640*/
13641function Signature(eddsa, sig) {
13642 this.eddsa = eddsa;
13643
13644 if (typeof sig !== 'object')
13645 sig = parseBytes(sig);
13646
13647 if (Array.isArray(sig)) {
13648 sig = {
13649 R: sig.slice(0, eddsa.encodingLength),
13650 S: sig.slice(eddsa.encodingLength)
13651 };
13652 }
13653
13654 assert(sig.R && sig.S, 'Signature without R or S');
13655
13656 if (eddsa.isPoint(sig.R))
13657 this._R = sig.R;
13658 if (sig.S instanceof BN)
13659 this._S = sig.S;
13660
13661 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
13662 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
13663}
13664
13665cachedProperty(Signature, 'S', function S() {
13666 return this.eddsa.decodeInt(this.Sencoded());
13667});
13668
13669cachedProperty(Signature, 'R', function R() {
13670 return this.eddsa.decodePoint(this.Rencoded());
13671});
13672
13673cachedProperty(Signature, 'Rencoded', function Rencoded() {
13674 return this.eddsa.encodePoint(this.R());
13675});
13676
13677cachedProperty(Signature, 'Sencoded', function Sencoded() {
13678 return this.eddsa.encodeInt(this.S());
13679});
13680
13681Signature.prototype.toBytes = function toBytes() {
13682 return this.Rencoded().concat(this.Sencoded());
13683};
13684
13685Signature.prototype.toHex = function toHex() {
13686 return utils.encode(this.toBytes(), 'hex').toUpperCase();
13687};
13688
13689module.exports = Signature;
13690
13691},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
13692'use strict';
13693
13694var hash = require('hash.js');
13695var elliptic = require('../elliptic');
13696var utils = elliptic.utils;
13697var assert = utils.assert;
13698
13699function HmacDRBG(options) {
13700 if (!(this instanceof HmacDRBG))
13701 return new HmacDRBG(options);
13702 this.hash = options.hash;
13703 this.predResist = !!options.predResist;
13704
13705 this.outLen = this.hash.outSize;
13706 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
13707
13708 this.reseed = null;
13709 this.reseedInterval = null;
13710 this.K = null;
13711 this.V = null;
13712
13713 var entropy = utils.toArray(options.entropy, options.entropyEnc);
13714 var nonce = utils.toArray(options.nonce, options.nonceEnc);
13715 var pers = utils.toArray(options.pers, options.persEnc);
13716 assert(entropy.length >= (this.minEntropy / 8),
13717 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
13718 this._init(entropy, nonce, pers);
13719}
13720module.exports = HmacDRBG;
13721
13722HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
13723 var seed = entropy.concat(nonce).concat(pers);
13724
13725 this.K = new Array(this.outLen / 8);
13726 this.V = new Array(this.outLen / 8);
13727 for (var i = 0; i < this.V.length; i++) {
13728 this.K[i] = 0x00;
13729 this.V[i] = 0x01;
13730 }
13731
13732 this._update(seed);
13733 this.reseed = 1;
13734 this.reseedInterval = 0x1000000000000; // 2^48
13735};
13736
13737HmacDRBG.prototype._hmac = function hmac() {
13738 return new hash.hmac(this.hash, this.K);
13739};
13740
13741HmacDRBG.prototype._update = function update(seed) {
13742 var kmac = this._hmac()
13743 .update(this.V)
13744 .update([ 0x00 ]);
13745 if (seed)
13746 kmac = kmac.update(seed);
13747 this.K = kmac.digest();
13748 this.V = this._hmac().update(this.V).digest();
13749 if (!seed)
13750 return;
13751
13752 this.K = this._hmac()
13753 .update(this.V)
13754 .update([ 0x01 ])
13755 .update(seed)
13756 .digest();
13757 this.V = this._hmac().update(this.V).digest();
13758};
13759
13760HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
13761 // Optional entropy enc
13762 if (typeof entropyEnc !== 'string') {
13763 addEnc = add;
13764 add = entropyEnc;
13765 entropyEnc = null;
13766 }
13767
13768 entropy = utils.toBuffer(entropy, entropyEnc);
13769 add = utils.toBuffer(add, addEnc);
13770
13771 assert(entropy.length >= (this.minEntropy / 8),
13772 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
13773
13774 this._update(entropy.concat(add || []));
13775 this.reseed = 1;
13776};
13777
13778HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
13779 if (this.reseed > this.reseedInterval)
13780 throw new Error('Reseed is required');
13781
13782 // Optional encoding
13783 if (typeof enc !== 'string') {
13784 addEnc = add;
13785 add = enc;
13786 enc = null;
13787 }
13788
13789 // Optional additional data
13790 if (add) {
13791 add = utils.toArray(add, addEnc);
13792 this._update(add);
13793 }
13794
13795 var temp = [];
13796 while (temp.length < len) {
13797 this.V = this._hmac().update(this.V).digest();
13798 temp = temp.concat(this.V);
13799 }
13800
13801 var res = temp.slice(0, len);
13802 this._update(add);
13803 this.reseed++;
13804 return utils.encode(res, enc);
13805};
13806
13807},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
13808module.exports = {
13809 doubles: {
13810 step: 4,
13811 points: [
13812 [
13813 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
13814 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
13815 ],
13816 [
13817 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
13818 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
13819 ],
13820 [
13821 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
13822 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
13823 ],
13824 [
13825 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
13826 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
13827 ],
13828 [
13829 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
13830 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
13831 ],
13832 [
13833 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
13834 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
13835 ],
13836 [
13837 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
13838 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
13839 ],
13840 [
13841 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
13842 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
13843 ],
13844 [
13845 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
13846 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
13847 ],
13848 [
13849 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
13850 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
13851 ],
13852 [
13853 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
13854 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
13855 ],
13856 [
13857 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
13858 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
13859 ],
13860 [
13861 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
13862 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
13863 ],
13864 [
13865 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
13866 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
13867 ],
13868 [
13869 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
13870 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
13871 ],
13872 [
13873 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
13874 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
13875 ],
13876 [
13877 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
13878 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
13879 ],
13880 [
13881 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
13882 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
13883 ],
13884 [
13885 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
13886 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
13887 ],
13888 [
13889 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
13890 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
13891 ],
13892 [
13893 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
13894 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
13895 ],
13896 [
13897 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
13898 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
13899 ],
13900 [
13901 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
13902 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
13903 ],
13904 [
13905 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
13906 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
13907 ],
13908 [
13909 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
13910 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
13911 ],
13912 [
13913 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
13914 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
13915 ],
13916 [
13917 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
13918 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
13919 ],
13920 [
13921 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
13922 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
13923 ],
13924 [
13925 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
13926 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
13927 ],
13928 [
13929 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
13930 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
13931 ],
13932 [
13933 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
13934 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
13935 ],
13936 [
13937 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
13938 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
13939 ],
13940 [
13941 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
13942 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
13943 ],
13944 [
13945 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
13946 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
13947 ],
13948 [
13949 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
13950 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
13951 ],
13952 [
13953 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
13954 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
13955 ],
13956 [
13957 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
13958 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
13959 ],
13960 [
13961 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
13962 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
13963 ],
13964 [
13965 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
13966 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
13967 ],
13968 [
13969 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
13970 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
13971 ],
13972 [
13973 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
13974 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
13975 ],
13976 [
13977 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
13978 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
13979 ],
13980 [
13981 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
13982 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
13983 ],
13984 [
13985 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
13986 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
13987 ],
13988 [
13989 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
13990 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
13991 ],
13992 [
13993 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
13994 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
13995 ],
13996 [
13997 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
13998 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
13999 ],
14000 [
14001 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
14002 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
14003 ],
14004 [
14005 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
14006 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
14007 ],
14008 [
14009 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
14010 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
14011 ],
14012 [
14013 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
14014 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
14015 ],
14016 [
14017 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
14018 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
14019 ],
14020 [
14021 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
14022 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
14023 ],
14024 [
14025 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
14026 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
14027 ],
14028 [
14029 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
14030 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
14031 ],
14032 [
14033 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
14034 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
14035 ],
14036 [
14037 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
14038 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
14039 ],
14040 [
14041 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
14042 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
14043 ],
14044 [
14045 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
14046 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
14047 ],
14048 [
14049 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
14050 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
14051 ],
14052 [
14053 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
14054 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
14055 ],
14056 [
14057 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
14058 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
14059 ],
14060 [
14061 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
14062 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
14063 ],
14064 [
14065 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
14066 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
14067 ],
14068 [
14069 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
14070 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
14071 ]
14072 ]
14073 },
14074 naf: {
14075 wnd: 7,
14076 points: [
14077 [
14078 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
14079 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
14080 ],
14081 [
14082 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
14083 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
14084 ],
14085 [
14086 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
14087 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
14088 ],
14089 [
14090 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
14091 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
14092 ],
14093 [
14094 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
14095 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
14096 ],
14097 [
14098 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
14099 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
14100 ],
14101 [
14102 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
14103 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
14104 ],
14105 [
14106 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
14107 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
14108 ],
14109 [
14110 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
14111 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
14112 ],
14113 [
14114 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
14115 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
14116 ],
14117 [
14118 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
14119 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
14120 ],
14121 [
14122 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
14123 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
14124 ],
14125 [
14126 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
14127 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
14128 ],
14129 [
14130 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
14131 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
14132 ],
14133 [
14134 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
14135 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
14136 ],
14137 [
14138 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
14139 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
14140 ],
14141 [
14142 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
14143 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
14144 ],
14145 [
14146 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
14147 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
14148 ],
14149 [
14150 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
14151 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
14152 ],
14153 [
14154 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
14155 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
14156 ],
14157 [
14158 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
14159 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
14160 ],
14161 [
14162 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
14163 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
14164 ],
14165 [
14166 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
14167 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
14168 ],
14169 [
14170 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
14171 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
14172 ],
14173 [
14174 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
14175 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
14176 ],
14177 [
14178 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
14179 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
14180 ],
14181 [
14182 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
14183 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
14184 ],
14185 [
14186 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
14187 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
14188 ],
14189 [
14190 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
14191 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
14192 ],
14193 [
14194 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
14195 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
14196 ],
14197 [
14198 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
14199 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
14200 ],
14201 [
14202 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
14203 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
14204 ],
14205 [
14206 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
14207 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
14208 ],
14209 [
14210 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
14211 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
14212 ],
14213 [
14214 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
14215 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
14216 ],
14217 [
14218 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
14219 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
14220 ],
14221 [
14222 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
14223 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
14224 ],
14225 [
14226 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
14227 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
14228 ],
14229 [
14230 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
14231 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
14232 ],
14233 [
14234 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
14235 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
14236 ],
14237 [
14238 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
14239 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
14240 ],
14241 [
14242 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
14243 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
14244 ],
14245 [
14246 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
14247 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
14248 ],
14249 [
14250 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
14251 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
14252 ],
14253 [
14254 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
14255 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
14256 ],
14257 [
14258 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
14259 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
14260 ],
14261 [
14262 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
14263 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
14264 ],
14265 [
14266 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
14267 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
14268 ],
14269 [
14270 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
14271 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
14272 ],
14273 [
14274 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
14275 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
14276 ],
14277 [
14278 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
14279 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
14280 ],
14281 [
14282 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
14283 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
14284 ],
14285 [
14286 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
14287 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
14288 ],
14289 [
14290 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
14291 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
14292 ],
14293 [
14294 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
14295 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
14296 ],
14297 [
14298 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
14299 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
14300 ],
14301 [
14302 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
14303 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
14304 ],
14305 [
14306 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
14307 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
14308 ],
14309 [
14310 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
14311 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
14312 ],
14313 [
14314 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
14315 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
14316 ],
14317 [
14318 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
14319 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
14320 ],
14321 [
14322 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
14323 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
14324 ],
14325 [
14326 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
14327 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
14328 ],
14329 [
14330 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
14331 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
14332 ],
14333 [
14334 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
14335 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
14336 ],
14337 [
14338 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
14339 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
14340 ],
14341 [
14342 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
14343 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
14344 ],
14345 [
14346 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
14347 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
14348 ],
14349 [
14350 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
14351 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
14352 ],
14353 [
14354 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
14355 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
14356 ],
14357 [
14358 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
14359 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
14360 ],
14361 [
14362 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
14363 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
14364 ],
14365 [
14366 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
14367 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
14368 ],
14369 [
14370 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
14371 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
14372 ],
14373 [
14374 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
14375 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
14376 ],
14377 [
14378 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
14379 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
14380 ],
14381 [
14382 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
14383 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
14384 ],
14385 [
14386 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
14387 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
14388 ],
14389 [
14390 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
14391 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
14392 ],
14393 [
14394 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
14395 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
14396 ],
14397 [
14398 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
14399 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
14400 ],
14401 [
14402 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
14403 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
14404 ],
14405 [
14406 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
14407 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
14408 ],
14409 [
14410 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
14411 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
14412 ],
14413 [
14414 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
14415 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
14416 ],
14417 [
14418 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
14419 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
14420 ],
14421 [
14422 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
14423 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
14424 ],
14425 [
14426 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
14427 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
14428 ],
14429 [
14430 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
14431 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
14432 ],
14433 [
14434 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
14435 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
14436 ],
14437 [
14438 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
14439 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
14440 ],
14441 [
14442 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
14443 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
14444 ],
14445 [
14446 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
14447 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
14448 ],
14449 [
14450 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
14451 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
14452 ],
14453 [
14454 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
14455 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
14456 ],
14457 [
14458 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
14459 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
14460 ],
14461 [
14462 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
14463 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
14464 ],
14465 [
14466 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
14467 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
14468 ],
14469 [
14470 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
14471 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
14472 ],
14473 [
14474 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
14475 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
14476 ],
14477 [
14478 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
14479 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
14480 ],
14481 [
14482 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
14483 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
14484 ],
14485 [
14486 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
14487 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
14488 ],
14489 [
14490 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
14491 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
14492 ],
14493 [
14494 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
14495 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
14496 ],
14497 [
14498 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
14499 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
14500 ],
14501 [
14502 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
14503 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
14504 ],
14505 [
14506 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
14507 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
14508 ],
14509 [
14510 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
14511 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
14512 ],
14513 [
14514 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
14515 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
14516 ],
14517 [
14518 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
14519 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
14520 ],
14521 [
14522 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
14523 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
14524 ],
14525 [
14526 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
14527 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
14528 ],
14529 [
14530 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
14531 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
14532 ],
14533 [
14534 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
14535 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
14536 ],
14537 [
14538 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
14539 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
14540 ],
14541 [
14542 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
14543 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
14544 ],
14545 [
14546 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
14547 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
14548 ],
14549 [
14550 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
14551 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
14552 ],
14553 [
14554 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
14555 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
14556 ],
14557 [
14558 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
14559 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
14560 ],
14561 [
14562 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
14563 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
14564 ],
14565 [
14566 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
14567 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
14568 ],
14569 [
14570 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
14571 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
14572 ],
14573 [
14574 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
14575 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
14576 ],
14577 [
14578 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
14579 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
14580 ],
14581 [
14582 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
14583 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
14584 ]
14585 ]
14586 }
14587};
14588
14589},{}],54:[function(require,module,exports){
14590'use strict';
14591
14592var utils = exports;
14593var BN = require('bn.js');
14594
14595utils.assert = function assert(val, msg) {
14596 if (!val)
14597 throw new Error(msg || 'Assertion failed');
14598};
14599
14600function toArray(msg, enc) {
14601 if (Array.isArray(msg))
14602 return msg.slice();
14603 if (!msg)
14604 return [];
14605 var res = [];
14606 if (typeof msg !== 'string') {
14607 for (var i = 0; i < msg.length; i++)
14608 res[i] = msg[i] | 0;
14609 return res;
14610 }
14611 if (!enc) {
14612 for (var i = 0; i < msg.length; i++) {
14613 var c = msg.charCodeAt(i);
14614 var hi = c >> 8;
14615 var lo = c & 0xff;
14616 if (hi)
14617 res.push(hi, lo);
14618 else
14619 res.push(lo);
14620 }
14621 } else if (enc === 'hex') {
14622 msg = msg.replace(/[^a-z0-9]+/ig, '');
14623 if (msg.length % 2 !== 0)
14624 msg = '0' + msg;
14625 for (var i = 0; i < msg.length; i += 2)
14626 res.push(parseInt(msg[i] + msg[i + 1], 16));
14627 }
14628 return res;
14629}
14630utils.toArray = toArray;
14631
14632function zero2(word) {
14633 if (word.length === 1)
14634 return '0' + word;
14635 else
14636 return word;
14637}
14638utils.zero2 = zero2;
14639
14640function toHex(msg) {
14641 var res = '';
14642 for (var i = 0; i < msg.length; i++)
14643 res += zero2(msg[i].toString(16));
14644 return res;
14645}
14646utils.toHex = toHex;
14647
14648utils.encode = function encode(arr, enc) {
14649 if (enc === 'hex')
14650 return toHex(arr);
14651 else
14652 return arr;
14653};
14654
14655// Represent num in a w-NAF form
14656function getNAF(num, w) {
14657 var naf = [];
14658 var ws = 1 << (w + 1);
14659 var k = num.clone();
14660 while (k.cmpn(1) >= 0) {
14661 var z;
14662 if (k.isOdd()) {
14663 var mod = k.andln(ws - 1);
14664 if (mod > (ws >> 1) - 1)
14665 z = (ws >> 1) - mod;
14666 else
14667 z = mod;
14668 k.isubn(z);
14669 } else {
14670 z = 0;
14671 }
14672 naf.push(z);
14673
14674 // Optimization, shift by word if possible
14675 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
14676 for (var i = 1; i < shift; i++)
14677 naf.push(0);
14678 k.iushrn(shift);
14679 }
14680
14681 return naf;
14682}
14683utils.getNAF = getNAF;
14684
14685// Represent k1, k2 in a Joint Sparse Form
14686function getJSF(k1, k2) {
14687 var jsf = [
14688 [],
14689 []
14690 ];
14691
14692 k1 = k1.clone();
14693 k2 = k2.clone();
14694 var d1 = 0;
14695 var d2 = 0;
14696 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
14697
14698 // First phase
14699 var m14 = (k1.andln(3) + d1) & 3;
14700 var m24 = (k2.andln(3) + d2) & 3;
14701 if (m14 === 3)
14702 m14 = -1;
14703 if (m24 === 3)
14704 m24 = -1;
14705 var u1;
14706 if ((m14 & 1) === 0) {
14707 u1 = 0;
14708 } else {
14709 var m8 = (k1.andln(7) + d1) & 7;
14710 if ((m8 === 3 || m8 === 5) && m24 === 2)
14711 u1 = -m14;
14712 else
14713 u1 = m14;
14714 }
14715 jsf[0].push(u1);
14716
14717 var u2;
14718 if ((m24 & 1) === 0) {
14719 u2 = 0;
14720 } else {
14721 var m8 = (k2.andln(7) + d2) & 7;
14722 if ((m8 === 3 || m8 === 5) && m14 === 2)
14723 u2 = -m24;
14724 else
14725 u2 = m24;
14726 }
14727 jsf[1].push(u2);
14728
14729 // Second phase
14730 if (2 * d1 === u1 + 1)
14731 d1 = 1 - d1;
14732 if (2 * d2 === u2 + 1)
14733 d2 = 1 - d2;
14734 k1.iushrn(1);
14735 k2.iushrn(1);
14736 }
14737
14738 return jsf;
14739}
14740utils.getJSF = getJSF;
14741
14742function cachedProperty(obj, name, computer) {
14743 var key = '_' + name;
14744 obj.prototype[name] = function cachedProperty() {
14745 return this[key] !== undefined ? this[key] :
14746 this[key] = computer.call(this);
14747 };
14748}
14749utils.cachedProperty = cachedProperty;
14750
14751function parseBytes(bytes) {
14752 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
14753 bytes;
14754}
14755utils.parseBytes = parseBytes;
14756
14757function intFromLE(bytes) {
14758 return new BN(bytes, 'hex', 'le');
14759}
14760utils.intFromLE = intFromLE;
14761
14762
14763},{"bn.js":33}],55:[function(require,module,exports){
14764module.exports={
14765 "_args": [
14766 [
14767 {
14768 "raw": "elliptic@^6.2.3",
14769 "scope": null,
14770 "escapedName": "elliptic",
14771 "name": "elliptic",
14772 "rawSpec": "^6.2.3",
14773 "spec": ">=6.2.3 <7.0.0",
14774 "type": "range"
14775 },
14776 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
14777 ]
14778 ],
14779 "_from": "elliptic@>=6.2.3 <7.0.0",
14780 "_id": "elliptic@6.3.3",
14781 "_inCache": true,
14782 "_location": "/elliptic",
14783 "_nodeVersion": "7.0.0",
14784 "_npmOperationalInternal": {
14785 "host": "packages-18-east.internal.npmjs.com",
14786 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
14787 },
14788 "_npmUser": {
14789 "name": "indutny",
14790 "email": "fedor@indutny.com"
14791 },
14792 "_npmVersion": "3.10.8",
14793 "_phantomChildren": {},
14794 "_requested": {
14795 "raw": "elliptic@^6.2.3",
14796 "scope": null,
14797 "escapedName": "elliptic",
14798 "name": "elliptic",
14799 "rawSpec": "^6.2.3",
14800 "spec": ">=6.2.3 <7.0.0",
14801 "type": "range"
14802 },
14803 "_requiredBy": [
14804 "/browserify-sign",
14805 "/create-ecdh",
14806 "/secp256k1"
14807 ],
14808 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
14809 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
14810 "_shrinkwrap": null,
14811 "_spec": "elliptic@^6.2.3",
14812 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
14813 "author": {
14814 "name": "Fedor Indutny",
14815 "email": "fedor@indutny.com"
14816 },
14817 "bugs": {
14818 "url": "https://github.com/indutny/elliptic/issues"
14819 },
14820 "dependencies": {
14821 "bn.js": "^4.4.0",
14822 "brorand": "^1.0.1",
14823 "hash.js": "^1.0.0",
14824 "inherits": "^2.0.1"
14825 },
14826 "description": "EC cryptography",
14827 "devDependencies": {
14828 "brfs": "^1.4.3",
14829 "coveralls": "^2.11.3",
14830 "grunt": "^0.4.5",
14831 "grunt-browserify": "^5.0.0",
14832 "grunt-cli": "^1.2.0",
14833 "grunt-contrib-connect": "^1.0.0",
14834 "grunt-contrib-copy": "^1.0.0",
14835 "grunt-contrib-uglify": "^1.0.1",
14836 "grunt-mocha-istanbul": "^3.0.1",
14837 "grunt-saucelabs": "^8.6.2",
14838 "istanbul": "^0.4.2",
14839 "jscs": "^2.9.0",
14840 "jshint": "^2.6.0",
14841 "mocha": "^2.1.0"
14842 },
14843 "directories": {},
14844 "dist": {
14845 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
14846 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
14847 },
14848 "files": [
14849 "lib"
14850 ],
14851 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
14852 "homepage": "https://github.com/indutny/elliptic",
14853 "keywords": [
14854 "EC",
14855 "Elliptic",
14856 "curve",
14857 "Cryptography"
14858 ],
14859 "license": "MIT",
14860 "main": "lib/elliptic.js",
14861 "maintainers": [
14862 {
14863 "name": "indutny",
14864 "email": "fedor@indutny.com"
14865 }
14866 ],
14867 "name": "elliptic",
14868 "optionalDependencies": {},
14869 "readme": "ERROR: No README data found!",
14870 "repository": {
14871 "type": "git",
14872 "url": "git+ssh://git@github.com/indutny/elliptic.git"
14873 },
14874 "scripts": {
14875 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
14876 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
14877 "lint": "npm run jscs && npm run jshint",
14878 "test": "npm run lint && npm run unit",
14879 "unit": "istanbul test _mocha --reporter=spec test/index.js",
14880 "version": "grunt dist && git add dist/"
14881 },
14882 "version": "6.3.3"
14883}
14884
14885},{}],56:[function(require,module,exports){
14886(function (Buffer){
14887'use strict';
14888
14889var isHexPrefixed = require('is-hex-prefixed');
14890var stripHexPrefix = require('strip-hex-prefix');
14891
14892/**
14893 * Pads a `String` to have an even length
14894 * @param {String} value
14895 * @return {String} output
14896 */
14897function padToEven(value) {
14898 var a = value; // eslint-disable-line
14899
14900 if (typeof a !== 'string') {
14901 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
14902 }
14903
14904 if (a.length % 2) {
14905 a = '0' + a;
14906 }
14907
14908 return a;
14909}
14910
14911/**
14912 * Converts a `Number` into a hex `String`
14913 * @param {Number} i
14914 * @return {String}
14915 */
14916function intToHex(i) {
14917 var hex = i.toString(16); // eslint-disable-line
14918
14919 return '0x' + padToEven(hex);
14920}
14921
14922/**
14923 * Converts an `Number` to a `Buffer`
14924 * @param {Number} i
14925 * @return {Buffer}
14926 */
14927function intToBuffer(i) {
14928 var hex = intToHex(i);
14929
14930 return new Buffer(hex.slice(2), 'hex');
14931}
14932
14933/**
14934 * Get the binary size of a string
14935 * @param {String} str
14936 * @return {Number}
14937 */
14938function getBinarySize(str) {
14939 if (typeof str !== 'string') {
14940 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
14941 }
14942
14943 return Buffer.byteLength(str, 'utf8');
14944}
14945
14946/**
14947 * Returns TRUE if the first specified array contains all elements
14948 * from the second one. FALSE otherwise.
14949 *
14950 * @param {array} superset
14951 * @param {array} subset
14952 *
14953 * @returns {boolean}
14954 */
14955function arrayContainsArray(superset, subset, some) {
14956 if (Array.isArray(superset) !== true) {
14957 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
14958 }
14959 if (Array.isArray(subset) !== true) {
14960 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
14961 }
14962
14963 return subset[Boolean(some) && 'some' || 'every'](function (value) {
14964 return superset.indexOf(value) >= 0;
14965 });
14966}
14967
14968/**
14969 * Should be called to get utf8 from it's hex representation
14970 *
14971 * @method toUtf8
14972 * @param {String} string in hex
14973 * @returns {String} ascii string representation of hex value
14974 */
14975function toUtf8(hex) {
14976 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
14977
14978 return bufferValue.toString('utf8');
14979}
14980
14981/**
14982 * Should be called to get ascii from it's hex representation
14983 *
14984 * @method toAscii
14985 * @param {String} string in hex
14986 * @returns {String} ascii string representation of hex value
14987 */
14988function toAscii(hex) {
14989 var str = ''; // eslint-disable-line
14990 var i = 0,
14991 l = hex.length; // eslint-disable-line
14992
14993 if (hex.substring(0, 2) === '0x') {
14994 i = 2;
14995 }
14996
14997 for (; i < l; i += 2) {
14998 var code = parseInt(hex.substr(i, 2), 16);
14999 str += String.fromCharCode(code);
15000 }
15001
15002 return str;
15003}
15004
15005/**
15006 * Should be called to get hex representation (prefixed by 0x) of utf8 string
15007 *
15008 * @method fromUtf8
15009 * @param {String} string
15010 * @param {Number} optional padding
15011 * @returns {String} hex representation of input string
15012 */
15013function fromUtf8(stringValue) {
15014 var str = new Buffer(stringValue, 'utf8');
15015
15016 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
15017}
15018
15019/**
15020 * Should be called to get hex representation (prefixed by 0x) of ascii string
15021 *
15022 * @method fromAscii
15023 * @param {String} string
15024 * @param {Number} optional padding
15025 * @returns {String} hex representation of input string
15026 */
15027function fromAscii(stringValue) {
15028 var hex = ''; // eslint-disable-line
15029 for (var i = 0; i < stringValue.length; i++) {
15030 // eslint-disable-line
15031 var code = stringValue.charCodeAt(i);
15032 var n = code.toString(16);
15033 hex += n.length < 2 ? '0' + n : n;
15034 }
15035
15036 return '0x' + hex;
15037}
15038
15039/**
15040 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
15041 *
15042 * @method getKeys get specific key from inner object array of objects
15043 * @param {String} params
15044 * @param {String} key
15045 * @param {Boolean} allowEmpty
15046 * @returns {Array} output just a simple array of output keys
15047 */
15048function getKeys(params, key, allowEmpty) {
15049 if (!Array.isArray(params)) {
15050 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
15051 }
15052 if (typeof key !== 'string') {
15053 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
15054 }
15055
15056 var result = []; // eslint-disable-line
15057
15058 for (var i = 0; i < params.length; i++) {
15059 // eslint-disable-line
15060 var value = params[i][key]; // eslint-disable-line
15061 if (allowEmpty && !value) {
15062 value = '';
15063 } else if (typeof value !== 'string') {
15064 throw new Error('invalid abi');
15065 }
15066 result.push(value);
15067 }
15068
15069 return result;
15070}
15071
15072/**
15073 * Is the string a hex string.
15074 *
15075 * @method check if string is hex string of specific length
15076 * @param {String} value
15077 * @param {Number} length
15078 * @returns {Boolean} output the string is a hex string
15079 */
15080function isHexString(value, length) {
15081 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
15082 return false;
15083 }
15084
15085 if (length && value.length !== 2 + 2 * length) {
15086 return false;
15087 }
15088
15089 return true;
15090}
15091
15092module.exports = {
15093 arrayContainsArray: arrayContainsArray,
15094 intToBuffer: intToBuffer,
15095 getBinarySize: getBinarySize,
15096 isHexPrefixed: isHexPrefixed,
15097 stripHexPrefix: stripHexPrefix,
15098 padToEven: padToEven,
15099 intToHex: intToHex,
15100 fromAscii: fromAscii,
15101 fromUtf8: fromUtf8,
15102 toAscii: toAscii,
15103 toUtf8: toUtf8,
15104 getKeys: getKeys,
15105 isHexString: isHexString
15106};
15107}).call(this,require("buffer").Buffer)
15108},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
15109var hash = exports;
15110
15111hash.utils = require('./hash/utils');
15112hash.common = require('./hash/common');
15113hash.sha = require('./hash/sha');
15114hash.ripemd = require('./hash/ripemd');
15115hash.hmac = require('./hash/hmac');
15116
15117// Proxy hash functions to the main object
15118hash.sha1 = hash.sha.sha1;
15119hash.sha256 = hash.sha.sha256;
15120hash.sha224 = hash.sha.sha224;
15121hash.sha384 = hash.sha.sha384;
15122hash.sha512 = hash.sha.sha512;
15123hash.ripemd160 = hash.ripemd.ripemd160;
15124
15125},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
15126var hash = require('../hash');
15127var utils = hash.utils;
15128var assert = utils.assert;
15129
15130function BlockHash() {
15131 this.pending = null;
15132 this.pendingTotal = 0;
15133 this.blockSize = this.constructor.blockSize;
15134 this.outSize = this.constructor.outSize;
15135 this.hmacStrength = this.constructor.hmacStrength;
15136 this.padLength = this.constructor.padLength / 8;
15137 this.endian = 'big';
15138
15139 this._delta8 = this.blockSize / 8;
15140 this._delta32 = this.blockSize / 32;
15141}
15142exports.BlockHash = BlockHash;
15143
15144BlockHash.prototype.update = function update(msg, enc) {
15145 // Convert message to array, pad it, and join into 32bit blocks
15146 msg = utils.toArray(msg, enc);
15147 if (!this.pending)
15148 this.pending = msg;
15149 else
15150 this.pending = this.pending.concat(msg);
15151 this.pendingTotal += msg.length;
15152
15153 // Enough data, try updating
15154 if (this.pending.length >= this._delta8) {
15155 msg = this.pending;
15156
15157 // Process pending data in blocks
15158 var r = msg.length % this._delta8;
15159 this.pending = msg.slice(msg.length - r, msg.length);
15160 if (this.pending.length === 0)
15161 this.pending = null;
15162
15163 msg = utils.join32(msg, 0, msg.length - r, this.endian);
15164 for (var i = 0; i < msg.length; i += this._delta32)
15165 this._update(msg, i, i + this._delta32);
15166 }
15167
15168 return this;
15169};
15170
15171BlockHash.prototype.digest = function digest(enc) {
15172 this.update(this._pad());
15173 assert(this.pending === null);
15174
15175 return this._digest(enc);
15176};
15177
15178BlockHash.prototype._pad = function pad() {
15179 var len = this.pendingTotal;
15180 var bytes = this._delta8;
15181 var k = bytes - ((len + this.padLength) % bytes);
15182 var res = new Array(k + this.padLength);
15183 res[0] = 0x80;
15184 for (var i = 1; i < k; i++)
15185 res[i] = 0;
15186
15187 // Append length
15188 len <<= 3;
15189 if (this.endian === 'big') {
15190 for (var t = 8; t < this.padLength; t++)
15191 res[i++] = 0;
15192
15193 res[i++] = 0;
15194 res[i++] = 0;
15195 res[i++] = 0;
15196 res[i++] = 0;
15197 res[i++] = (len >>> 24) & 0xff;
15198 res[i++] = (len >>> 16) & 0xff;
15199 res[i++] = (len >>> 8) & 0xff;
15200 res[i++] = len & 0xff;
15201 } else {
15202 res[i++] = len & 0xff;
15203 res[i++] = (len >>> 8) & 0xff;
15204 res[i++] = (len >>> 16) & 0xff;
15205 res[i++] = (len >>> 24) & 0xff;
15206 res[i++] = 0;
15207 res[i++] = 0;
15208 res[i++] = 0;
15209 res[i++] = 0;
15210
15211 for (var t = 8; t < this.padLength; t++)
15212 res[i++] = 0;
15213 }
15214
15215 return res;
15216};
15217
15218},{"../hash":57}],59:[function(require,module,exports){
15219var hmac = exports;
15220
15221var hash = require('../hash');
15222var utils = hash.utils;
15223var assert = utils.assert;
15224
15225function Hmac(hash, key, enc) {
15226 if (!(this instanceof Hmac))
15227 return new Hmac(hash, key, enc);
15228 this.Hash = hash;
15229 this.blockSize = hash.blockSize / 8;
15230 this.outSize = hash.outSize / 8;
15231 this.inner = null;
15232 this.outer = null;
15233
15234 this._init(utils.toArray(key, enc));
15235}
15236module.exports = Hmac;
15237
15238Hmac.prototype._init = function init(key) {
15239 // Shorten key, if needed
15240 if (key.length > this.blockSize)
15241 key = new this.Hash().update(key).digest();
15242 assert(key.length <= this.blockSize);
15243
15244 // Add padding to key
15245 for (var i = key.length; i < this.blockSize; i++)
15246 key.push(0);
15247
15248 for (var i = 0; i < key.length; i++)
15249 key[i] ^= 0x36;
15250 this.inner = new this.Hash().update(key);
15251
15252 // 0x36 ^ 0x5c = 0x6a
15253 for (var i = 0; i < key.length; i++)
15254 key[i] ^= 0x6a;
15255 this.outer = new this.Hash().update(key);
15256};
15257
15258Hmac.prototype.update = function update(msg, enc) {
15259 this.inner.update(msg, enc);
15260 return this;
15261};
15262
15263Hmac.prototype.digest = function digest(enc) {
15264 this.outer.update(this.inner.digest());
15265 return this.outer.digest(enc);
15266};
15267
15268},{"../hash":57}],60:[function(require,module,exports){
15269var hash = require('../hash');
15270var utils = hash.utils;
15271
15272var rotl32 = utils.rotl32;
15273var sum32 = utils.sum32;
15274var sum32_3 = utils.sum32_3;
15275var sum32_4 = utils.sum32_4;
15276var BlockHash = hash.common.BlockHash;
15277
15278function RIPEMD160() {
15279 if (!(this instanceof RIPEMD160))
15280 return new RIPEMD160();
15281
15282 BlockHash.call(this);
15283
15284 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
15285 this.endian = 'little';
15286}
15287utils.inherits(RIPEMD160, BlockHash);
15288exports.ripemd160 = RIPEMD160;
15289
15290RIPEMD160.blockSize = 512;
15291RIPEMD160.outSize = 160;
15292RIPEMD160.hmacStrength = 192;
15293RIPEMD160.padLength = 64;
15294
15295RIPEMD160.prototype._update = function update(msg, start) {
15296 var A = this.h[0];
15297 var B = this.h[1];
15298 var C = this.h[2];
15299 var D = this.h[3];
15300 var E = this.h[4];
15301 var Ah = A;
15302 var Bh = B;
15303 var Ch = C;
15304 var Dh = D;
15305 var Eh = E;
15306 for (var j = 0; j < 80; j++) {
15307 var T = sum32(
15308 rotl32(
15309 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
15310 s[j]),
15311 E);
15312 A = E;
15313 E = D;
15314 D = rotl32(C, 10);
15315 C = B;
15316 B = T;
15317 T = sum32(
15318 rotl32(
15319 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
15320 sh[j]),
15321 Eh);
15322 Ah = Eh;
15323 Eh = Dh;
15324 Dh = rotl32(Ch, 10);
15325 Ch = Bh;
15326 Bh = T;
15327 }
15328 T = sum32_3(this.h[1], C, Dh);
15329 this.h[1] = sum32_3(this.h[2], D, Eh);
15330 this.h[2] = sum32_3(this.h[3], E, Ah);
15331 this.h[3] = sum32_3(this.h[4], A, Bh);
15332 this.h[4] = sum32_3(this.h[0], B, Ch);
15333 this.h[0] = T;
15334};
15335
15336RIPEMD160.prototype._digest = function digest(enc) {
15337 if (enc === 'hex')
15338 return utils.toHex32(this.h, 'little');
15339 else
15340 return utils.split32(this.h, 'little');
15341};
15342
15343function f(j, x, y, z) {
15344 if (j <= 15)
15345 return x ^ y ^ z;
15346 else if (j <= 31)
15347 return (x & y) | ((~x) & z);
15348 else if (j <= 47)
15349 return (x | (~y)) ^ z;
15350 else if (j <= 63)
15351 return (x & z) | (y & (~z));
15352 else
15353 return x ^ (y | (~z));
15354}
15355
15356function K(j) {
15357 if (j <= 15)
15358 return 0x00000000;
15359 else if (j <= 31)
15360 return 0x5a827999;
15361 else if (j <= 47)
15362 return 0x6ed9eba1;
15363 else if (j <= 63)
15364 return 0x8f1bbcdc;
15365 else
15366 return 0xa953fd4e;
15367}
15368
15369function Kh(j) {
15370 if (j <= 15)
15371 return 0x50a28be6;
15372 else if (j <= 31)
15373 return 0x5c4dd124;
15374 else if (j <= 47)
15375 return 0x6d703ef3;
15376 else if (j <= 63)
15377 return 0x7a6d76e9;
15378 else
15379 return 0x00000000;
15380}
15381
15382var r = [
15383 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
15384 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
15385 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
15386 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
15387 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
15388];
15389
15390var rh = [
15391 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
15392 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
15393 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
15394 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
15395 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
15396];
15397
15398var s = [
15399 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
15400 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
15401 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
15402 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
15403 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
15404];
15405
15406var sh = [
15407 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
15408 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
15409 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
15410 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
15411 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
15412];
15413
15414},{"../hash":57}],61:[function(require,module,exports){
15415var hash = require('../hash');
15416var utils = hash.utils;
15417var assert = utils.assert;
15418
15419var rotr32 = utils.rotr32;
15420var rotl32 = utils.rotl32;
15421var sum32 = utils.sum32;
15422var sum32_4 = utils.sum32_4;
15423var sum32_5 = utils.sum32_5;
15424var rotr64_hi = utils.rotr64_hi;
15425var rotr64_lo = utils.rotr64_lo;
15426var shr64_hi = utils.shr64_hi;
15427var shr64_lo = utils.shr64_lo;
15428var sum64 = utils.sum64;
15429var sum64_hi = utils.sum64_hi;
15430var sum64_lo = utils.sum64_lo;
15431var sum64_4_hi = utils.sum64_4_hi;
15432var sum64_4_lo = utils.sum64_4_lo;
15433var sum64_5_hi = utils.sum64_5_hi;
15434var sum64_5_lo = utils.sum64_5_lo;
15435var BlockHash = hash.common.BlockHash;
15436
15437var sha256_K = [
15438 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
15439 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
15440 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
15441 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
15442 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
15443 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
15444 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
15445 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
15446 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
15447 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
15448 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
15449 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
15450 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
15451 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
15452 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
15453 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
15454];
15455
15456var sha512_K = [
15457 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
15458 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
15459 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
15460 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
15461 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
15462 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
15463 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
15464 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
15465 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
15466 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
15467 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
15468 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
15469 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
15470 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
15471 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
15472 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
15473 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
15474 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
15475 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
15476 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
15477 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
15478 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
15479 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
15480 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
15481 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
15482 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
15483 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
15484 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
15485 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
15486 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
15487 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
15488 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
15489 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
15490 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
15491 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
15492 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
15493 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
15494 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
15495 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
15496 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
15497];
15498
15499var sha1_K = [
15500 0x5A827999, 0x6ED9EBA1,
15501 0x8F1BBCDC, 0xCA62C1D6
15502];
15503
15504function SHA256() {
15505 if (!(this instanceof SHA256))
15506 return new SHA256();
15507
15508 BlockHash.call(this);
15509 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
15510 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
15511 this.k = sha256_K;
15512 this.W = new Array(64);
15513}
15514utils.inherits(SHA256, BlockHash);
15515exports.sha256 = SHA256;
15516
15517SHA256.blockSize = 512;
15518SHA256.outSize = 256;
15519SHA256.hmacStrength = 192;
15520SHA256.padLength = 64;
15521
15522SHA256.prototype._update = function _update(msg, start) {
15523 var W = this.W;
15524
15525 for (var i = 0; i < 16; i++)
15526 W[i] = msg[start + i];
15527 for (; i < W.length; i++)
15528 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
15529
15530 var a = this.h[0];
15531 var b = this.h[1];
15532 var c = this.h[2];
15533 var d = this.h[3];
15534 var e = this.h[4];
15535 var f = this.h[5];
15536 var g = this.h[6];
15537 var h = this.h[7];
15538
15539 assert(this.k.length === W.length);
15540 for (var i = 0; i < W.length; i++) {
15541 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
15542 var T2 = sum32(s0_256(a), maj32(a, b, c));
15543 h = g;
15544 g = f;
15545 f = e;
15546 e = sum32(d, T1);
15547 d = c;
15548 c = b;
15549 b = a;
15550 a = sum32(T1, T2);
15551 }
15552
15553 this.h[0] = sum32(this.h[0], a);
15554 this.h[1] = sum32(this.h[1], b);
15555 this.h[2] = sum32(this.h[2], c);
15556 this.h[3] = sum32(this.h[3], d);
15557 this.h[4] = sum32(this.h[4], e);
15558 this.h[5] = sum32(this.h[5], f);
15559 this.h[6] = sum32(this.h[6], g);
15560 this.h[7] = sum32(this.h[7], h);
15561};
15562
15563SHA256.prototype._digest = function digest(enc) {
15564 if (enc === 'hex')
15565 return utils.toHex32(this.h, 'big');
15566 else
15567 return utils.split32(this.h, 'big');
15568};
15569
15570function SHA224() {
15571 if (!(this instanceof SHA224))
15572 return new SHA224();
15573
15574 SHA256.call(this);
15575 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
15576 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
15577}
15578utils.inherits(SHA224, SHA256);
15579exports.sha224 = SHA224;
15580
15581SHA224.blockSize = 512;
15582SHA224.outSize = 224;
15583SHA224.hmacStrength = 192;
15584SHA224.padLength = 64;
15585
15586SHA224.prototype._digest = function digest(enc) {
15587 // Just truncate output
15588 if (enc === 'hex')
15589 return utils.toHex32(this.h.slice(0, 7), 'big');
15590 else
15591 return utils.split32(this.h.slice(0, 7), 'big');
15592};
15593
15594function SHA512() {
15595 if (!(this instanceof SHA512))
15596 return new SHA512();
15597
15598 BlockHash.call(this);
15599 this.h = [ 0x6a09e667, 0xf3bcc908,
15600 0xbb67ae85, 0x84caa73b,
15601 0x3c6ef372, 0xfe94f82b,
15602 0xa54ff53a, 0x5f1d36f1,
15603 0x510e527f, 0xade682d1,
15604 0x9b05688c, 0x2b3e6c1f,
15605 0x1f83d9ab, 0xfb41bd6b,
15606 0x5be0cd19, 0x137e2179 ];
15607 this.k = sha512_K;
15608 this.W = new Array(160);
15609}
15610utils.inherits(SHA512, BlockHash);
15611exports.sha512 = SHA512;
15612
15613SHA512.blockSize = 1024;
15614SHA512.outSize = 512;
15615SHA512.hmacStrength = 192;
15616SHA512.padLength = 128;
15617
15618SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
15619 var W = this.W;
15620
15621 // 32 x 32bit words
15622 for (var i = 0; i < 32; i++)
15623 W[i] = msg[start + i];
15624 for (; i < W.length; i += 2) {
15625 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
15626 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
15627 var c1_hi = W[i - 14]; // i - 7
15628 var c1_lo = W[i - 13];
15629 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
15630 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
15631 var c3_hi = W[i - 32]; // i - 16
15632 var c3_lo = W[i - 31];
15633
15634 W[i] = sum64_4_hi(c0_hi, c0_lo,
15635 c1_hi, c1_lo,
15636 c2_hi, c2_lo,
15637 c3_hi, c3_lo);
15638 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
15639 c1_hi, c1_lo,
15640 c2_hi, c2_lo,
15641 c3_hi, c3_lo);
15642 }
15643};
15644
15645SHA512.prototype._update = function _update(msg, start) {
15646 this._prepareBlock(msg, start);
15647
15648 var W = this.W;
15649
15650 var ah = this.h[0];
15651 var al = this.h[1];
15652 var bh = this.h[2];
15653 var bl = this.h[3];
15654 var ch = this.h[4];
15655 var cl = this.h[5];
15656 var dh = this.h[6];
15657 var dl = this.h[7];
15658 var eh = this.h[8];
15659 var el = this.h[9];
15660 var fh = this.h[10];
15661 var fl = this.h[11];
15662 var gh = this.h[12];
15663 var gl = this.h[13];
15664 var hh = this.h[14];
15665 var hl = this.h[15];
15666
15667 assert(this.k.length === W.length);
15668 for (var i = 0; i < W.length; i += 2) {
15669 var c0_hi = hh;
15670 var c0_lo = hl;
15671 var c1_hi = s1_512_hi(eh, el);
15672 var c1_lo = s1_512_lo(eh, el);
15673 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
15674 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
15675 var c3_hi = this.k[i];
15676 var c3_lo = this.k[i + 1];
15677 var c4_hi = W[i];
15678 var c4_lo = W[i + 1];
15679
15680 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
15681 c1_hi, c1_lo,
15682 c2_hi, c2_lo,
15683 c3_hi, c3_lo,
15684 c4_hi, c4_lo);
15685 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
15686 c1_hi, c1_lo,
15687 c2_hi, c2_lo,
15688 c3_hi, c3_lo,
15689 c4_hi, c4_lo);
15690
15691 var c0_hi = s0_512_hi(ah, al);
15692 var c0_lo = s0_512_lo(ah, al);
15693 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
15694 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
15695
15696 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
15697 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
15698
15699 hh = gh;
15700 hl = gl;
15701
15702 gh = fh;
15703 gl = fl;
15704
15705 fh = eh;
15706 fl = el;
15707
15708 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
15709 el = sum64_lo(dl, dl, T1_hi, T1_lo);
15710
15711 dh = ch;
15712 dl = cl;
15713
15714 ch = bh;
15715 cl = bl;
15716
15717 bh = ah;
15718 bl = al;
15719
15720 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
15721 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
15722 }
15723
15724 sum64(this.h, 0, ah, al);
15725 sum64(this.h, 2, bh, bl);
15726 sum64(this.h, 4, ch, cl);
15727 sum64(this.h, 6, dh, dl);
15728 sum64(this.h, 8, eh, el);
15729 sum64(this.h, 10, fh, fl);
15730 sum64(this.h, 12, gh, gl);
15731 sum64(this.h, 14, hh, hl);
15732};
15733
15734SHA512.prototype._digest = function digest(enc) {
15735 if (enc === 'hex')
15736 return utils.toHex32(this.h, 'big');
15737 else
15738 return utils.split32(this.h, 'big');
15739};
15740
15741function SHA384() {
15742 if (!(this instanceof SHA384))
15743 return new SHA384();
15744
15745 SHA512.call(this);
15746 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
15747 0x629a292a, 0x367cd507,
15748 0x9159015a, 0x3070dd17,
15749 0x152fecd8, 0xf70e5939,
15750 0x67332667, 0xffc00b31,
15751 0x8eb44a87, 0x68581511,
15752 0xdb0c2e0d, 0x64f98fa7,
15753 0x47b5481d, 0xbefa4fa4 ];
15754}
15755utils.inherits(SHA384, SHA512);
15756exports.sha384 = SHA384;
15757
15758SHA384.blockSize = 1024;
15759SHA384.outSize = 384;
15760SHA384.hmacStrength = 192;
15761SHA384.padLength = 128;
15762
15763SHA384.prototype._digest = function digest(enc) {
15764 if (enc === 'hex')
15765 return utils.toHex32(this.h.slice(0, 12), 'big');
15766 else
15767 return utils.split32(this.h.slice(0, 12), 'big');
15768};
15769
15770function SHA1() {
15771 if (!(this instanceof SHA1))
15772 return new SHA1();
15773
15774 BlockHash.call(this);
15775 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
15776 0x10325476, 0xc3d2e1f0 ];
15777 this.W = new Array(80);
15778}
15779
15780utils.inherits(SHA1, BlockHash);
15781exports.sha1 = SHA1;
15782
15783SHA1.blockSize = 512;
15784SHA1.outSize = 160;
15785SHA1.hmacStrength = 80;
15786SHA1.padLength = 64;
15787
15788SHA1.prototype._update = function _update(msg, start) {
15789 var W = this.W;
15790
15791 for (var i = 0; i < 16; i++)
15792 W[i] = msg[start + i];
15793
15794 for(; i < W.length; i++)
15795 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
15796
15797 var a = this.h[0];
15798 var b = this.h[1];
15799 var c = this.h[2];
15800 var d = this.h[3];
15801 var e = this.h[4];
15802
15803 for (var i = 0; i < W.length; i++) {
15804 var s = ~~(i / 20);
15805 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
15806 e = d;
15807 d = c;
15808 c = rotl32(b, 30);
15809 b = a;
15810 a = t;
15811 }
15812
15813 this.h[0] = sum32(this.h[0], a);
15814 this.h[1] = sum32(this.h[1], b);
15815 this.h[2] = sum32(this.h[2], c);
15816 this.h[3] = sum32(this.h[3], d);
15817 this.h[4] = sum32(this.h[4], e);
15818};
15819
15820SHA1.prototype._digest = function digest(enc) {
15821 if (enc === 'hex')
15822 return utils.toHex32(this.h, 'big');
15823 else
15824 return utils.split32(this.h, 'big');
15825};
15826
15827function ch32(x, y, z) {
15828 return (x & y) ^ ((~x) & z);
15829}
15830
15831function maj32(x, y, z) {
15832 return (x & y) ^ (x & z) ^ (y & z);
15833}
15834
15835function p32(x, y, z) {
15836 return x ^ y ^ z;
15837}
15838
15839function s0_256(x) {
15840 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
15841}
15842
15843function s1_256(x) {
15844 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
15845}
15846
15847function g0_256(x) {
15848 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
15849}
15850
15851function g1_256(x) {
15852 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
15853}
15854
15855function ft_1(s, x, y, z) {
15856 if (s === 0)
15857 return ch32(x, y, z);
15858 if (s === 1 || s === 3)
15859 return p32(x, y, z);
15860 if (s === 2)
15861 return maj32(x, y, z);
15862}
15863
15864function ch64_hi(xh, xl, yh, yl, zh, zl) {
15865 var r = (xh & yh) ^ ((~xh) & zh);
15866 if (r < 0)
15867 r += 0x100000000;
15868 return r;
15869}
15870
15871function ch64_lo(xh, xl, yh, yl, zh, zl) {
15872 var r = (xl & yl) ^ ((~xl) & zl);
15873 if (r < 0)
15874 r += 0x100000000;
15875 return r;
15876}
15877
15878function maj64_hi(xh, xl, yh, yl, zh, zl) {
15879 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
15880 if (r < 0)
15881 r += 0x100000000;
15882 return r;
15883}
15884
15885function maj64_lo(xh, xl, yh, yl, zh, zl) {
15886 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
15887 if (r < 0)
15888 r += 0x100000000;
15889 return r;
15890}
15891
15892function s0_512_hi(xh, xl) {
15893 var c0_hi = rotr64_hi(xh, xl, 28);
15894 var c1_hi = rotr64_hi(xl, xh, 2); // 34
15895 var c2_hi = rotr64_hi(xl, xh, 7); // 39
15896
15897 var r = c0_hi ^ c1_hi ^ c2_hi;
15898 if (r < 0)
15899 r += 0x100000000;
15900 return r;
15901}
15902
15903function s0_512_lo(xh, xl) {
15904 var c0_lo = rotr64_lo(xh, xl, 28);
15905 var c1_lo = rotr64_lo(xl, xh, 2); // 34
15906 var c2_lo = rotr64_lo(xl, xh, 7); // 39
15907
15908 var r = c0_lo ^ c1_lo ^ c2_lo;
15909 if (r < 0)
15910 r += 0x100000000;
15911 return r;
15912}
15913
15914function s1_512_hi(xh, xl) {
15915 var c0_hi = rotr64_hi(xh, xl, 14);
15916 var c1_hi = rotr64_hi(xh, xl, 18);
15917 var c2_hi = rotr64_hi(xl, xh, 9); // 41
15918
15919 var r = c0_hi ^ c1_hi ^ c2_hi;
15920 if (r < 0)
15921 r += 0x100000000;
15922 return r;
15923}
15924
15925function s1_512_lo(xh, xl) {
15926 var c0_lo = rotr64_lo(xh, xl, 14);
15927 var c1_lo = rotr64_lo(xh, xl, 18);
15928 var c2_lo = rotr64_lo(xl, xh, 9); // 41
15929
15930 var r = c0_lo ^ c1_lo ^ c2_lo;
15931 if (r < 0)
15932 r += 0x100000000;
15933 return r;
15934}
15935
15936function g0_512_hi(xh, xl) {
15937 var c0_hi = rotr64_hi(xh, xl, 1);
15938 var c1_hi = rotr64_hi(xh, xl, 8);
15939 var c2_hi = shr64_hi(xh, xl, 7);
15940
15941 var r = c0_hi ^ c1_hi ^ c2_hi;
15942 if (r < 0)
15943 r += 0x100000000;
15944 return r;
15945}
15946
15947function g0_512_lo(xh, xl) {
15948 var c0_lo = rotr64_lo(xh, xl, 1);
15949 var c1_lo = rotr64_lo(xh, xl, 8);
15950 var c2_lo = shr64_lo(xh, xl, 7);
15951
15952 var r = c0_lo ^ c1_lo ^ c2_lo;
15953 if (r < 0)
15954 r += 0x100000000;
15955 return r;
15956}
15957
15958function g1_512_hi(xh, xl) {
15959 var c0_hi = rotr64_hi(xh, xl, 19);
15960 var c1_hi = rotr64_hi(xl, xh, 29); // 61
15961 var c2_hi = shr64_hi(xh, xl, 6);
15962
15963 var r = c0_hi ^ c1_hi ^ c2_hi;
15964 if (r < 0)
15965 r += 0x100000000;
15966 return r;
15967}
15968
15969function g1_512_lo(xh, xl) {
15970 var c0_lo = rotr64_lo(xh, xl, 19);
15971 var c1_lo = rotr64_lo(xl, xh, 29); // 61
15972 var c2_lo = shr64_lo(xh, xl, 6);
15973
15974 var r = c0_lo ^ c1_lo ^ c2_lo;
15975 if (r < 0)
15976 r += 0x100000000;
15977 return r;
15978}
15979
15980},{"../hash":57}],62:[function(require,module,exports){
15981var utils = exports;
15982var inherits = require('inherits');
15983
15984function toArray(msg, enc) {
15985 if (Array.isArray(msg))
15986 return msg.slice();
15987 if (!msg)
15988 return [];
15989 var res = [];
15990 if (typeof msg === 'string') {
15991 if (!enc) {
15992 for (var i = 0; i < msg.length; i++) {
15993 var c = msg.charCodeAt(i);
15994 var hi = c >> 8;
15995 var lo = c & 0xff;
15996 if (hi)
15997 res.push(hi, lo);
15998 else
15999 res.push(lo);
16000 }
16001 } else if (enc === 'hex') {
16002 msg = msg.replace(/[^a-z0-9]+/ig, '');
16003 if (msg.length % 2 !== 0)
16004 msg = '0' + msg;
16005 for (var i = 0; i < msg.length; i += 2)
16006 res.push(parseInt(msg[i] + msg[i + 1], 16));
16007 }
16008 } else {
16009 for (var i = 0; i < msg.length; i++)
16010 res[i] = msg[i] | 0;
16011 }
16012 return res;
16013}
16014utils.toArray = toArray;
16015
16016function toHex(msg) {
16017 var res = '';
16018 for (var i = 0; i < msg.length; i++)
16019 res += zero2(msg[i].toString(16));
16020 return res;
16021}
16022utils.toHex = toHex;
16023
16024function htonl(w) {
16025 var res = (w >>> 24) |
16026 ((w >>> 8) & 0xff00) |
16027 ((w << 8) & 0xff0000) |
16028 ((w & 0xff) << 24);
16029 return res >>> 0;
16030}
16031utils.htonl = htonl;
16032
16033function toHex32(msg, endian) {
16034 var res = '';
16035 for (var i = 0; i < msg.length; i++) {
16036 var w = msg[i];
16037 if (endian === 'little')
16038 w = htonl(w);
16039 res += zero8(w.toString(16));
16040 }
16041 return res;
16042}
16043utils.toHex32 = toHex32;
16044
16045function zero2(word) {
16046 if (word.length === 1)
16047 return '0' + word;
16048 else
16049 return word;
16050}
16051utils.zero2 = zero2;
16052
16053function zero8(word) {
16054 if (word.length === 7)
16055 return '0' + word;
16056 else if (word.length === 6)
16057 return '00' + word;
16058 else if (word.length === 5)
16059 return '000' + word;
16060 else if (word.length === 4)
16061 return '0000' + word;
16062 else if (word.length === 3)
16063 return '00000' + word;
16064 else if (word.length === 2)
16065 return '000000' + word;
16066 else if (word.length === 1)
16067 return '0000000' + word;
16068 else
16069 return word;
16070}
16071utils.zero8 = zero8;
16072
16073function join32(msg, start, end, endian) {
16074 var len = end - start;
16075 assert(len % 4 === 0);
16076 var res = new Array(len / 4);
16077 for (var i = 0, k = start; i < res.length; i++, k += 4) {
16078 var w;
16079 if (endian === 'big')
16080 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
16081 else
16082 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
16083 res[i] = w >>> 0;
16084 }
16085 return res;
16086}
16087utils.join32 = join32;
16088
16089function split32(msg, endian) {
16090 var res = new Array(msg.length * 4);
16091 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
16092 var m = msg[i];
16093 if (endian === 'big') {
16094 res[k] = m >>> 24;
16095 res[k + 1] = (m >>> 16) & 0xff;
16096 res[k + 2] = (m >>> 8) & 0xff;
16097 res[k + 3] = m & 0xff;
16098 } else {
16099 res[k + 3] = m >>> 24;
16100 res[k + 2] = (m >>> 16) & 0xff;
16101 res[k + 1] = (m >>> 8) & 0xff;
16102 res[k] = m & 0xff;
16103 }
16104 }
16105 return res;
16106}
16107utils.split32 = split32;
16108
16109function rotr32(w, b) {
16110 return (w >>> b) | (w << (32 - b));
16111}
16112utils.rotr32 = rotr32;
16113
16114function rotl32(w, b) {
16115 return (w << b) | (w >>> (32 - b));
16116}
16117utils.rotl32 = rotl32;
16118
16119function sum32(a, b) {
16120 return (a + b) >>> 0;
16121}
16122utils.sum32 = sum32;
16123
16124function sum32_3(a, b, c) {
16125 return (a + b + c) >>> 0;
16126}
16127utils.sum32_3 = sum32_3;
16128
16129function sum32_4(a, b, c, d) {
16130 return (a + b + c + d) >>> 0;
16131}
16132utils.sum32_4 = sum32_4;
16133
16134function sum32_5(a, b, c, d, e) {
16135 return (a + b + c + d + e) >>> 0;
16136}
16137utils.sum32_5 = sum32_5;
16138
16139function assert(cond, msg) {
16140 if (!cond)
16141 throw new Error(msg || 'Assertion failed');
16142}
16143utils.assert = assert;
16144
16145utils.inherits = inherits;
16146
16147function sum64(buf, pos, ah, al) {
16148 var bh = buf[pos];
16149 var bl = buf[pos + 1];
16150
16151 var lo = (al + bl) >>> 0;
16152 var hi = (lo < al ? 1 : 0) + ah + bh;
16153 buf[pos] = hi >>> 0;
16154 buf[pos + 1] = lo;
16155}
16156exports.sum64 = sum64;
16157
16158function sum64_hi(ah, al, bh, bl) {
16159 var lo = (al + bl) >>> 0;
16160 var hi = (lo < al ? 1 : 0) + ah + bh;
16161 return hi >>> 0;
16162};
16163exports.sum64_hi = sum64_hi;
16164
16165function sum64_lo(ah, al, bh, bl) {
16166 var lo = al + bl;
16167 return lo >>> 0;
16168};
16169exports.sum64_lo = sum64_lo;
16170
16171function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
16172 var carry = 0;
16173 var lo = al;
16174 lo = (lo + bl) >>> 0;
16175 carry += lo < al ? 1 : 0;
16176 lo = (lo + cl) >>> 0;
16177 carry += lo < cl ? 1 : 0;
16178 lo = (lo + dl) >>> 0;
16179 carry += lo < dl ? 1 : 0;
16180
16181 var hi = ah + bh + ch + dh + carry;
16182 return hi >>> 0;
16183};
16184exports.sum64_4_hi = sum64_4_hi;
16185
16186function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
16187 var lo = al + bl + cl + dl;
16188 return lo >>> 0;
16189};
16190exports.sum64_4_lo = sum64_4_lo;
16191
16192function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
16193 var carry = 0;
16194 var lo = al;
16195 lo = (lo + bl) >>> 0;
16196 carry += lo < al ? 1 : 0;
16197 lo = (lo + cl) >>> 0;
16198 carry += lo < cl ? 1 : 0;
16199 lo = (lo + dl) >>> 0;
16200 carry += lo < dl ? 1 : 0;
16201 lo = (lo + el) >>> 0;
16202 carry += lo < el ? 1 : 0;
16203
16204 var hi = ah + bh + ch + dh + eh + carry;
16205 return hi >>> 0;
16206};
16207exports.sum64_5_hi = sum64_5_hi;
16208
16209function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
16210 var lo = al + bl + cl + dl + el;
16211
16212 return lo >>> 0;
16213};
16214exports.sum64_5_lo = sum64_5_lo;
16215
16216function rotr64_hi(ah, al, num) {
16217 var r = (al << (32 - num)) | (ah >>> num);
16218 return r >>> 0;
16219};
16220exports.rotr64_hi = rotr64_hi;
16221
16222function rotr64_lo(ah, al, num) {
16223 var r = (ah << (32 - num)) | (al >>> num);
16224 return r >>> 0;
16225};
16226exports.rotr64_lo = rotr64_lo;
16227
16228function shr64_hi(ah, al, num) {
16229 return ah >>> num;
16230};
16231exports.shr64_hi = shr64_hi;
16232
16233function shr64_lo(ah, al, num) {
16234 var r = (ah << (32 - num)) | (al >>> num);
16235 return r >>> 0;
16236};
16237exports.shr64_lo = shr64_lo;
16238
16239},{"inherits":63}],63:[function(require,module,exports){
16240arguments[4][9][0].apply(exports,arguments)
16241},{"dup":9}],64:[function(require,module,exports){
16242/**
16243 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
16244 * @param {String} str the string input value
16245 * @return {Boolean} a boolean if it is or is not hex prefixed
16246 * @throws if the str input is not a string
16247 */
16248module.exports = function isHexPrefixed(str) {
16249 if (typeof str !== 'string') {
16250 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
16251 }
16252
16253 return str.slice(0, 2) === '0x';
16254}
16255
16256},{}],65:[function(require,module,exports){
16257'use strict'
16258module.exports = require('./lib/api')(require('./lib/keccak'))
16259
16260},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
16261'use strict'
16262var createKeccak = require('./keccak')
16263var createShake = require('./shake')
16264
16265module.exports = function (KeccakState) {
16266 var Keccak = createKeccak(KeccakState)
16267 var Shake = createShake(KeccakState)
16268
16269 return function (algorithm, options) {
16270 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
16271 switch (hash) {
16272 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
16273 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
16274 case 'keccak384': return new Keccak(832, 768, null, 384, options)
16275 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
16276
16277 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
16278 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
16279 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
16280 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
16281
16282 case 'shake128': return new Shake(1344, 256, 0x1f, options)
16283 case 'shake256': return new Shake(1088, 512, 0x1f, options)
16284
16285 default: throw new Error('Invald algorithm: ' + algorithm)
16286 }
16287 }
16288}
16289
16290},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
16291(function (Buffer){
16292'use strict'
16293var Transform = require('stream').Transform
16294var inherits = require('inherits')
16295
16296module.exports = function (KeccakState) {
16297 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
16298 Transform.call(this, options)
16299
16300 this._rate = rate
16301 this._capacity = capacity
16302 this._delimitedSuffix = delimitedSuffix
16303 this._hashBitLength = hashBitLength
16304 this._options = options
16305
16306 this._state = new KeccakState()
16307 this._state.initialize(rate, capacity)
16308 this._finalized = false
16309 }
16310
16311 inherits(Keccak, Transform)
16312
16313 Keccak.prototype._transform = function (chunk, encoding, callback) {
16314 var error = null
16315 try {
16316 this.update(chunk, encoding)
16317 } catch (err) {
16318 error = err
16319 }
16320
16321 callback(error)
16322 }
16323
16324 Keccak.prototype._flush = function (callback) {
16325 var error = null
16326 try {
16327 this.push(this.digest())
16328 } catch (err) {
16329 error = err
16330 }
16331
16332 callback(error)
16333 }
16334
16335 Keccak.prototype.update = function (data, encoding) {
16336 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
16337 if (this._finalized) throw new Error('Digest already called')
16338 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
16339
16340 this._state.absorb(data)
16341
16342 return this
16343 }
16344
16345 Keccak.prototype.digest = function (encoding) {
16346 if (this._finalized) throw new Error('Digest already called')
16347 this._finalized = true
16348
16349 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
16350 var digest = this._state.squeeze(this._hashBitLength / 8)
16351 if (encoding !== undefined) digest = digest.toString(encoding)
16352
16353 this._resetState()
16354
16355 return digest
16356 }
16357
16358 // remove result from memory
16359 Keccak.prototype._resetState = function () {
16360 this._state.initialize(this._rate, this._capacity)
16361 return this
16362 }
16363
16364 // because sometimes we need hash right now and little later
16365 Keccak.prototype._clone = function () {
16366 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
16367 this._state.copy(clone._state)
16368 clone._finalized = this._finalized
16369
16370 return clone
16371 }
16372
16373 return Keccak
16374}
16375
16376}).call(this,require("buffer").Buffer)
16377},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
16378(function (Buffer){
16379'use strict'
16380var Transform = require('stream').Transform
16381var inherits = require('inherits')
16382
16383module.exports = function (KeccakState) {
16384 function Shake (rate, capacity, delimitedSuffix, options) {
16385 Transform.call(this, options)
16386
16387 this._rate = rate
16388 this._capacity = capacity
16389 this._delimitedSuffix = delimitedSuffix
16390 this._options = options
16391
16392 this._state = new KeccakState()
16393 this._state.initialize(rate, capacity)
16394 this._finalized = false
16395 }
16396
16397 inherits(Shake, Transform)
16398
16399 Shake.prototype._transform = function (chunk, encoding, callback) {
16400 var error = null
16401 try {
16402 this.update(chunk, encoding)
16403 } catch (err) {
16404 error = err
16405 }
16406
16407 callback(error)
16408 }
16409
16410 Shake.prototype._flush = function () {}
16411
16412 Shake.prototype._read = function (size) {
16413 this.push(this.squeeze(size))
16414 }
16415
16416 Shake.prototype.update = function (data, encoding) {
16417 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
16418 if (this._finalized) throw new Error('Squeeze already called')
16419 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
16420
16421 this._state.absorb(data)
16422
16423 return this
16424 }
16425
16426 Shake.prototype.squeeze = function (dataByteLength, encoding) {
16427 if (!this._finalized) {
16428 this._finalized = true
16429 this._state.absorbLastFewBits(this._delimitedSuffix)
16430 }
16431
16432 var data = this._state.squeeze(dataByteLength)
16433 if (encoding !== undefined) data = data.toString(encoding)
16434
16435 return data
16436 }
16437
16438 Shake.prototype._resetState = function () {
16439 this._state.initialize(this._rate, this._capacity)
16440 return this
16441 }
16442
16443 Shake.prototype._clone = function () {
16444 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
16445 this._state.copy(clone._state)
16446 clone._finalized = this._finalized
16447
16448 return clone
16449 }
16450
16451 return Shake
16452}
16453
16454}).call(this,require("buffer").Buffer)
16455},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
16456'use strict'
16457var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
16458
16459exports.p1600 = function (s) {
16460 for (var round = 0; round < 24; ++round) {
16461 // theta
16462 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
16463 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
16464 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
16465 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
16466 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
16467 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
16468 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
16469 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
16470 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
16471 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
16472
16473 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
16474 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
16475 var t1slo0 = s[0] ^ lo
16476 var t1shi0 = s[1] ^ hi
16477 var t1slo5 = s[10] ^ lo
16478 var t1shi5 = s[11] ^ hi
16479 var t1slo10 = s[20] ^ lo
16480 var t1shi10 = s[21] ^ hi
16481 var t1slo15 = s[30] ^ lo
16482 var t1shi15 = s[31] ^ hi
16483 var t1slo20 = s[40] ^ lo
16484 var t1shi20 = s[41] ^ hi
16485 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
16486 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
16487 var t1slo1 = s[2] ^ lo
16488 var t1shi1 = s[3] ^ hi
16489 var t1slo6 = s[12] ^ lo
16490 var t1shi6 = s[13] ^ hi
16491 var t1slo11 = s[22] ^ lo
16492 var t1shi11 = s[23] ^ hi
16493 var t1slo16 = s[32] ^ lo
16494 var t1shi16 = s[33] ^ hi
16495 var t1slo21 = s[42] ^ lo
16496 var t1shi21 = s[43] ^ hi
16497 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
16498 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
16499 var t1slo2 = s[4] ^ lo
16500 var t1shi2 = s[5] ^ hi
16501 var t1slo7 = s[14] ^ lo
16502 var t1shi7 = s[15] ^ hi
16503 var t1slo12 = s[24] ^ lo
16504 var t1shi12 = s[25] ^ hi
16505 var t1slo17 = s[34] ^ lo
16506 var t1shi17 = s[35] ^ hi
16507 var t1slo22 = s[44] ^ lo
16508 var t1shi22 = s[45] ^ hi
16509 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
16510 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
16511 var t1slo3 = s[6] ^ lo
16512 var t1shi3 = s[7] ^ hi
16513 var t1slo8 = s[16] ^ lo
16514 var t1shi8 = s[17] ^ hi
16515 var t1slo13 = s[26] ^ lo
16516 var t1shi13 = s[27] ^ hi
16517 var t1slo18 = s[36] ^ lo
16518 var t1shi18 = s[37] ^ hi
16519 var t1slo23 = s[46] ^ lo
16520 var t1shi23 = s[47] ^ hi
16521 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
16522 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
16523 var t1slo4 = s[8] ^ lo
16524 var t1shi4 = s[9] ^ hi
16525 var t1slo9 = s[18] ^ lo
16526 var t1shi9 = s[19] ^ hi
16527 var t1slo14 = s[28] ^ lo
16528 var t1shi14 = s[29] ^ hi
16529 var t1slo19 = s[38] ^ lo
16530 var t1shi19 = s[39] ^ hi
16531 var t1slo24 = s[48] ^ lo
16532 var t1shi24 = s[49] ^ hi
16533
16534 // rho & pi
16535 var t2slo0 = t1slo0
16536 var t2shi0 = t1shi0
16537 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
16538 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
16539 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
16540 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
16541 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
16542 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
16543 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
16544 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
16545 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
16546 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
16547 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
16548 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
16549 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
16550 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
16551 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
16552 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
16553 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
16554 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
16555 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
16556 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
16557 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
16558 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
16559 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
16560 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
16561 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
16562 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
16563 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
16564 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
16565 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
16566 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
16567 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
16568 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
16569 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
16570 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
16571 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
16572 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
16573 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
16574 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
16575 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
16576 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
16577 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
16578 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
16579 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
16580 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
16581 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
16582 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
16583 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
16584 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
16585
16586 // chi
16587 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
16588 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
16589 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
16590 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
16591 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
16592 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
16593 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
16594 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
16595 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
16596 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
16597 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
16598 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
16599 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
16600 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
16601 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
16602 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
16603 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
16604 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
16605 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
16606 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
16607 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
16608 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
16609 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
16610 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
16611 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
16612 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
16613 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
16614 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
16615 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
16616 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
16617 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
16618 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
16619 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
16620 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
16621 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
16622 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
16623 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
16624 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
16625 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
16626 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
16627 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
16628 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
16629 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
16630 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
16631 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
16632 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
16633 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
16634 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
16635 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
16636 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
16637
16638 // iota
16639 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
16640 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
16641 }
16642}
16643
16644},{}],70:[function(require,module,exports){
16645(function (Buffer){
16646'use strict'
16647var keccakState = require('./keccak-state-unroll')
16648
16649function Keccak () {
16650 // much faster than `new Array(50)`
16651 this.state = [
16652 0, 0, 0, 0, 0,
16653 0, 0, 0, 0, 0,
16654 0, 0, 0, 0, 0,
16655 0, 0, 0, 0, 0,
16656 0, 0, 0, 0, 0
16657 ]
16658
16659 this.blockSize = null
16660 this.count = 0
16661 this.squeezing = false
16662}
16663
16664Keccak.prototype.initialize = function (rate, capacity) {
16665 for (var i = 0; i < 50; ++i) this.state[i] = 0
16666 this.blockSize = rate / 8
16667 this.count = 0
16668 this.squeezing = false
16669}
16670
16671Keccak.prototype.absorb = function (data) {
16672 for (var i = 0; i < data.length; ++i) {
16673 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
16674 this.count += 1
16675 if (this.count === this.blockSize) {
16676 keccakState.p1600(this.state)
16677 this.count = 0
16678 }
16679 }
16680}
16681
16682Keccak.prototype.absorbLastFewBits = function (bits) {
16683 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
16684 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
16685 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
16686 keccakState.p1600(this.state)
16687 this.count = 0
16688 this.squeezing = true
16689}
16690
16691Keccak.prototype.squeeze = function (length) {
16692 if (!this.squeezing) this.absorbLastFewBits(0x01)
16693
16694 var output = Buffer.allocUnsafe(length)
16695 for (var i = 0; i < length; ++i) {
16696 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
16697 this.count += 1
16698 if (this.count === this.blockSize) {
16699 keccakState.p1600(this.state)
16700 this.count = 0
16701 }
16702 }
16703
16704 return output
16705}
16706
16707Keccak.prototype.copy = function (dest) {
16708 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
16709 dest.blockSize = this.blockSize
16710 dest.count = this.count
16711 dest.squeezing = this.squeezing
16712}
16713
16714module.exports = Keccak
16715
16716}).call(this,require("buffer").Buffer)
16717},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
16718(function (Buffer){
16719/*
16720CryptoJS v3.1.2
16721code.google.com/p/crypto-js
16722(c) 2009-2013 by Jeff Mott. All rights reserved.
16723code.google.com/p/crypto-js/wiki/License
16724*/
16725/** @preserve
16726(c) 2012 by Cédric Mesnil. All rights reserved.
16727
16728Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
16729
16730 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
16731 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
16732
16733THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16734*/
16735
16736// constants table
16737var zl = [
16738 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16739 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
16740 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
16741 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
16742 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
16743]
16744
16745var zr = [
16746 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
16747 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
16748 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
16749 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
16750 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
16751]
16752
16753var sl = [
16754 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
16755 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
16756 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
16757 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
16758 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
16759]
16760
16761var sr = [
16762 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
16763 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
16764 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
16765 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
16766 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
16767]
16768
16769var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
16770var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
16771
16772function bytesToWords (bytes) {
16773 var words = []
16774 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
16775 words[b >>> 5] |= bytes[i] << (24 - b % 32)
16776 }
16777 return words
16778}
16779
16780function wordsToBytes (words) {
16781 var bytes = []
16782 for (var b = 0; b < words.length * 32; b += 8) {
16783 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
16784 }
16785 return bytes
16786}
16787
16788function processBlock (H, M, offset) {
16789 // swap endian
16790 for (var i = 0; i < 16; i++) {
16791 var offset_i = offset + i
16792 var M_offset_i = M[offset_i]
16793
16794 // Swap
16795 M[offset_i] = (
16796 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
16797 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
16798 )
16799 }
16800
16801 // Working variables
16802 var al, bl, cl, dl, el
16803 var ar, br, cr, dr, er
16804
16805 ar = al = H[0]
16806 br = bl = H[1]
16807 cr = cl = H[2]
16808 dr = dl = H[3]
16809 er = el = H[4]
16810
16811 // computation
16812 var t
16813 for (i = 0; i < 80; i += 1) {
16814 t = (al + M[offset + zl[i]]) | 0
16815 if (i < 16) {
16816 t += f1(bl, cl, dl) + hl[0]
16817 } else if (i < 32) {
16818 t += f2(bl, cl, dl) + hl[1]
16819 } else if (i < 48) {
16820 t += f3(bl, cl, dl) + hl[2]
16821 } else if (i < 64) {
16822 t += f4(bl, cl, dl) + hl[3]
16823 } else {// if (i<80) {
16824 t += f5(bl, cl, dl) + hl[4]
16825 }
16826 t = t | 0
16827 t = rotl(t, sl[i])
16828 t = (t + el) | 0
16829 al = el
16830 el = dl
16831 dl = rotl(cl, 10)
16832 cl = bl
16833 bl = t
16834
16835 t = (ar + M[offset + zr[i]]) | 0
16836 if (i < 16) {
16837 t += f5(br, cr, dr) + hr[0]
16838 } else if (i < 32) {
16839 t += f4(br, cr, dr) + hr[1]
16840 } else if (i < 48) {
16841 t += f3(br, cr, dr) + hr[2]
16842 } else if (i < 64) {
16843 t += f2(br, cr, dr) + hr[3]
16844 } else {// if (i<80) {
16845 t += f1(br, cr, dr) + hr[4]
16846 }
16847
16848 t = t | 0
16849 t = rotl(t, sr[i])
16850 t = (t + er) | 0
16851 ar = er
16852 er = dr
16853 dr = rotl(cr, 10)
16854 cr = br
16855 br = t
16856 }
16857
16858 // intermediate hash value
16859 t = (H[1] + cl + dr) | 0
16860 H[1] = (H[2] + dl + er) | 0
16861 H[2] = (H[3] + el + ar) | 0
16862 H[3] = (H[4] + al + br) | 0
16863 H[4] = (H[0] + bl + cr) | 0
16864 H[0] = t
16865}
16866
16867function f1 (x, y, z) {
16868 return ((x) ^ (y) ^ (z))
16869}
16870
16871function f2 (x, y, z) {
16872 return (((x) & (y)) | ((~x) & (z)))
16873}
16874
16875function f3 (x, y, z) {
16876 return (((x) | (~(y))) ^ (z))
16877}
16878
16879function f4 (x, y, z) {
16880 return (((x) & (z)) | ((y) & (~(z))))
16881}
16882
16883function f5 (x, y, z) {
16884 return ((x) ^ ((y) | (~(z))))
16885}
16886
16887function rotl (x, n) {
16888 return (x << n) | (x >>> (32 - n))
16889}
16890
16891function ripemd160 (message) {
16892 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
16893
16894 if (typeof message === 'string') {
16895 message = new Buffer(message, 'utf8')
16896 }
16897
16898 var m = bytesToWords(message)
16899
16900 var nBitsLeft = message.length * 8
16901 var nBitsTotal = message.length * 8
16902
16903 // Add padding
16904 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
16905 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
16906 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
16907 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
16908 )
16909
16910 for (var i = 0; i < m.length; i += 16) {
16911 processBlock(H, m, i)
16912 }
16913
16914 // swap endian
16915 for (i = 0; i < 5; i++) {
16916 // shortcut
16917 var H_i = H[i]
16918
16919 // Swap
16920 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
16921 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
16922 }
16923
16924 var digestbytes = wordsToBytes(H)
16925 return new Buffer(digestbytes)
16926}
16927
16928module.exports = ripemd160
16929
16930}).call(this,require("buffer").Buffer)
16931},{"buffer":5}],72:[function(require,module,exports){
16932(function (Buffer){
16933const assert = require('assert')
16934/**
16935 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
16936 * This function takes in a data, convert it to buffer if not, and a length for recursion
16937 *
16938 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
16939 * @returns {Buffer} - returns buffer of encoded data
16940 **/
16941exports.encode = function (input) {
16942 if (input instanceof Array) {
16943 var output = []
16944 for (var i = 0; i < input.length; i++) {
16945 output.push(exports.encode(input[i]))
16946 }
16947 var buf = Buffer.concat(output)
16948 return Buffer.concat([encodeLength(buf.length, 192), buf])
16949 } else {
16950 input = toBuffer(input)
16951 if (input.length === 1 && input[0] < 128) {
16952 return input
16953 } else {
16954 return Buffer.concat([encodeLength(input.length, 128), input])
16955 }
16956 }
16957}
16958
16959function safeParseInt (v, base) {
16960 if (v.slice(0, 2) === '00') {
16961 throw (new Error('invalid RLP: extra zeros'))
16962 }
16963
16964 return parseInt(v, base)
16965}
16966
16967function encodeLength (len, offset) {
16968 if (len < 56) {
16969 return new Buffer([len + offset])
16970 } else {
16971 var hexLength = intToHex(len)
16972 var lLength = hexLength.length / 2
16973 var firstByte = intToHex(offset + 55 + lLength)
16974 return new Buffer(firstByte + hexLength, 'hex')
16975 }
16976}
16977
16978/**
16979 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
16980 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
16981 * @returns {Array} - returns decode Array of Buffers containg the original message
16982 **/
16983exports.decode = function (input, stream) {
16984 if (!input || input.length === 0) {
16985 return new Buffer([])
16986 }
16987
16988 input = toBuffer(input)
16989 var decoded = _decode(input)
16990
16991 if (stream) {
16992 return decoded
16993 }
16994
16995 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
16996 return decoded.data
16997}
16998
16999exports.getLength = function (input) {
17000 if (!input || input.length === 0) {
17001 return new Buffer([])
17002 }
17003
17004 input = toBuffer(input)
17005 var firstByte = input[0]
17006 if (firstByte <= 0x7f) {
17007 return input.length
17008 } else if (firstByte <= 0xb7) {
17009 return firstByte - 0x7f
17010 } else if (firstByte <= 0xbf) {
17011 return firstByte - 0xb6
17012 } else if (firstByte <= 0xf7) {
17013 // a list between 0-55 bytes long
17014 return firstByte - 0xbf
17015 } else {
17016 // a list over 55 bytes long
17017 var llength = firstByte - 0xf6
17018 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
17019 return llength + length
17020 }
17021}
17022
17023function _decode (input) {
17024 var length, llength, data, innerRemainder, d
17025 var decoded = []
17026 var firstByte = input[0]
17027
17028 if (firstByte <= 0x7f) {
17029 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
17030 return {
17031 data: input.slice(0, 1),
17032 remainder: input.slice(1)
17033 }
17034 } else if (firstByte <= 0xb7) {
17035 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
17036 // The range of the first byte is [0x80, 0xb7]
17037 length = firstByte - 0x7f
17038
17039 // set 0x80 null to 0
17040 if (firstByte === 0x80) {
17041 data = new Buffer([])
17042 } else {
17043 data = input.slice(1, length)
17044 }
17045
17046 if (length === 2 && data[0] < 0x80) {
17047 throw new Error('invalid rlp encoding: byte must be less 0x80')
17048 }
17049
17050 return {
17051 data: data,
17052 remainder: input.slice(length)
17053 }
17054 } else if (firstByte <= 0xbf) {
17055 llength = firstByte - 0xb6
17056 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
17057 data = input.slice(llength, length + llength)
17058 if (data.length < length) {
17059 throw (new Error('invalid RLP'))
17060 }
17061
17062 return {
17063 data: data,
17064 remainder: input.slice(length + llength)
17065 }
17066 } else if (firstByte <= 0xf7) {
17067 // a list between 0-55 bytes long
17068 length = firstByte - 0xbf
17069 innerRemainder = input.slice(1, length)
17070 while (innerRemainder.length) {
17071 d = _decode(innerRemainder)
17072 decoded.push(d.data)
17073 innerRemainder = d.remainder
17074 }
17075
17076 return {
17077 data: decoded,
17078 remainder: input.slice(length)
17079 }
17080 } else {
17081 // a list over 55 bytes long
17082 llength = firstByte - 0xf6
17083 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
17084 var totalLength = llength + length
17085 if (totalLength > input.length) {
17086 throw new Error('invalid rlp: total length is larger than the data')
17087 }
17088
17089 innerRemainder = input.slice(llength, totalLength)
17090 if (innerRemainder.length === 0) {
17091 throw new Error('invalid rlp, List has a invalid length')
17092 }
17093
17094 while (innerRemainder.length) {
17095 d = _decode(innerRemainder)
17096 decoded.push(d.data)
17097 innerRemainder = d.remainder
17098 }
17099 return {
17100 data: decoded,
17101 remainder: input.slice(totalLength)
17102 }
17103 }
17104}
17105
17106function isHexPrefixed (str) {
17107 return str.slice(0, 2) === '0x'
17108}
17109
17110// Removes 0x from a given String
17111function stripHexPrefix (str) {
17112 if (typeof str !== 'string') {
17113 return str
17114 }
17115 return isHexPrefixed(str) ? str.slice(2) : str
17116}
17117
17118function intToHex (i) {
17119 var hex = i.toString(16)
17120 if (hex.length % 2) {
17121 hex = '0' + hex
17122 }
17123
17124 return hex
17125}
17126
17127function padToEven (a) {
17128 if (a.length % 2) a = '0' + a
17129 return a
17130}
17131
17132function intToBuffer (i) {
17133 var hex = intToHex(i)
17134 return new Buffer(hex, 'hex')
17135}
17136
17137function toBuffer (v) {
17138 if (!Buffer.isBuffer(v)) {
17139 if (typeof v === 'string') {
17140 if (isHexPrefixed(v)) {
17141 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
17142 } else {
17143 v = new Buffer(v)
17144 }
17145 } else if (typeof v === 'number') {
17146 if (!v) {
17147 v = new Buffer([])
17148 } else {
17149 v = intToBuffer(v)
17150 }
17151 } else if (v === null || v === undefined) {
17152 v = new Buffer([])
17153 } else if (v.toArray) {
17154 // converts a BN to a Buffer
17155 v = new Buffer(v.toArray())
17156 } else {
17157 throw new Error('invalid type')
17158 }
17159 }
17160 return v
17161}
17162
17163}).call(this,require("buffer").Buffer)
17164},{"assert":1,"buffer":5}],73:[function(require,module,exports){
17165'use strict'
17166module.exports = require('./lib')(require('./lib/elliptic'))
17167
17168},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
17169(function (Buffer){
17170'use strict'
17171var toString = Object.prototype.toString
17172
17173// TypeError
17174exports.isArray = function (value, message) {
17175 if (!Array.isArray(value)) throw TypeError(message)
17176}
17177
17178exports.isBoolean = function (value, message) {
17179 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
17180}
17181
17182exports.isBuffer = function (value, message) {
17183 if (!Buffer.isBuffer(value)) throw TypeError(message)
17184}
17185
17186exports.isFunction = function (value, message) {
17187 if (toString.call(value) !== '[object Function]') throw TypeError(message)
17188}
17189
17190exports.isNumber = function (value, message) {
17191 if (toString.call(value) !== '[object Number]') throw TypeError(message)
17192}
17193
17194exports.isObject = function (value, message) {
17195 if (toString.call(value) !== '[object Object]') throw TypeError(message)
17196}
17197
17198// RangeError
17199exports.isBufferLength = function (buffer, length, message) {
17200 if (buffer.length !== length) throw RangeError(message)
17201}
17202
17203exports.isBufferLength2 = function (buffer, length1, length2, message) {
17204 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
17205}
17206
17207exports.isLengthGTZero = function (value, message) {
17208 if (value.length === 0) throw RangeError(message)
17209}
17210
17211exports.isNumberInInterval = function (number, x, y, message) {
17212 if (number <= x || number >= y) throw RangeError(message)
17213}
17214
17215}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
17216},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
17217(function (Buffer){
17218'use strict'
17219var bip66 = require('bip66')
17220
17221var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
17222 // begin
17223 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
17224 // private key
17225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17227 // middle
17228 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
17229 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17230 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17231 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
17232 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
17233 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
17234 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17235 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
17236 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
17237 // public key
17238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17240 0x00
17241])
17242
17243var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
17244 // begin
17245 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
17246 // private key
17247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17249 // middle
17250 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
17251 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17252 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17253 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
17254 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
17255 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
17256 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
17257 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
17258 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17259 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
17260 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
17261 // public key
17262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17266 0x00
17267])
17268
17269var ZERO_BUFFER_32 = new Buffer([
17270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
17272])
17273
17274exports.privateKeyExport = function (privateKey, publicKey, compressed) {
17275 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
17276 privateKey.copy(result, compressed ? 8 : 9)
17277 publicKey.copy(result, compressed ? 181 : 214)
17278 return result
17279}
17280
17281exports.privateKeyImport = function (privateKey) {
17282 var length = privateKey.length
17283
17284 // sequence header
17285 var index = 0
17286 if (length < index + 1 || privateKey[index] !== 0x30) return
17287 index += 1
17288
17289 // sequence length constructor
17290 if (length < index + 1 || !(privateKey[index] & 0x80)) return
17291
17292 var lenb = privateKey[index] & 0x7f
17293 index += 1
17294 if (lenb < 1 || lenb > 2) return
17295 if (length < index + lenb) return
17296
17297 // sequence length
17298 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
17299 index += lenb
17300 if (length < index + len) return
17301
17302 // sequence element 0: version number (=1)
17303 if (length < index + 3 ||
17304 privateKey[index] !== 0x02 ||
17305 privateKey[index + 1] !== 0x01 ||
17306 privateKey[index + 2] !== 0x01) {
17307 return
17308 }
17309 index += 3
17310
17311 // sequence element 1: octet string, up to 32 bytes
17312 if (length < index + 2 ||
17313 privateKey[index] !== 0x04 ||
17314 privateKey[index + 1] > 0x20 ||
17315 length < index + 2 + privateKey[index + 1]) {
17316 return
17317 }
17318
17319 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
17320}
17321
17322exports.signatureExport = function (sigObj) {
17323 var r = Buffer.concat([new Buffer([0]), sigObj.r])
17324 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
17325
17326 var s = Buffer.concat([new Buffer([0]), sigObj.s])
17327 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
17328
17329 return bip66.encode(r.slice(posR), s.slice(posS))
17330}
17331
17332exports.signatureImport = function (sig) {
17333 var r = new Buffer(ZERO_BUFFER_32)
17334 var s = new Buffer(ZERO_BUFFER_32)
17335
17336 try {
17337 var sigObj = bip66.decode(sig)
17338 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
17339 if (sigObj.r.length > 32) throw new Error('R length is too long')
17340 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
17341 if (sigObj.s.length > 32) throw new Error('S length is too long')
17342 } catch (err) {
17343 return
17344 }
17345
17346 sigObj.r.copy(r, 32 - sigObj.r.length)
17347 sigObj.s.copy(s, 32 - sigObj.s.length)
17348
17349 return { r: r, s: s }
17350}
17351
17352exports.signatureImportLax = function (sig) {
17353 var r = new Buffer(ZERO_BUFFER_32)
17354 var s = new Buffer(ZERO_BUFFER_32)
17355
17356 var length = sig.length
17357 var index = 0
17358
17359 // sequence tag byte
17360 if (sig[index++] !== 0x30) return
17361
17362 // sequence length byte
17363 var lenbyte = sig[index++]
17364 if (lenbyte & 0x80) {
17365 index += lenbyte - 0x80
17366 if (index > length) return
17367 }
17368
17369 // sequence tag byte for r
17370 if (sig[index++] !== 0x02) return
17371
17372 // length for r
17373 var rlen = sig[index++]
17374 if (rlen & 0x80) {
17375 lenbyte = rlen - 0x80
17376 if (index + lenbyte > length) return
17377 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
17378 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
17379 }
17380 if (rlen > length - index) return
17381 var rindex = index
17382 index += rlen
17383
17384 // sequence tag byte for s
17385 if (sig[index++] !== 0x02) return
17386
17387 // length for s
17388 var slen = sig[index++]
17389 if (slen & 0x80) {
17390 lenbyte = slen - 0x80
17391 if (index + lenbyte > length) return
17392 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
17393 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
17394 }
17395 if (slen > length - index) return
17396 var sindex = index
17397 index += slen
17398
17399 // ignore leading zeros in r
17400 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
17401 // copy r value
17402 if (rlen > 32) return
17403 var rvalue = sig.slice(rindex, rindex + rlen)
17404 rvalue.copy(r, 32 - rvalue.length)
17405
17406 // ignore leading zeros in s
17407 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
17408 // copy s value
17409 if (slen > 32) return
17410 var svalue = sig.slice(sindex, sindex + slen)
17411 svalue.copy(s, 32 - svalue.length)
17412
17413 return { r: r, s: s }
17414}
17415
17416}).call(this,require("buffer").Buffer)
17417},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
17418(function (Buffer){
17419'use strict'
17420var createHash = require('create-hash')
17421var BN = require('bn.js')
17422var EC = require('elliptic').ec
17423
17424var messages = require('../messages.json')
17425
17426var ec = new EC('secp256k1')
17427var ecparams = ec.curve
17428
17429function loadCompressedPublicKey (first, xBuffer) {
17430 var x = new BN(xBuffer)
17431
17432 // overflow
17433 if (x.cmp(ecparams.p) >= 0) return null
17434 x = x.toRed(ecparams.red)
17435
17436 // compute corresponding Y
17437 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
17438 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
17439
17440 return ec.keyPair({ pub: { x: x, y: y } })
17441}
17442
17443function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
17444 var x = new BN(xBuffer)
17445 var y = new BN(yBuffer)
17446
17447 // overflow
17448 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
17449
17450 x = x.toRed(ecparams.red)
17451 y = y.toRed(ecparams.red)
17452
17453 // is odd flag
17454 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
17455
17456 // x*x*x + b = y*y
17457 var x3 = x.redSqr().redIMul(x)
17458 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
17459
17460 return ec.keyPair({ pub: { x: x, y: y } })
17461}
17462
17463function loadPublicKey (publicKey) {
17464 var first = publicKey[0]
17465 switch (first) {
17466 case 0x02:
17467 case 0x03:
17468 if (publicKey.length !== 33) return null
17469 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
17470 case 0x04:
17471 case 0x06:
17472 case 0x07:
17473 if (publicKey.length !== 65) return null
17474 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
17475 default:
17476 return null
17477 }
17478}
17479
17480exports.privateKeyVerify = function (privateKey) {
17481 var bn = new BN(privateKey)
17482 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
17483}
17484
17485exports.privateKeyExport = function (privateKey, compressed) {
17486 var d = new BN(privateKey)
17487 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
17488
17489 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
17490}
17491
17492exports.privateKeyTweakAdd = function (privateKey, tweak) {
17493 var bn = new BN(tweak)
17494 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
17495
17496 bn.iadd(new BN(privateKey))
17497 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
17498 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
17499
17500 return bn.toArrayLike(Buffer, 'be', 32)
17501}
17502
17503exports.privateKeyTweakMul = function (privateKey, tweak) {
17504 var bn = new BN(tweak)
17505 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
17506
17507 bn.imul(new BN(privateKey))
17508 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
17509
17510 return bn.toArrayLike(Buffer, 'be', 32)
17511}
17512
17513exports.publicKeyCreate = function (privateKey, compressed) {
17514 var d = new BN(privateKey)
17515 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
17516
17517 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
17518}
17519
17520exports.publicKeyConvert = function (publicKey, compressed) {
17521 var pair = loadPublicKey(publicKey)
17522 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17523
17524 return new Buffer(pair.getPublic(compressed, true))
17525}
17526
17527exports.publicKeyVerify = function (publicKey) {
17528 return loadPublicKey(publicKey) !== null
17529}
17530
17531exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
17532 var pair = loadPublicKey(publicKey)
17533 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17534
17535 tweak = new BN(tweak)
17536 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
17537
17538 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
17539}
17540
17541exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
17542 var pair = loadPublicKey(publicKey)
17543 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17544
17545 tweak = new BN(tweak)
17546 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
17547
17548 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
17549}
17550
17551exports.publicKeyCombine = function (publicKeys, compressed) {
17552 var pairs = new Array(publicKeys.length)
17553 for (var i = 0; i < publicKeys.length; ++i) {
17554 pairs[i] = loadPublicKey(publicKeys[i])
17555 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17556 }
17557
17558 var point = pairs[0].pub
17559 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
17560 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
17561
17562 return new Buffer(point.encode(true, compressed))
17563}
17564
17565exports.signatureNormalize = function (signature) {
17566 var r = new BN(signature.slice(0, 32))
17567 var s = new BN(signature.slice(32, 64))
17568 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17569
17570 var result = new Buffer(signature)
17571 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
17572
17573 return result
17574}
17575
17576exports.signatureExport = function (signature) {
17577 var r = signature.slice(0, 32)
17578 var s = signature.slice(32, 64)
17579 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17580
17581 return { r: r, s: s }
17582}
17583
17584exports.signatureImport = function (sigObj) {
17585 var r = new BN(sigObj.r)
17586 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
17587
17588 var s = new BN(sigObj.s)
17589 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
17590
17591 return Buffer.concat([
17592 r.toArrayLike(Buffer, 'be', 32),
17593 s.toArrayLike(Buffer, 'be', 32)
17594 ])
17595}
17596
17597exports.sign = function (message, privateKey, noncefn, data) {
17598 if (typeof noncefn === 'function') {
17599 var getNonce = noncefn
17600 noncefn = function (counter) {
17601 var nonce = getNonce(message, privateKey, null, data, counter)
17602 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
17603
17604 return new BN(nonce)
17605 }
17606 }
17607
17608 var d = new BN(privateKey)
17609 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
17610
17611 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
17612 return {
17613 signature: Buffer.concat([
17614 result.r.toArrayLike(Buffer, 'be', 32),
17615 result.s.toArrayLike(Buffer, 'be', 32)
17616 ]),
17617 recovery: result.recoveryParam
17618 }
17619}
17620
17621exports.verify = function (message, signature, publicKey) {
17622 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
17623
17624 var sigr = new BN(sigObj.r)
17625 var sigs = new BN(sigObj.s)
17626 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17627 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
17628
17629 var pair = loadPublicKey(publicKey)
17630 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17631
17632 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
17633}
17634
17635exports.recover = function (message, signature, recovery, compressed) {
17636 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
17637
17638 var sigr = new BN(sigObj.r)
17639 var sigs = new BN(sigObj.s)
17640 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17641
17642 try {
17643 if (sigr.isZero() || sigs.isZero()) throw new Error()
17644
17645 var point = ec.recoverPubKey(message, sigObj, recovery)
17646 return new Buffer(point.encode(true, compressed))
17647 } catch (err) {
17648 throw new Error(messages.ECDSA_RECOVER_FAIL)
17649 }
17650}
17651
17652exports.ecdh = function (publicKey, privateKey) {
17653 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
17654 return createHash('sha256').update(shared).digest()
17655}
17656
17657exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
17658 var pair = loadPublicKey(publicKey)
17659 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17660
17661 var scalar = new BN(privateKey)
17662 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
17663
17664 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
17665}
17666
17667}).call(this,require("buffer").Buffer)
17668},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
17669'use strict'
17670var assert = require('./assert')
17671var der = require('./der')
17672var messages = require('./messages.json')
17673
17674function initCompressedValue (value, defaultValue) {
17675 if (value === undefined) return defaultValue
17676
17677 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
17678 return value
17679}
17680
17681module.exports = function (secp256k1) {
17682 return {
17683 privateKeyVerify: function (privateKey) {
17684 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17685 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
17686 },
17687
17688 privateKeyExport: function (privateKey, compressed) {
17689 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17690 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17691
17692 compressed = initCompressedValue(compressed, true)
17693 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
17694
17695 return der.privateKeyExport(privateKey, publicKey, compressed)
17696 },
17697
17698 privateKeyImport: function (privateKey) {
17699 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17700
17701 privateKey = der.privateKeyImport(privateKey)
17702 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
17703
17704 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
17705 },
17706
17707 privateKeyTweakAdd: function (privateKey, tweak) {
17708 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17709 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17710
17711 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17712 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17713
17714 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
17715 },
17716
17717 privateKeyTweakMul: function (privateKey, tweak) {
17718 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17719 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17720
17721 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17722 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17723
17724 return secp256k1.privateKeyTweakMul(privateKey, tweak)
17725 },
17726
17727 publicKeyCreate: function (privateKey, compressed) {
17728 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17729 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17730
17731 compressed = initCompressedValue(compressed, true)
17732
17733 return secp256k1.publicKeyCreate(privateKey, compressed)
17734 },
17735
17736 publicKeyConvert: function (publicKey, compressed) {
17737 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17738 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17739
17740 compressed = initCompressedValue(compressed, true)
17741
17742 return secp256k1.publicKeyConvert(publicKey, compressed)
17743 },
17744
17745 publicKeyVerify: function (publicKey) {
17746 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17747 return secp256k1.publicKeyVerify(publicKey)
17748 },
17749
17750 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
17751 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17752 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17753
17754 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17755 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17756
17757 compressed = initCompressedValue(compressed, true)
17758
17759 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
17760 },
17761
17762 publicKeyTweakMul: function (publicKey, tweak, compressed) {
17763 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17764 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17765
17766 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17767 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17768
17769 compressed = initCompressedValue(compressed, true)
17770
17771 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
17772 },
17773
17774 publicKeyCombine: function (publicKeys, compressed) {
17775 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
17776 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
17777 for (var i = 0; i < publicKeys.length; ++i) {
17778 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
17779 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17780 }
17781
17782 compressed = initCompressedValue(compressed, true)
17783
17784 return secp256k1.publicKeyCombine(publicKeys, compressed)
17785 },
17786
17787 signatureNormalize: function (signature) {
17788 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17789 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17790
17791 return secp256k1.signatureNormalize(signature)
17792 },
17793
17794 signatureExport: function (signature) {
17795 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17796 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17797
17798 var sigObj = secp256k1.signatureExport(signature)
17799 return der.signatureExport(sigObj)
17800 },
17801
17802 signatureImport: function (sig) {
17803 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17804 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17805
17806 var sigObj = der.signatureImport(sig)
17807 if (sigObj) return secp256k1.signatureImport(sigObj)
17808
17809 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
17810 },
17811
17812 signatureImportLax: function (sig) {
17813 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17814 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17815
17816 var sigObj = der.signatureImportLax(sig)
17817 if (sigObj) return secp256k1.signatureImport(sigObj)
17818
17819 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
17820 },
17821
17822 sign: function (message, privateKey, options) {
17823 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
17824 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
17825
17826 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17827 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17828
17829 var data = null
17830 var noncefn = null
17831 if (options !== undefined) {
17832 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
17833
17834 if (options.data !== undefined) {
17835 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
17836 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
17837 data = options.data
17838 }
17839
17840 if (options.noncefn !== undefined) {
17841 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
17842 noncefn = options.noncefn
17843 }
17844 }
17845
17846 return secp256k1.sign(message, privateKey, noncefn, data)
17847 },
17848
17849 verify: function (message, signature, publicKey) {
17850 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
17851 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
17852
17853 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17854 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17855
17856 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17857 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17858
17859 return secp256k1.verify(message, signature, publicKey)
17860 },
17861
17862 recover: function (message, signature, recovery, compressed) {
17863 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
17864 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
17865
17866 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17867 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17868
17869 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
17870 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
17871
17872 compressed = initCompressedValue(compressed, true)
17873
17874 return secp256k1.recover(message, signature, recovery, compressed)
17875 },
17876
17877 ecdh: function (publicKey, privateKey) {
17878 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17879 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17880
17881 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17882 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17883
17884 return secp256k1.ecdh(publicKey, privateKey)
17885 },
17886
17887 ecdhUnsafe: function (publicKey, privateKey, compressed) {
17888 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17889 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17890
17891 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17892 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17893
17894 compressed = initCompressedValue(compressed, true)
17895
17896 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
17897 }
17898 }
17899}
17900
17901},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
17902module.exports={
17903 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
17904 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
17905 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
17906 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
17907 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
17908 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
17909 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
17910 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
17911 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
17912 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
17913 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
17914 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
17915 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
17916 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
17917 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
17918 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
17919 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
17920 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
17921 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
17922 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
17923 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
17924 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
17925 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
17926 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
17927 "MSG32_TYPE_INVALID": "message should be a Buffer",
17928 "MSG32_LENGTH_INVALID": "message length is invalid",
17929 "OPTIONS_TYPE_INVALID": "options should be an Object",
17930 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
17931 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
17932 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
17933 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
17934 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
17935 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
17936 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
17937}
17938
17939},{}],79:[function(require,module,exports){
17940(function (Buffer){
17941// prototype class for hash functions
17942function Hash (blockSize, finalSize) {
17943 this._block = new Buffer(blockSize)
17944 this._finalSize = finalSize
17945 this._blockSize = blockSize
17946 this._len = 0
17947 this._s = 0
17948}
17949
17950Hash.prototype.update = function (data, enc) {
17951 if (typeof data === 'string') {
17952 enc = enc || 'utf8'
17953 data = new Buffer(data, enc)
17954 }
17955
17956 var l = this._len += data.length
17957 var s = this._s || 0
17958 var f = 0
17959 var buffer = this._block
17960
17961 while (s < l) {
17962 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
17963 var ch = (t - f)
17964
17965 for (var i = 0; i < ch; i++) {
17966 buffer[(s % this._blockSize) + i] = data[i + f]
17967 }
17968
17969 s += ch
17970 f += ch
17971
17972 if ((s % this._blockSize) === 0) {
17973 this._update(buffer)
17974 }
17975 }
17976 this._s = s
17977
17978 return this
17979}
17980
17981Hash.prototype.digest = function (enc) {
17982 // Suppose the length of the message M, in bits, is l
17983 var l = this._len * 8
17984
17985 // Append the bit 1 to the end of the message
17986 this._block[this._len % this._blockSize] = 0x80
17987
17988 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
17989 this._block.fill(0, this._len % this._blockSize + 1)
17990
17991 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
17992 this._update(this._block)
17993 this._block.fill(0)
17994 }
17995
17996 // to this append the block which is equal to the number l written in binary
17997 // TODO: handle case where l is > Math.pow(2, 29)
17998 this._block.writeInt32BE(l, this._blockSize - 4)
17999
18000 var hash = this._update(this._block) || this._hash()
18001
18002 return enc ? hash.toString(enc) : hash
18003}
18004
18005Hash.prototype._update = function () {
18006 throw new Error('_update must be implemented by subclass')
18007}
18008
18009module.exports = Hash
18010
18011}).call(this,require("buffer").Buffer)
18012},{"buffer":5}],80:[function(require,module,exports){
18013var exports = module.exports = function SHA (algorithm) {
18014 algorithm = algorithm.toLowerCase()
18015
18016 var Algorithm = exports[algorithm]
18017 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
18018
18019 return new Algorithm()
18020}
18021
18022exports.sha = require('./sha')
18023exports.sha1 = require('./sha1')
18024exports.sha224 = require('./sha224')
18025exports.sha256 = require('./sha256')
18026exports.sha384 = require('./sha384')
18027exports.sha512 = require('./sha512')
18028
18029},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
18030(function (Buffer){
18031/*
18032 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
18033 * in FIPS PUB 180-1
18034 * This source code is derived from sha1.js of the same repository.
18035 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
18036 * operation was added.
18037 */
18038
18039var inherits = require('inherits')
18040var Hash = require('./hash')
18041
18042var K = [
18043 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
18044]
18045
18046var W = new Array(80)
18047
18048function Sha () {
18049 this.init()
18050 this._w = W
18051
18052 Hash.call(this, 64, 56)
18053}
18054
18055inherits(Sha, Hash)
18056
18057Sha.prototype.init = function () {
18058 this._a = 0x67452301
18059 this._b = 0xefcdab89
18060 this._c = 0x98badcfe
18061 this._d = 0x10325476
18062 this._e = 0xc3d2e1f0
18063
18064 return this
18065}
18066
18067function rotl5 (num) {
18068 return (num << 5) | (num >>> 27)
18069}
18070
18071function rotl30 (num) {
18072 return (num << 30) | (num >>> 2)
18073}
18074
18075function ft (s, b, c, d) {
18076 if (s === 0) return (b & c) | ((~b) & d)
18077 if (s === 2) return (b & c) | (b & d) | (c & d)
18078 return b ^ c ^ d
18079}
18080
18081Sha.prototype._update = function (M) {
18082 var W = this._w
18083
18084 var a = this._a | 0
18085 var b = this._b | 0
18086 var c = this._c | 0
18087 var d = this._d | 0
18088 var e = this._e | 0
18089
18090 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
18091 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
18092
18093 for (var j = 0; j < 80; ++j) {
18094 var s = ~~(j / 20)
18095 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
18096
18097 e = d
18098 d = c
18099 c = rotl30(b)
18100 b = a
18101 a = t
18102 }
18103
18104 this._a = (a + this._a) | 0
18105 this._b = (b + this._b) | 0
18106 this._c = (c + this._c) | 0
18107 this._d = (d + this._d) | 0
18108 this._e = (e + this._e) | 0
18109}
18110
18111Sha.prototype._hash = function () {
18112 var H = new Buffer(20)
18113
18114 H.writeInt32BE(this._a | 0, 0)
18115 H.writeInt32BE(this._b | 0, 4)
18116 H.writeInt32BE(this._c | 0, 8)
18117 H.writeInt32BE(this._d | 0, 12)
18118 H.writeInt32BE(this._e | 0, 16)
18119
18120 return H
18121}
18122
18123module.exports = Sha
18124
18125}).call(this,require("buffer").Buffer)
18126},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
18127(function (Buffer){
18128/*
18129 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
18130 * in FIPS PUB 180-1
18131 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
18132 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
18133 * Distributed under the BSD License
18134 * See http://pajhome.org.uk/crypt/md5 for details.
18135 */
18136
18137var inherits = require('inherits')
18138var Hash = require('./hash')
18139
18140var K = [
18141 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
18142]
18143
18144var W = new Array(80)
18145
18146function Sha1 () {
18147 this.init()
18148 this._w = W
18149
18150 Hash.call(this, 64, 56)
18151}
18152
18153inherits(Sha1, Hash)
18154
18155Sha1.prototype.init = function () {
18156 this._a = 0x67452301
18157 this._b = 0xefcdab89
18158 this._c = 0x98badcfe
18159 this._d = 0x10325476
18160 this._e = 0xc3d2e1f0
18161
18162 return this
18163}
18164
18165function rotl1 (num) {
18166 return (num << 1) | (num >>> 31)
18167}
18168
18169function rotl5 (num) {
18170 return (num << 5) | (num >>> 27)
18171}
18172
18173function rotl30 (num) {
18174 return (num << 30) | (num >>> 2)
18175}
18176
18177function ft (s, b, c, d) {
18178 if (s === 0) return (b & c) | ((~b) & d)
18179 if (s === 2) return (b & c) | (b & d) | (c & d)
18180 return b ^ c ^ d
18181}
18182
18183Sha1.prototype._update = function (M) {
18184 var W = this._w
18185
18186 var a = this._a | 0
18187 var b = this._b | 0
18188 var c = this._c | 0
18189 var d = this._d | 0
18190 var e = this._e | 0
18191
18192 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
18193 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
18194
18195 for (var j = 0; j < 80; ++j) {
18196 var s = ~~(j / 20)
18197 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
18198
18199 e = d
18200 d = c
18201 c = rotl30(b)
18202 b = a
18203 a = t
18204 }
18205
18206 this._a = (a + this._a) | 0
18207 this._b = (b + this._b) | 0
18208 this._c = (c + this._c) | 0
18209 this._d = (d + this._d) | 0
18210 this._e = (e + this._e) | 0
18211}
18212
18213Sha1.prototype._hash = function () {
18214 var H = new Buffer(20)
18215
18216 H.writeInt32BE(this._a | 0, 0)
18217 H.writeInt32BE(this._b | 0, 4)
18218 H.writeInt32BE(this._c | 0, 8)
18219 H.writeInt32BE(this._d | 0, 12)
18220 H.writeInt32BE(this._e | 0, 16)
18221
18222 return H
18223}
18224
18225module.exports = Sha1
18226
18227}).call(this,require("buffer").Buffer)
18228},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
18229(function (Buffer){
18230/**
18231 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
18232 * in FIPS 180-2
18233 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
18234 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
18235 *
18236 */
18237
18238var inherits = require('inherits')
18239var Sha256 = require('./sha256')
18240var Hash = require('./hash')
18241
18242var W = new Array(64)
18243
18244function Sha224 () {
18245 this.init()
18246
18247 this._w = W // new Array(64)
18248
18249 Hash.call(this, 64, 56)
18250}
18251
18252inherits(Sha224, Sha256)
18253
18254Sha224.prototype.init = function () {
18255 this._a = 0xc1059ed8
18256 this._b = 0x367cd507
18257 this._c = 0x3070dd17
18258 this._d = 0xf70e5939
18259 this._e = 0xffc00b31
18260 this._f = 0x68581511
18261 this._g = 0x64f98fa7
18262 this._h = 0xbefa4fa4
18263
18264 return this
18265}
18266
18267Sha224.prototype._hash = function () {
18268 var H = new Buffer(28)
18269
18270 H.writeInt32BE(this._a, 0)
18271 H.writeInt32BE(this._b, 4)
18272 H.writeInt32BE(this._c, 8)
18273 H.writeInt32BE(this._d, 12)
18274 H.writeInt32BE(this._e, 16)
18275 H.writeInt32BE(this._f, 20)
18276 H.writeInt32BE(this._g, 24)
18277
18278 return H
18279}
18280
18281module.exports = Sha224
18282
18283}).call(this,require("buffer").Buffer)
18284},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
18285(function (Buffer){
18286/**
18287 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
18288 * in FIPS 180-2
18289 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
18290 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
18291 *
18292 */
18293
18294var inherits = require('inherits')
18295var Hash = require('./hash')
18296
18297var K = [
18298 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
18299 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
18300 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
18301 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
18302 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
18303 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
18304 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
18305 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
18306 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
18307 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
18308 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
18309 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
18310 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
18311 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
18312 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
18313 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
18314]
18315
18316var W = new Array(64)
18317
18318function Sha256 () {
18319 this.init()
18320
18321 this._w = W // new Array(64)
18322
18323 Hash.call(this, 64, 56)
18324}
18325
18326inherits(Sha256, Hash)
18327
18328Sha256.prototype.init = function () {
18329 this._a = 0x6a09e667
18330 this._b = 0xbb67ae85
18331 this._c = 0x3c6ef372
18332 this._d = 0xa54ff53a
18333 this._e = 0x510e527f
18334 this._f = 0x9b05688c
18335 this._g = 0x1f83d9ab
18336 this._h = 0x5be0cd19
18337
18338 return this
18339}
18340
18341function ch (x, y, z) {
18342 return z ^ (x & (y ^ z))
18343}
18344
18345function maj (x, y, z) {
18346 return (x & y) | (z & (x | y))
18347}
18348
18349function sigma0 (x) {
18350 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
18351}
18352
18353function sigma1 (x) {
18354 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
18355}
18356
18357function gamma0 (x) {
18358 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
18359}
18360
18361function gamma1 (x) {
18362 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
18363}
18364
18365Sha256.prototype._update = function (M) {
18366 var W = this._w
18367
18368 var a = this._a | 0
18369 var b = this._b | 0
18370 var c = this._c | 0
18371 var d = this._d | 0
18372 var e = this._e | 0
18373 var f = this._f | 0
18374 var g = this._g | 0
18375 var h = this._h | 0
18376
18377 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
18378 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
18379
18380 for (var j = 0; j < 64; ++j) {
18381 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
18382 var T2 = (sigma0(a) + maj(a, b, c)) | 0
18383
18384 h = g
18385 g = f
18386 f = e
18387 e = (d + T1) | 0
18388 d = c
18389 c = b
18390 b = a
18391 a = (T1 + T2) | 0
18392 }
18393
18394 this._a = (a + this._a) | 0
18395 this._b = (b + this._b) | 0
18396 this._c = (c + this._c) | 0
18397 this._d = (d + this._d) | 0
18398 this._e = (e + this._e) | 0
18399 this._f = (f + this._f) | 0
18400 this._g = (g + this._g) | 0
18401 this._h = (h + this._h) | 0
18402}
18403
18404Sha256.prototype._hash = function () {
18405 var H = new Buffer(32)
18406
18407 H.writeInt32BE(this._a, 0)
18408 H.writeInt32BE(this._b, 4)
18409 H.writeInt32BE(this._c, 8)
18410 H.writeInt32BE(this._d, 12)
18411 H.writeInt32BE(this._e, 16)
18412 H.writeInt32BE(this._f, 20)
18413 H.writeInt32BE(this._g, 24)
18414 H.writeInt32BE(this._h, 28)
18415
18416 return H
18417}
18418
18419module.exports = Sha256
18420
18421}).call(this,require("buffer").Buffer)
18422},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
18423(function (Buffer){
18424var inherits = require('inherits')
18425var SHA512 = require('./sha512')
18426var Hash = require('./hash')
18427
18428var W = new Array(160)
18429
18430function Sha384 () {
18431 this.init()
18432 this._w = W
18433
18434 Hash.call(this, 128, 112)
18435}
18436
18437inherits(Sha384, SHA512)
18438
18439Sha384.prototype.init = function () {
18440 this._ah = 0xcbbb9d5d
18441 this._bh = 0x629a292a
18442 this._ch = 0x9159015a
18443 this._dh = 0x152fecd8
18444 this._eh = 0x67332667
18445 this._fh = 0x8eb44a87
18446 this._gh = 0xdb0c2e0d
18447 this._hh = 0x47b5481d
18448
18449 this._al = 0xc1059ed8
18450 this._bl = 0x367cd507
18451 this._cl = 0x3070dd17
18452 this._dl = 0xf70e5939
18453 this._el = 0xffc00b31
18454 this._fl = 0x68581511
18455 this._gl = 0x64f98fa7
18456 this._hl = 0xbefa4fa4
18457
18458 return this
18459}
18460
18461Sha384.prototype._hash = function () {
18462 var H = new Buffer(48)
18463
18464 function writeInt64BE (h, l, offset) {
18465 H.writeInt32BE(h, offset)
18466 H.writeInt32BE(l, offset + 4)
18467 }
18468
18469 writeInt64BE(this._ah, this._al, 0)
18470 writeInt64BE(this._bh, this._bl, 8)
18471 writeInt64BE(this._ch, this._cl, 16)
18472 writeInt64BE(this._dh, this._dl, 24)
18473 writeInt64BE(this._eh, this._el, 32)
18474 writeInt64BE(this._fh, this._fl, 40)
18475
18476 return H
18477}
18478
18479module.exports = Sha384
18480
18481}).call(this,require("buffer").Buffer)
18482},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
18483(function (Buffer){
18484var inherits = require('inherits')
18485var Hash = require('./hash')
18486
18487var K = [
18488 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
18489 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
18490 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
18491 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
18492 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
18493 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
18494 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
18495 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
18496 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
18497 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
18498 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
18499 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
18500 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
18501 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
18502 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
18503 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
18504 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
18505 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
18506 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
18507 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
18508 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
18509 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
18510 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
18511 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
18512 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
18513 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
18514 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
18515 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
18516 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
18517 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
18518 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
18519 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
18520 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
18521 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
18522 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
18523 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
18524 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
18525 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
18526 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
18527 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
18528]
18529
18530var W = new Array(160)
18531
18532function Sha512 () {
18533 this.init()
18534 this._w = W
18535
18536 Hash.call(this, 128, 112)
18537}
18538
18539inherits(Sha512, Hash)
18540
18541Sha512.prototype.init = function () {
18542 this._ah = 0x6a09e667
18543 this._bh = 0xbb67ae85
18544 this._ch = 0x3c6ef372
18545 this._dh = 0xa54ff53a
18546 this._eh = 0x510e527f
18547 this._fh = 0x9b05688c
18548 this._gh = 0x1f83d9ab
18549 this._hh = 0x5be0cd19
18550
18551 this._al = 0xf3bcc908
18552 this._bl = 0x84caa73b
18553 this._cl = 0xfe94f82b
18554 this._dl = 0x5f1d36f1
18555 this._el = 0xade682d1
18556 this._fl = 0x2b3e6c1f
18557 this._gl = 0xfb41bd6b
18558 this._hl = 0x137e2179
18559
18560 return this
18561}
18562
18563function Ch (x, y, z) {
18564 return z ^ (x & (y ^ z))
18565}
18566
18567function maj (x, y, z) {
18568 return (x & y) | (z & (x | y))
18569}
18570
18571function sigma0 (x, xl) {
18572 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
18573}
18574
18575function sigma1 (x, xl) {
18576 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
18577}
18578
18579function Gamma0 (x, xl) {
18580 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
18581}
18582
18583function Gamma0l (x, xl) {
18584 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
18585}
18586
18587function Gamma1 (x, xl) {
18588 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
18589}
18590
18591function Gamma1l (x, xl) {
18592 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
18593}
18594
18595function getCarry (a, b) {
18596 return (a >>> 0) < (b >>> 0) ? 1 : 0
18597}
18598
18599Sha512.prototype._update = function (M) {
18600 var W = this._w
18601
18602 var ah = this._ah | 0
18603 var bh = this._bh | 0
18604 var ch = this._ch | 0
18605 var dh = this._dh | 0
18606 var eh = this._eh | 0
18607 var fh = this._fh | 0
18608 var gh = this._gh | 0
18609 var hh = this._hh | 0
18610
18611 var al = this._al | 0
18612 var bl = this._bl | 0
18613 var cl = this._cl | 0
18614 var dl = this._dl | 0
18615 var el = this._el | 0
18616 var fl = this._fl | 0
18617 var gl = this._gl | 0
18618 var hl = this._hl | 0
18619
18620 for (var i = 0; i < 32; i += 2) {
18621 W[i] = M.readInt32BE(i * 4)
18622 W[i + 1] = M.readInt32BE(i * 4 + 4)
18623 }
18624 for (; i < 160; i += 2) {
18625 var xh = W[i - 15 * 2]
18626 var xl = W[i - 15 * 2 + 1]
18627 var gamma0 = Gamma0(xh, xl)
18628 var gamma0l = Gamma0l(xl, xh)
18629
18630 xh = W[i - 2 * 2]
18631 xl = W[i - 2 * 2 + 1]
18632 var gamma1 = Gamma1(xh, xl)
18633 var gamma1l = Gamma1l(xl, xh)
18634
18635 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
18636 var Wi7h = W[i - 7 * 2]
18637 var Wi7l = W[i - 7 * 2 + 1]
18638
18639 var Wi16h = W[i - 16 * 2]
18640 var Wi16l = W[i - 16 * 2 + 1]
18641
18642 var Wil = (gamma0l + Wi7l) | 0
18643 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
18644 Wil = (Wil + gamma1l) | 0
18645 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
18646 Wil = (Wil + Wi16l) | 0
18647 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
18648
18649 W[i] = Wih
18650 W[i + 1] = Wil
18651 }
18652
18653 for (var j = 0; j < 160; j += 2) {
18654 Wih = W[j]
18655 Wil = W[j + 1]
18656
18657 var majh = maj(ah, bh, ch)
18658 var majl = maj(al, bl, cl)
18659
18660 var sigma0h = sigma0(ah, al)
18661 var sigma0l = sigma0(al, ah)
18662 var sigma1h = sigma1(eh, el)
18663 var sigma1l = sigma1(el, eh)
18664
18665 // t1 = h + sigma1 + ch + K[j] + W[j]
18666 var Kih = K[j]
18667 var Kil = K[j + 1]
18668
18669 var chh = Ch(eh, fh, gh)
18670 var chl = Ch(el, fl, gl)
18671
18672 var t1l = (hl + sigma1l) | 0
18673 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
18674 t1l = (t1l + chl) | 0
18675 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
18676 t1l = (t1l + Kil) | 0
18677 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
18678 t1l = (t1l + Wil) | 0
18679 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
18680
18681 // t2 = sigma0 + maj
18682 var t2l = (sigma0l + majl) | 0
18683 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
18684
18685 hh = gh
18686 hl = gl
18687 gh = fh
18688 gl = fl
18689 fh = eh
18690 fl = el
18691 el = (dl + t1l) | 0
18692 eh = (dh + t1h + getCarry(el, dl)) | 0
18693 dh = ch
18694 dl = cl
18695 ch = bh
18696 cl = bl
18697 bh = ah
18698 bl = al
18699 al = (t1l + t2l) | 0
18700 ah = (t1h + t2h + getCarry(al, t1l)) | 0
18701 }
18702
18703 this._al = (this._al + al) | 0
18704 this._bl = (this._bl + bl) | 0
18705 this._cl = (this._cl + cl) | 0
18706 this._dl = (this._dl + dl) | 0
18707 this._el = (this._el + el) | 0
18708 this._fl = (this._fl + fl) | 0
18709 this._gl = (this._gl + gl) | 0
18710 this._hl = (this._hl + hl) | 0
18711
18712 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
18713 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
18714 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
18715 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
18716 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
18717 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
18718 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
18719 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
18720}
18721
18722Sha512.prototype._hash = function () {
18723 var H = new Buffer(64)
18724
18725 function writeInt64BE (h, l, offset) {
18726 H.writeInt32BE(h, offset)
18727 H.writeInt32BE(l, offset + 4)
18728 }
18729
18730 writeInt64BE(this._ah, this._al, 0)
18731 writeInt64BE(this._bh, this._bl, 8)
18732 writeInt64BE(this._ch, this._cl, 16)
18733 writeInt64BE(this._dh, this._dl, 24)
18734 writeInt64BE(this._eh, this._el, 32)
18735 writeInt64BE(this._fh, this._fl, 40)
18736 writeInt64BE(this._gh, this._gl, 48)
18737 writeInt64BE(this._hh, this._hl, 56)
18738
18739 return H
18740}
18741
18742module.exports = Sha512
18743
18744}).call(this,require("buffer").Buffer)
18745},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
18746var isHexPrefixed = require('is-hex-prefixed');
18747
18748/**
18749 * Removes '0x' from a given `String` is present
18750 * @param {String} str the string value
18751 * @return {String|Optional} a string by pass if necessary
18752 */
18753module.exports = function stripHexPrefix(str) {
18754 if (typeof str !== 'string') {
18755 return str;
18756 }
18757
18758 return isHexPrefixed(str) ? str.slice(2) : str;
18759}
18760
18761},{"is-hex-prefixed":64}]},{},[31])(31)
18762}); \ No newline at end of file
diff --git a/src/js/index.js b/src/js/index.js
index f593b3a..8c54cab 100644
--- a/src/js/index.js
+++ b/src/js/index.js
@@ -579,6 +579,15 @@
579 if (useHardenedAddresses) { 579 if (useHardenedAddresses) {
580 indexText = indexText + "'"; 580 indexText = indexText + "'";
581 } 581 }
582 // Ethereum values are different
583 if (networks[DOM.network.val()].name == "Ethereum") {
584 var privKeyBuffer = key.privKey.d.toBuffer();
585 privkey = privKeyBuffer.toString('hex');
586 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
587 var hexAddress = addressBuffer.toString('hex');
588 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
589 address = ethUtil.addHexPrefix(checksumAddress);
590 }
582 addAddressToList(indexText, address, pubkey, privkey); 591 addAddressToList(indexText, address, pubkey, privkey);
583 }, 50) 592 }, 50)
584 } 593 }
@@ -1148,6 +1157,13 @@
1148 DOM.bip44coin.val(6); 1157 DOM.bip44coin.val(6);
1149 }, 1158 },
1150 }, 1159 },
1160 {
1161 name: "Ethereum",
1162 onSelect: function() {
1163 network = bitcoin.networks.bitcoin;
1164 DOM.bip44coin.val(60);
1165 },
1166 },
1151 ] 1167 ]
1152 1168
1153 var clients = [ 1169 var clients = [
diff --git a/src/js/polyfill.es6.js b/src/js/polyfill.es6.js
new file mode 100644
index 0000000..be05249
--- /dev/null
+++ b/src/js/polyfill.es6.js
@@ -0,0 +1,3793 @@
1// From
2// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
3// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
4// but is not required in any modern browsers.
5// For more information, see
6// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7
8//----------------------------------------------------------------------
9//
10// ECMAScript 2015 Polyfills
11//
12//----------------------------------------------------------------------
13
14(function (global) {
15 "use strict";
16
17 // Set this to always override native implementations, for testing
18 // the polyfill in browsers with partial/full ES2015 support.
19 var OVERRIDE_NATIVE_FOR_TESTING = false;
20
21 var undefined = (void 0); // Paranoia
22
23 // Helpers
24
25 function strict(o) {
26 return o === global ? undefined : o;
27 }
28
29 function hook(o, p, f) {
30 var op = o[p];
31 console.assert(typeof op === 'function', 'Hooking a non-function');
32 o[p] = function() {
33 var o = strict(this);
34 var r = f.apply(o, arguments);
35 return r !== undefined ? r : op.apply(o, arguments);
36 };
37 }
38
39 function isSymbol(s) {
40 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
41 }
42
43 function getPropertyDescriptor(target, name) {
44 var desc = Object.getOwnPropertyDescriptor(target, name);
45 var proto = Object.getPrototypeOf(target);
46 while (!desc && proto) {
47 desc = Object.getOwnPropertyDescriptor(proto, name);
48 proto = Object.getPrototypeOf(proto);
49 }
50 return desc;
51 }
52
53 var enqueue = (function(nativePromise, nativeSetImmediate) {
54 if (nativePromise)
55 return function(job) { nativePromise.resolve().then(function() { job(); }); };
56 if (nativeSetImmediate)
57 return function(job) { nativeSetImmediate(job); };
58 return function(job) { setTimeout(job, 0); };
59 }(global['Promise'], global['setImmediate']));
60
61 function define(o, p, v, override) {
62 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
63 return;
64
65 if (typeof v === 'function') {
66 // Sanity check that functions are appropriately named (where possible)
67 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
68 Object.defineProperty(o, p, {
69 value: v,
70 configurable: true,
71 enumerable: false,
72 writable: true
73 });
74 } else {
75 Object.defineProperty(o, p, {
76 value: v,
77 configurable: false,
78 enumerable: false,
79 writable: false
80 });
81 }
82 }
83
84 function set_internal(o, p, v) {
85 Object.defineProperty(o, p, {
86 value: v,
87 configurable: false,
88 enumerable: false,
89 writable: true
90 });
91 }
92
93 // Snapshot intrinsic functions
94 var $isNaN = global.isNaN,
95 $parseInt = global.parseInt,
96 $parseFloat = global.parseFloat;
97
98 var E = Math.E,
99 LOG10E = Math.LOG10E,
100 LOG2E = Math.LOG2E,
101 abs = Math.abs,
102 ceil = Math.ceil,
103 exp = Math.exp,
104 floor = Math.floor,
105 log = Math.log,
106 max = Math.max,
107 min = Math.min,
108 pow = Math.pow,
109 random = Math.random,
110 sqrt = Math.sqrt;
111
112 var orig_match = String.prototype.match,
113 orig_replace = String.prototype.replace,
114 orig_search = String.prototype.search,
115 orig_split = String.prototype.split;
116
117 // These are used for implementing the polyfills, but not exported.
118
119 // Inspired by https://gist.github.com/1638059
120 /** @constructor */
121 function EphemeronTable() {
122 var secretKey = ObjectCreate(null);
123
124 function conceal(o) {
125 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
126 Object.defineProperty(o, 'valueOf', {
127 value: (function(secretKey) {
128 return function (k) {
129 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
130 };
131 }(secretKey)),
132 configurable: true,
133 writeable: true,
134 enumerable: false
135 });
136 return secrets;
137 }
138
139 function reveal(o) {
140 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
141 return v === o ? null : v;
142 }
143
144 return {
145 clear: function() {
146 secretKey = ObjectCreate(null);
147 },
148 remove: function(key) {
149 var secrets = reveal(key);
150 if (secrets && HasOwnProperty(secrets, 'value')) {
151 delete secrets.value;
152 return true;
153 }
154 return false;
155 },
156 get: function(key, defaultValue) {
157 var secrets = reveal(key);
158 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
159 },
160 has: function(key) {
161 var secrets = reveal(key);
162 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
163 },
164 set: function(key, value) {
165 var secrets = reveal(key) || conceal(key);
166 secrets.value = value;
167 }
168 };
169 }
170
171 var empty = Object.create(null);
172
173 //----------------------------------------------------------------------
174 //
175 // ECMAScript 2015
176 // http://www.ecma-international.org/ecma-262/6.0/
177 //
178 //----------------------------------------------------------------------
179
180 // ---------------------------------------
181 // 19.4 Symbol Objects
182 // ---------------------------------------
183
184 // NOTE: Symbols are defined here - out of spec order - since we need the
185 // properties and prototype to be populated for other polyfills.
186
187 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
188
189 var symbolForKey;
190 (function() {
191 var secret = Object.create(null);
192 var symbolMap = {};
193 symbolForKey = function(k) {
194 return symbolMap[k];
195 };
196
197 var GlobalSymbolRegistry = [];
198
199 function unique(bits) {
200 return Array(bits + 1).join('x').replace(/x/g, function() {
201 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
202 });
203 }
204
205 // 19.4.1 The Symbol Constructor
206 // 19.4.1.1 Symbol ( description=undefined )
207 function Symbol(description) {
208 if (!(this instanceof Symbol)) return new Symbol(description, secret);
209 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
210
211 var descString = description === undefined ? undefined : String(description);
212
213 set_internal(this, '[[SymbolData]]', unique(128));
214 set_internal(this, '[[Description]]', descString);
215
216 symbolMap[this] = this;
217 return this;
218 }
219
220 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
221 global.Symbol = Symbol;
222
223 // 19.4.2 Properties of the Symbol Constructor
224
225 // 19.4.2.1 Symbol.for (key)
226 define(Symbol, 'for', function for_(key) {
227 var stringKey = String(key);
228 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
229 var e = GlobalSymbolRegistry[i];
230 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
231 }
232 var newSymbol = Symbol(key);
233 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
234 return newSymbol;
235 });
236
237 // 19.4.2.2 Symbol.hasInstance
238 // 19.4.2.3 Symbol.isConcatSpreadable
239
240 // 19.4.2.4 Symbol.iterator
241 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
242
243 // 19.4.2.5 Symbol.keyFor (sym)
244 define(Symbol, 'keyFor', function keyFor(sym) {
245 if (!(sym instanceof Symbol)) throw TypeError();
246 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
247 var e = GlobalSymbolRegistry[i];
248 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
249 }
250 return undefined;
251 });
252
253 // 19.4.2.6 Symbol.match
254 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
255
256 // 19.4.2.7 Symbol.prototype
257
258 // 19.4.2.8 Symbol.replace
259 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
260
261 // 19.4.2.9 Symbol.search
262 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
263
264 // 19.4.2.10 Symbol.species
265
266 // 19.4.2.11 Symbol.search
267 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
268
269 // 19.4.2.12 Symbol.toPrimitive
270
271 // 19.4.2.13 Symbol.toStringTag
272 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
273
274 // 19.4.2.14 Symbol.unscopables
275
276 // 19.4.3 Properties of the Symbol Prototype Object
277 // 19.4.3.1 Symbol.prototype.constructor
278
279 // 19.4.3.2 Symbol.prototype.toString ( )
280 Object.defineProperty(Symbol.prototype, 'toString', {
281 value: function toString() {
282 var s = strict(this);
283 var desc = s['[[Description]]'];
284 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
285 },
286 configurable: true, writeable: true, enumerable: false });
287
288 // 19.4.3.3 Symbol.prototype.valueOf ( )
289 Object.defineProperty(Symbol.prototype, 'valueOf', {
290 value: function valueOf() {
291 // To prevent automatic string conversion:
292 throw TypeError();
293
294 // Spec has approximately the following:
295 //var s = strict(this);
296 //if (Type(s) === 'symbol') return s;
297 //if (Type(s) !== 'object') throw TypeError();
298 //if (!('[[SymbolData]]' in s)) throw TypeError();
299 //return s['[[SymbolData]]'];
300 },
301 configurable: true, writeable: true, enumerable: false });
302
303 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
304 // (Done later to polyfill partial implementations)
305
306 // 19.4.4 Properties of Symbol Instances
307 }());
308
309 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
310
311 // Defined here so that other prototypes can reference it
312 // 25.1.2 The %IteratorPrototype% Object
313 var $IteratorPrototype$ = {};
314
315 //----------------------------------------
316 // 6 ECMAScript Data Types and Values
317 //----------------------------------------
318
319 // 6.1 ECMAScript Language Types
320
321 // "Type(x)" is used as shorthand for "the type of x"...
322 function Type(v) {
323 switch (typeof v) {
324 case 'undefined': return 'undefined';
325 case 'boolean': return 'boolean';
326 case 'number': return 'number';
327 case 'string': return 'string';
328 case 'symbol': return 'symbol';
329 default:
330 if (v === null) return 'null';
331 if (v instanceof global.Symbol) return 'symbol';
332 return 'object';
333 }
334 }
335
336 // 6.1.5.1 Well-Known Symbols
337 var $$iterator = global.Symbol.iterator,
338 $$match = global.Symbol.match,
339 $$replace = global.Symbol.replace,
340 $$search = global.Symbol.search,
341 $$split = global.Symbol.split,
342 $$toStringTag = global.Symbol.toStringTag;
343
344 //----------------------------------------
345 // 7 Abstract Operations
346 //----------------------------------------
347
348 //----------------------------------------
349 // 7.1 Type Conversion
350 //----------------------------------------
351
352 // 7.1.1 ToPrimitive ( input [, PreferredType] )
353 // just use valueOf()
354
355 // 7.1.2 ToBoolean ( argument )
356 // just use Boolean()
357
358 // 7.1.3 ToNumber ( argument )
359 // just use Number()
360
361 // 7.1.4 ToInteger ( argument )
362 function ToInteger(n) {
363 n = Number(n);
364 if ($isNaN(n)) return 0;
365 if (n === 0 || n === Infinity || n === -Infinity) return n;
366 return ((n < 0) ? -1 : 1) * floor(abs(n));
367 }
368
369 // 7.1.5 ToInt32 ( argument )
370 function ToInt32(v) { return v >> 0; }
371
372 // 7.1.6 ToUint32 ( argument )
373 function ToUint32(v) { return v >>> 0; }
374
375 // 7.1.7 ToInt16 ( argument )
376 function ToInt16(v) { return (v << 16) >> 16; }
377
378 // 7.1.8 ToUint16 ( argument )
379 function ToUint16(v) { return v & 0xFFFF; }
380
381 // 7.1.9 ToInt8 ( argument )
382 function ToInt8(v) { return (v << 24) >> 24; }
383
384 // 7.1.10 ToUint8 ( argument )
385 function ToUint8(v) { return v & 0xFF; }
386
387 // 7.1.11 ToUint8Clamp ( argument )
388 function ToUint8Clamp(argument) {
389 var number = Number(argument);
390 if ($isNaN(number)) return 0;
391 if (number <= 0) return 0;
392 if (number >= 255) return 255;
393 var f = floor(number);
394 if ((f + 0.5) < number) return f + 1;
395 if (number < (f + 0.5)) return f;
396 if (f % 2) return f + 1;
397 return f;
398 }
399
400 // 7.1.12 ToString ( argument )
401 // just use String()
402
403 // 7.1.13 ToObject ( argument )
404 function ToObject(v) {
405 if (v === null || v === undefined) throw TypeError();
406 return Object(v);
407 }
408
409 // 7.1.14 ToPropertyKey ( argument )
410 function ToPropertyKey(v) {
411 return String(v);
412 }
413
414 // 7.1.15 ToLength ( argument )
415 function ToLength(v) {
416 var len = ToInteger(v);
417 if (len <= 0) return 0;
418 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
419 return min(len, 0x20000000000000 - 1); // 2^53-1
420 }
421
422 // 7.1.16 CanonicalNumericIndexString ( argument )
423
424 //----------------------------------------
425 // 7.2 Testing and Comparison Operations
426 //----------------------------------------
427
428 // 7.2.1 RequireObjectCoercible ( argument )
429 // 7.2.2 IsArray ( argument )
430
431 // 7.2.3 IsCallable ( argument )
432 function IsCallable(o) { return typeof o === 'function'; }
433
434 // 7.2.4 IsConstructor ( argument )
435 function IsConstructor(o) {
436 // Hacks for Safari 7 TypedArray XXXConstructor objects
437 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
438 if (/Function/.test(Object.prototype.toString.call(o))) return true;
439 // TODO: Can this be improved on?
440 return typeof o === 'function';
441 }
442
443 // 7.2.5 IsExtensible (O)
444 // 7.2.6 IsInteger ( argument )
445
446 // 7.2.7 IsPropertyKey ( argument )
447 function IsPropertyKey(argument) {
448 if (Type(argument) === 'string') return true;
449 if (Type(argument) === 'symbol') return true;
450 return false;
451 }
452
453 // 7.2.8 IsRegExp ( argument )
454 // 7.2.5 IsConstructor ( argument )
455
456 // 7.2.9 SameValue(x, y)
457 function SameValue(x, y) {
458 if (typeof x !== typeof y) return false;
459 switch (typeof x) {
460 case 'undefined':
461 return true;
462 case 'number':
463 if (x !== x && y !== y) return true;
464 if (x === 0 && y === 0) return 1/x === 1/y;
465 return x === y;
466 case 'boolean':
467 case 'string':
468 case 'object':
469 default:
470 return x === y;
471 }
472 }
473
474 // 7.2.10 SameValueZero(x, y)
475 function SameValueZero(x, y) {
476 if (typeof x !== typeof y) return false;
477 switch (typeof x) {
478 case 'undefined':
479 return true;
480 case 'number':
481 if (x !== x && y !== y) return true;
482 return x === y;
483 case 'boolean':
484 case 'string':
485 case 'object':
486 default:
487 return x === y;
488 }
489 }
490
491 //----------------------------------------
492 // 7.3 Operations on Objects
493 //----------------------------------------
494
495 // 7.3.1 Get (O, P)
496 // - just use o.p or o[p]
497
498 // 7.3.2 GetV (V, P)
499 function GetV(v, p) {
500 var o = ToObject(v);
501 return o[p];
502 }
503
504 // 7.3.3 Set (O, P, V, Throw)
505 // - just use o.p = v or o[p] = v
506
507
508
509
510 // 7.3.9 GetMethod (O, P)
511 function GetMethod(o, p) {
512 var func = GetV(o, p);
513 if (func === undefined || func === null) return undefined;
514 if (!IsCallable(func)) throw TypeError();
515 return func;
516 }
517
518 // 7.3.10 HasProperty (O, P)
519 function HasProperty(o, p) {
520 while (o) {
521 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
522 if (Type(o) !== 'object') return false;
523 o = Object.getPrototypeOf(o);
524 }
525 return false;
526 }
527
528 // 7.3.11 HasOwnProperty (O, P)
529 function HasOwnProperty(o, p) {
530 return Object.prototype.hasOwnProperty.call(o, p);
531 }
532
533 //----------------------------------------
534 // 7.4 Operations on Iterator Objects
535 //----------------------------------------
536
537 // 7.4.1 GetIterator ( obj, method )
538 function GetIterator(obj, method) {
539 if (arguments.length < 2)
540 method = GetMethod(obj, $$iterator);
541 var iterator = method.call(obj);
542 if (Type(iterator) !== 'object') throw TypeError();
543 return iterator;
544 }
545
546 // 7.4.2 IteratorNext ( iterator, value )
547 function IteratorNext(iterator, value) {
548 if (arguments.length < 2)
549 var result = iterator.next();
550 else
551 result = iterator.next(value);
552 if (Type(result) !== 'object') throw TypeError();
553 return result;
554 }
555
556 // 7.4.3 IteratorComplete ( iterResult )
557 function IteratorComplete(iterResult) {
558 console.assert(Type(iterResult) === 'object');
559 return Boolean(iterResult.done);
560 }
561
562 // 7.4.4 IteratorValue ( iterResult )
563 function IteratorValue(iterResult) {
564 console.assert(Type(iterResult) === 'object');
565 return iterResult.value;
566 }
567
568 // 7.4.5 IteratorStep ( iterator )
569 function IteratorStep( iterator, value ) {
570 var result = IteratorNext(iterator, value);
571 var done = result['done'];
572 if (Boolean(done) === true) return false;
573 return result;
574 }
575
576 // 7.4.6 IteratorClose( iterator, completion )
577 function IteratorClose( iterator, completion ) {
578 console.assert(Type(iterator) === 'object');
579 var _return = GetMethod(iterator, 'return');
580 if (_return === undefined) return completion;
581 try {
582 var innerResult = _return[iterator]();
583 } catch (result) {
584 // TODO: If completion.[[type]] is throw, return completion
585 return result;
586 }
587 if (Type(innerResult) !== 'object') throw TypeError();
588 return completion;
589 }
590
591 // 7.4.7 CreateIterResultObject (value, done)
592 function CreateIterResultObject(value, done) {
593 console.assert(Type(done) === 'boolean');
594 var obj = {};
595 obj["value"] = value;
596 obj["done"] = done;
597 return obj;
598 }
599
600 // 7.4.8 CreateListIterator (list)
601 // 7.4.8.1 ListIterator next( )
602 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
603 // 7.4.9.1 CompoundIterator next( )
604
605 //----------------------------------------
606 // 8 Executable Code and Execution Contexts
607 //----------------------------------------
608
609 //----------------------------------------
610 // 8.4 Jobs and Job Queues
611 //----------------------------------------
612
613 // 8.4.1 EnqueueJob ( queueName, job, arguments)
614 function EnqueueJob(queueName, job, args) {
615 var fn = function() { job.apply(undefined, args); };
616 enqueue(fn);
617 }
618
619 // 8.4.2 NextJob result
620 function NextJob(result) {
621 // no-op
622 }
623
624 //----------------------------------------
625 // 9 Ordinary and Exotic Objects Behaviors
626 //----------------------------------------
627
628 // 9.1.11 [[Enumerate]] ()
629 function Enumerate(obj) {
630 var e = [];
631 if (Object(obj) !== obj) return e;
632 var visited = new Set;
633 while (obj !== null) {
634 Object.getOwnPropertyNames(obj).forEach(function(name) {
635 if (!visited.has(name)) {
636 var desc = Object.getOwnPropertyDescriptor(obj, name);
637 if (desc) {
638 visited.add(name);
639 if (desc.enumerable) e.push(name);
640 }
641 }
642 });
643 obj = Object.getPrototypeOf(obj);
644 }
645 return e[$$iterator]();
646 }
647
648 // 9.1.12 [[OwnPropertyKeys]] ( )
649 function OwnPropertyKeys(o) {
650 return Object.getOwnPropertyNames(o);
651 }
652
653 // 9.1.13 ObjectCreate(proto, internalSlotsList)
654 function ObjectCreate(proto, internalSlotsList) {
655 return Object.create(proto, internalSlotsList);
656 }
657
658 // ---------------------------------------
659 // 19 Fundamental Objects
660 // ---------------------------------------
661
662 // ---------------------------------------
663 // 19.1 Object Objects
664 // ---------------------------------------
665
666 // 19.1.1 The Object Constructor
667 // 19.1.1.1 Object ( [ value ] )
668 // 19.1.2 Properties of the Object Constructor
669 // 19.1.2.1 Object.assign ( target, ...sources )
670 define(
671 Object, 'assign',
672 function assign(target, /*...*/sources) {
673 var to = ToObject(target);
674 if (arguments.length < 2) return to;
675
676 var sourcesIndex = 1;
677 while (sourcesIndex < arguments.length) {
678 var nextSource = arguments[sourcesIndex++];
679 if (nextSource === undefined || nextSource === null) {
680 var keys = [];
681 } else {
682 var from = ToObject(nextSource);
683 keys = OwnPropertyKeys(from);
684 }
685 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
686 var nextKey = keys[keysIndex];
687 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
688 if (desc !== undefined && desc.enumerable) {
689 var propValue = from[nextKey];
690 to[nextKey] = propValue;
691 }
692 }
693 }
694 return to;
695 });
696
697 // 19.1.2.2 Object.create ( O [ , Properties ] )
698 // 19.1.2.3 Object.defineProperties ( O, Properties )
699 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
700 // 19.1.2.5 Object.freeze ( O )
701 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
702
703 (function() {
704 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
705 $getOwnPropertyNames = Object.getOwnPropertyNames,
706 $keys = Object.keys,
707 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
708
709 function isStringKey(k) { return !symbolForKey(k); }
710
711 // 19.1.2.7 Object.getOwnPropertyNames ( O )
712 define(
713 Object, 'getOwnPropertyNames',
714 function getOwnPropertyNames(o) {
715 if (Object.prototype.toString.call(o) === '[object Window]') {
716 // Workaround for cross-realm calling by IE itself.
717 // https://github.com/inexorabletash/polyfill/issues/96
718 try {
719 return $getOwnPropertyNames(o).filter(isStringKey);
720 } catch (_) {
721 return $window_names.slice();
722 }
723 }
724 return $getOwnPropertyNames(o).filter(isStringKey);
725 }, !nativeSymbols);
726
727 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
728 define(
729 Object, 'getOwnPropertySymbols',
730 function getOwnPropertySymbols(o) {
731 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
732 }, !nativeSymbols);
733
734 // 19.1.2.14 Object.keys ( O )
735 define(
736 Object, 'keys',
737 function keys(o) {
738 return $keys(o).filter(isStringKey);
739 }, !nativeSymbols);
740 }());
741
742 // 19.1.2.9 Object.getPrototypeOf ( O )
743 // 19.1.2.10 Object.is ( value1, value2 )
744 define(
745 Object, 'is',
746 function is(value1, value2) {
747 return SameValue(value1, value2);
748 });
749
750 // 19.1.2.11 Object.isExtensible ( O )
751 // 19.1.2.12 Object.isFrozen ( O )
752 // 19.1.2.13 Object.isSealed ( O )
753
754 // 19.1.2.14 Object.keys ( O )
755 // see above
756
757 // 19.1.2.15 Object.preventExtensions ( O )
758 // 19.1.2.16 Object.prototype
759 // 19.1.2.17 Object.seal ( O )
760
761 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
762 define(
763 Object, 'setPrototypeOf',
764 function setPrototypeOf(o, proto) {
765 if (Type(o) !== 'object') throw TypeError();
766 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
767 o.__proto__ = proto;
768 return o;
769 }
770 );
771
772 // 19.1.3 Properties of the Object Prototype Object
773 // 19.1.3.1 Object.prototype.constructor
774 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
775 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
776 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
777 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
778 // 19.1.3.6 Object.prototype.toString ( )
779 hook(Object.prototype, 'toString',
780 function() {
781 var o = strict(this);
782 if (o === Object(o) && $$toStringTag in o) {
783 return '[object ' + o[$$toStringTag] + ']';
784 }
785 return undefined;
786 });
787
788 // 19.1.3.7 Object.prototype.valueOf ( )
789 // 19.1.4 Properties of Object Instances
790
791 // ---------------------------------------
792 // 19.2 Function Objects
793 // ---------------------------------------
794
795 // 19.2.1 The Function Constructor
796 // 19.2.1.1 Function ( p1, p2, … , pn, body )
797 // 19.2.2 Properties of the Function Constructor
798 // 19.2.2.1 Function.length
799 // 19.2.2.2 Function.prototype
800 // 19.2.3 Properties of the Function Prototype Object
801 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
802 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
803 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
804 // 19.2.3.4 Function.prototype.constructor
805 // 19.2.3.5 Function.prototype.toString ( )
806 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
807 // 19.2.4 Function Instances
808 // 19.2.4.1 length
809 // 19.2.4.2 name
810 // 19.2.4.3 prototype
811
812 // (No polyfillable changes from ES5)
813
814 // ---------------------------------------
815 // 19.3 Boolean Objects
816 // ---------------------------------------
817
818 // 19.3.1 The Boolean Constructor
819 // 19.3.1.1 Boolean ( value )
820 // 19.3.2 Properties of the Boolean Constructor
821 // 19.3.2.1 Boolean.prototype
822 // 19.3.3 Properties of the Boolean Prototype Object
823 // 19.3.3.1 Boolean.prototype.constructor
824 // 19.3.3.2 Boolean.prototype.toString ( )
825 // 19.3.3.3 Boolean.prototype.valueOf ( )
826 // 19.3.4 Properties of Boolean Instances
827
828 // (No polyfillable changes from ES5)
829
830 // ---------------------------------------
831 // 19.4 Symbol Objects
832 // ---------------------------------------
833
834 // Moved earlier in this script, so that other polyfills can depend on them.
835
836 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
837 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
838
839 // ---------------------------------------
840 // 19.5 Error Objects
841 // ---------------------------------------
842
843 // 19.5.1 The Error Constructor
844 // 19.5.1.1 Error ( message )
845 // 19.5.1.2 new Error( ...argumentsList )
846 // 19.5.2 Properties of the Error Constructor
847 // 19.5.2.1 Error.prototype
848 // 19.5.3 Properties of the Error Prototype Object
849 // 19.5.3.1 Error.prototype.constructor
850 // 19.5.3.2 Error.prototype.message
851 // 19.5.3.3 Error.prototype.name
852 // 19.5.3.4 Error.prototype.toString ( )
853 // 19.5.4 Properties of Error Instances
854 // 19.5.5 Native Error Types Used in This Standard
855 // 19.5.5.1 EvalError
856 // 19.5.5.2 RangeError
857 // 19.5.5.3 ReferenceError
858 // 19.5.5.4 SyntaxError
859 // 19.5.5.5 TypeError
860 // 19.5.5.6 URIError
861 // 19.5.6 NativeError Object Structure
862 // 19.5.6.1 NativeError Constructors
863 // 19.5.6.1.1 NativeError ( message )
864 // 19.5.6.1.2 new NativeError ( ...argumentsList )
865 // 19.5.6.2 Properties of the NativeError Constructors
866 // 19.5.6.2.1 NativeError.prototype
867 // 19.5.6.3 Properties of the NativeError Prototype Objects
868 // 19.5.6.4 Properties of NativeError Instances
869
870 // (No polyfillable changes from ES5)
871
872 // ---------------------------------------
873 // 20 Numbers and Dates
874 // ---------------------------------------
875
876 // ---------------------------------------
877 // 20.1 Number Objects
878 // ---------------------------------------
879
880 // 20.1.1 The Number Constructor
881 // 20.1.1.1 Number ( [ value ] )
882 // 20.1.1.2 new Number ( ...argumentsList )
883 // 20.1.2 Properties of the Number Constructor
884
885 // 20.1.2.1 Number.EPSILON
886 define(
887 Number, 'EPSILON',
888 (function () {
889 var next, result;
890 for (next = 1; 1 + next !== 1; next = next / 2)
891 result = next;
892 return result;
893 }()));
894
895 // 20.1.2.2 Number.isFinite ( number )
896 define(
897 Number, 'isFinite',
898 function isFinite(number) {
899 if (Type(number) !== 'number') return false;
900 if (number !== number || number === +Infinity || number === -Infinity) return false;
901 return true;
902 });
903
904 // 20.1.2.3 Number.isInteger ( number )
905 define(
906 Number, 'isInteger',
907 function isInteger(number) {
908 if (Type(number) !== 'number') return false;
909 if (number !== number || number === +Infinity || number === -Infinity) return false;
910 var integer = ToInteger(number);
911 if (integer !== number) return false;
912 return true;
913 });
914
915 // 20.1.2.4 Number.isNaN ( number )
916 define(
917 Number, 'isNaN',
918 function isNaN(number) {
919 if (Type(number) !== 'number') return false;
920 if (number !== number) return true;
921 return false;
922 });
923
924 // 20.1.2.5 Number.isSafeInteger ( number )
925 define(
926 Number, 'isSafeInteger',
927 function isSafeInteger(number) {
928 if (Type(number) !== 'number') return false;
929 if (number !== number || number === +Infinity || number === -Infinity) return false;
930 var integer = ToInteger(number);
931 if (integer !== number) return false;
932 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
933 return true;
934 return false;
935 });
936
937 // 20.1.2.6 Number.MAX_SAFE_INTEGER
938 define(
939 Number, 'MAX_SAFE_INTEGER',
940 9007199254740991); // 2^53-1
941
942 // 20.1.2.7 Number.MAX_VALUE
943
944 // 20.1.2.8 Number.MIN_SAFE_INTEGER
945 define(
946 Number, 'MIN_SAFE_INTEGER',
947 -9007199254740991); // -2^53+1
948
949 // 20.1.2.9 Number.MIN_VALUE
950 // 20.1.2.10 Number.NaN
951 // 20.1.2.11 Number.NEGATIVE_INFINITY
952
953 // 20.1.2.12 Number.parseFloat ( string )
954 define(Number, 'parseFloat', $parseFloat);
955
956 // 20.1.2.13 Number.parseInt ( string, radix )
957 define(Number, 'parseInt', $parseInt);
958
959 // 20.1.2.14 Number.POSITIVE_INFINITY
960 // 20.1.2.15 Number.prototype
961
962 // 20.1.3 Properties of the Number Prototype Object
963 // 20.1.3.1 Number.prototype.constructor
964 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
965 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
966 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
967 // 20.1.3.5 Number.prototype.toPrecision ( precision )
968 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
969 // 20.1.3.7 Number.prototype.valueOf ( )
970 // 20.1.4 Properties of Number Instances
971
972 // ---------------------------------------
973 // 20.2 The Math Object
974 // ---------------------------------------
975
976 // 20.2.1 Value Properties of the Math Object
977 // 20.2.1.1 Math.E
978 // 20.2.1.2 Math.LN10
979 // 20.2.1.3 Math.LN2
980 // 20.2.1.4 Math.LOG10E
981 // 20.2.1.5 Math.LOG2E
982 // 20.2.1.6 Math.PI
983 // 20.2.1.7 Math.SQRT1_2
984 // 20.2.1.8 Math.SQRT2
985
986 // 20.2.1.9 Math [ @@toStringTag ]
987 define(Math, $$toStringTag, 'Math');
988
989 // 20.2.2 Function Properties of the Math Object
990 // 20.2.2.1 Math.abs ( x )
991 // 20.2.2.2 Math.acos ( x )
992
993 // 20.2.2.3 Math.acosh(x)
994 define(
995 Math, 'acosh',
996 function acosh(x) {
997 x = Number(x);
998 return log(x + sqrt(x * x - 1));
999 });
1000
1001 // 20.2.2.4 Math.asin ( x )
1002
1003 // 20.2.2.5 Math.asinh( x )
1004 define(
1005 Math, 'asinh',
1006 function asinh(x) {
1007 x = Number(x);
1008 if (SameValue(x, -0)) {
1009 return x;
1010 }
1011 var s = sqrt(x * x + 1);
1012 return (s === -x) ? log(0) : log(x + s);
1013 });
1014
1015 // 20.2.2.6 Math.atan ( x )
1016
1017 // 20.2.2.7 Math.atanh( x )
1018 define(
1019 Math, 'atanh',
1020 function atanh(x) {
1021 x = Number(x);
1022 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1023 });
1024
1025 // 20.2.2.8 Math.atan2 ( y, x )
1026
1027 // 20.2.2.9 Math.cbrt ( x )
1028 define(
1029 Math, 'cbrt',
1030 function cbrt(x) {
1031 x = Number(x);
1032 if ($isNaN(x/x)) {
1033 return x;
1034 }
1035 var r = pow(abs(x), 1/3);
1036 var t = x/r/r;
1037 return r + (r * (t-r) / (2*r + t));
1038 });
1039
1040 // 20.2.2.10 Math.ceil ( x )
1041
1042 // 20.2.2.11 Math.clz32 ( x )
1043 define(
1044 Math, 'clz32',
1045 function clz32(x) {
1046 function clz8(x) {
1047 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1048 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1049 }
1050 x = ToUint32(x);
1051 return x & 0xff000000 ? clz8(x >> 24) :
1052 x & 0xff0000 ? clz8(x >> 16) + 8 :
1053 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1054 });
1055
1056
1057
1058 // 20.2.2.12 Math.cos ( x )
1059
1060 // 20.2.2.13 Math.cosh ( x )
1061 define(
1062 Math, 'cosh',
1063 function cosh(x) {
1064 x = Number(x);
1065 return (pow(E, x) + pow(E, -x)) / 2;
1066 });
1067
1068 // 20.2.2.14 Math.exp ( x )
1069
1070 // 20.2.2.15 Math.expm1 ( x )
1071 define(
1072 Math, 'expm1',
1073 function expm1(x) {
1074 x = Number(x);
1075 // from: http://www.johndcook.com/cpp_log1p.html
1076 if (SameValue(x, -0)) {
1077 return -0;
1078 } else if (abs(x) < 1e-5) {
1079 return x + 0.5 * x * x; // two terms of Taylor expansion
1080 } else {
1081 return exp(x) - 1;
1082 }
1083 });
1084
1085 // 20.2.2.16 Math.floor ( x )
1086
1087 // 20.2.2.17 Math.fround ( x )
1088 define(
1089 Math, 'fround',
1090 function fround(x) {
1091 if ($isNaN(x)) {
1092 return NaN;
1093 }
1094 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1095 return x;
1096 }
1097 return (new Float32Array([x]))[0];
1098 });
1099
1100 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1101 define(
1102 Math, 'hypot',
1103 function hypot() {
1104 var values = [];
1105 var m = 0, sawNaN = false;
1106 for (var i = 0; i < arguments.length; ++i) {
1107 var n = abs(Number(arguments[i]));
1108 if (n === Infinity) return n;
1109 if (n !== n) sawNaN = true;
1110 if (n > m) m = n;
1111 values[i] = n;
1112 }
1113 if (sawNaN) return NaN;
1114 if (m === 0) return +0;
1115 var sum = +0;
1116 for (i = 0; i < values.length; ++i) {
1117 var r = values[i] / m;
1118 sum = sum + r * r;
1119 }
1120 return m * sqrt(sum);
1121 });
1122
1123 // 20.2.2.19 Math.imul ( x, y )
1124 define(
1125 Math, 'imul',
1126 function imul(x, y) {
1127 var a = ToUint32(x);
1128 var b = ToUint32(y);
1129 // (slow but accurate)
1130 var ah = (a >>> 16) & 0xffff;
1131 var al = a & 0xffff;
1132 var bh = (b >>> 16) & 0xffff;
1133 var bl = b & 0xffff;
1134 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1135 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1136 );
1137
1138 // 20.2.2.20 Math.log ( x )
1139
1140 // 20.2.2.21 Math.log1p ( x )
1141 define(
1142 Math, 'log1p',
1143 function log1p(x) {
1144 x = Number(x);
1145 // from: http://www.johndcook.com/cpp_expm1.html
1146 if (x < -1) {
1147 return NaN;
1148 } else if (SameValue(x, -0)) {
1149 return -0;
1150 } else if (abs(x) > 1e-4) {
1151 return log(1 + x);
1152 } else {
1153 return (-0.5 * x + 1) * x;
1154 }
1155 });
1156
1157 // 20.2.2.22 Math.log10 ( x )
1158 define(
1159 Math, 'log10',
1160 function log10(x) {
1161 x = Number(x);
1162 return log(x) * LOG10E;
1163 });
1164
1165 // 20.2.2.23 Math.log2 ( x )
1166 define(
1167 Math, 'log2',
1168 function log2(x) {
1169 x = Number(x);
1170 return log(x) * LOG2E;
1171 });
1172
1173 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1174 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1175 // 20.2.2.26 Math.pow ( x, y )
1176 // 20.2.2.27 Math.random ( )
1177 // 20.2.2.28 Math.round ( x )
1178
1179 // 20.2.2.29 Math.sign(x)
1180 define(
1181 Math, 'sign',
1182 function sign(x) {
1183 x = Number(x);
1184 return x < 0 ? -1 : x > 0 ? 1 : x;
1185 });
1186
1187 // 20.2.2.30 Math.sin ( x )
1188
1189 // 20.2.2.31 Math.sinh( x )
1190 define(
1191 Math, 'sinh',
1192 function sinh(x) {
1193 x = Number(x);
1194 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1195 });
1196
1197 // 20.2.2.32 Math.sqrt ( x )
1198 // 20.2.2.33 Math.tan ( x )
1199
1200 // 20.2.2.34 Math.tanh ( x )
1201 define(
1202 Math, 'tanh',
1203 function tanh(x) {
1204 x = Number(x);
1205 var n = pow(E, 2 * x) - 1,
1206 d = pow(E, 2 * x) + 1;
1207 if (SameValue(x, -0))
1208 return x;
1209 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1210 });
1211
1212 // 20.2.2.35 Math.trunc ( x )
1213 define(
1214 Math, 'trunc',
1215 function trunc(x) {
1216 x = Number(x);
1217 return $isNaN(x) ? NaN :
1218 x < 0 ? ceil(x) : floor(x);
1219 });
1220
1221 // ---------------------------------------
1222 // 20.3 Date Objects
1223 // ---------------------------------------
1224
1225 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1226 // 20.3.1.1 Time Values and Time Range
1227 // 20.3.1.2 Day Number and Time within Day
1228 // 20.3.1.3 Year Number
1229 // 20.3.1.4 Month Number
1230 // 20.3.1.5 Date Number
1231 // 20.3.1.6 Week Day
1232 // 20.3.1.7 Local Time Zone Adjustment
1233 // 20.3.1.8 Daylight Saving Time Adjustment
1234 // 20.3.1.9 Local Time
1235 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1236 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1237 // 20.3.1.12 MakeDay (year, month, date)
1238 // 20.3.1.13 MakeDate (day, time)
1239 // 20.3.1.14 TimeClip (time)
1240 // 20.3.1.15 Date Time String Format
1241 // 20.3.1.15.1 Extended years
1242 // 20.3.2 The Date Constructor
1243 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1244 // 20.3.2.2 Date ( value )
1245 // 20.3.2.3 Date ( )
1246 // 20.3.3 Properties of the Date Constructor
1247 // 20.3.3.1 Date.now ( )
1248 // 20.3.3.2 Date.parse (string)
1249 // 20.3.3.3 Date.prototype
1250 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1251 // 20.3.4 Properties of the Date Prototype Object
1252 // 20.3.4.1 Date.prototype.constructor
1253 // 20.3.4.2 Date.prototype.getDate ( )
1254 // 20.3.4.3 Date.prototype.getDay ( )
1255 // 20.3.4.4 Date.prototype.getFullYear ( )
1256 // 20.3.4.5 Date.prototype.getHours ( )
1257 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1258 // 20.3.4.7 Date.prototype.getMinutes ( )
1259 // 20.3.4.8 Date.prototype.getMonth ( )
1260 // 20.3.4.9 Date.prototype.getSeconds ( )
1261 // 20.3.4.10 Date.prototype.getTime ( )
1262 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1263 // 20.3.4.12 Date.prototype.getUTCDate ( )
1264 // 20.3.4.13 Date.prototype.getUTCDay ( )
1265 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1266 // 20.3.4.15 Date.prototype.getUTCHours ( )
1267 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1268 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1269 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1270 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1271 // 20.3.4.20 Date.prototype.setDate ( date )
1272 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1273 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1274 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1275 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1276 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1277 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1278 // 20.3.4.27 Date.prototype.setTime ( time )
1279 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1280 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1281 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1282 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1283 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1284 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1285 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1286 // 20.3.4.35 Date.prototype.toDateString ( )
1287 // 20.3.4.36 Date.prototype.toISOString ( )
1288 // 20.3.4.37 Date.prototype.toJSON ( key )
1289 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1290 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1291 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1292 // 20.3.4.41 Date.prototype.toString ( )
1293 // 20.3.4.42 Date.prototype.toTimeString ( )
1294 // 20.3.4.43 Date.prototype.toUTCString ( )
1295 // 20.3.4.44 Date.prototype.valueOf ( )
1296 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1297 // 20.3.5 Properties of Date Instances
1298
1299 // (No polyfillable changes from ES5)
1300
1301 // ---------------------------------------
1302 // 21 Text Processing
1303 // ---------------------------------------
1304
1305 var string_regexp_dispatch = (function() {
1306 var faux = {}, secret = Symbol();
1307 faux[Symbol.match] = function() { return secret; };
1308 return ("").match(faux) === secret;
1309 }());
1310
1311 // 21.1 String Objects
1312 // 21.1.1 The String Constructor
1313 // 21.1.1.1 String ( value )
1314 // 21.1.2 Properties of the String Constructor
1315 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1316
1317 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1318 define(
1319 String, 'fromCodePoint',
1320 function fromCodePoint(/*...codePoints*/) {
1321 var codePoints = arguments,
1322 length = codePoints.length,
1323 elements = [],
1324 nextIndex = 0;
1325 while (nextIndex < length) {
1326 var next = codePoints[nextIndex];
1327 var nextCP = Number(next);
1328 if (!SameValue(nextCP, ToInteger(nextCP)) ||
1329 nextCP < 0 || nextCP > 0x10FFFF) {
1330 throw RangeError('Invalid code point ' + nextCP);
1331 }
1332 if (nextCP < 0x10000) {
1333 elements.push(String.fromCharCode(nextCP));
1334 } else {
1335 nextCP -= 0x10000;
1336 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
1337 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
1338 }
1339 nextIndex += 1;
1340 }
1341 return elements.join('');
1342 });
1343
1344 // 21.1.2.3 String.prototype
1345
1346 // 21.1.2.4 String.raw ( template , ...substitutions )
1347 define(
1348 String, 'raw',
1349 function raw(template /*, ...substitutions*/) {
1350 var substitutions = [].slice.call(arguments, 1);
1351
1352 var cooked = Object(template);
1353 var rawValue = cooked['raw'];
1354 var raw = Object(rawValue);
1355 var len = raw['length'];
1356 var literalSegments = ToLength(len);
1357 if (literalSegments <= 0) return '';
1358 var stringElements = [];
1359 var nextIndex = 0;
1360 while (true) {
1361 var next = raw[nextIndex];
1362 var nextSeg = String(next);
1363 stringElements.push(nextSeg);
1364 if (nextIndex + 1 === literalSegments)
1365 return stringElements.join('');
1366 next = substitutions[nextIndex];
1367 var nextSub = String(next);
1368 stringElements.push(nextSub);
1369 nextIndex = nextIndex + 1;
1370 }
1371 });
1372
1373 // See https://githib.com/inexorabletash/uate for a more useful version.
1374
1375 // 21.1.3 Properties of the String Prototype Object
1376 // 21.1.3.1 String.prototype.charAt ( pos )
1377 // 21.1.3.2 String.prototype.charCodeAt ( pos )
1378
1379 // 21.1.3.3 String.prototype.codePointAt ( pos )
1380 define(
1381 String.prototype, 'codePointAt',
1382 function codePointAt(pos) {
1383 var o = strict(this);
1384 var s = String(o);
1385 var position = ToInteger(pos);
1386 var size = s.length;
1387 if (position < 0 || position >= size) return undefined;
1388 var first = s.charCodeAt(position);
1389 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
1390 var second = s.charCodeAt(position + 1);
1391 if (second < 0xDC00 || second > 0xDFFF) return first;
1392 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
1393 });
1394
1395 // 21.1.3.4 String.prototype.concat ( ...args )
1396 // 21.1.3.5 String.prototype.constructor
1397
1398 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
1399 define(
1400 String.prototype, 'endsWith',
1401 function endsWith(searchString) {
1402 var endPosition = arguments[1];
1403
1404 var o = strict(this);
1405 var s = String(o);
1406 var searchStr = String(searchString);
1407 var len = s.length;
1408 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
1409 var end = min(max(pos, 0), len);
1410 var searchLength = searchStr.length;
1411 var start = end - searchLength;
1412 if (start < 0) return false;
1413 if (s.substring(start, start + searchLength) === searchStr) return true;
1414 return false;
1415 });
1416
1417 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
1418 define(
1419 String.prototype, 'includes',
1420 function includes(searchString) {
1421 var position = arguments[1];
1422
1423 var o = strict(this);
1424 var s = String(o);
1425 var searchStr = String(searchString);
1426 var pos = ToInteger(position);
1427 var len = s.length;
1428 var start = min(max(pos, 0), len);
1429 return s.indexOf(searchStr, start) !== -1;
1430 });
1431
1432 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
1433 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
1434 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
1435 // 21.1.3.11 String.prototype.match ( regexp )
1436 define(
1437 String.prototype, 'match',
1438 function match(regexp) {
1439 var o = strict(this);
1440 var s = String(o);
1441 if (HasProperty(regexp, $$match)) var rx = regexp;
1442 else rx = new RegExp(regexp);
1443 return rx[$$match](s);
1444 }, !string_regexp_dispatch);
1445
1446 // 21.1.3.12 String.prototype.normalize ( [ form ] )
1447
1448 // Not practical due to table sizes; if needed, pull in:
1449 // https://github.com/walling/unorm/
1450
1451 // 21.1.3.13 String.prototype.repeat ( count )
1452 define(
1453 String.prototype, 'repeat',
1454 function repeat(count) {
1455 var o = strict(this);
1456 var s = String(o);
1457 var n = ToInteger(count);
1458 if (n < 0) throw RangeError();
1459 if (n === Infinity) throw RangeError();
1460 var t = new Array(n + 1).join(s);
1461 return t;
1462 });
1463
1464 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
1465 define(
1466 String.prototype, 'replace',
1467 function replace(searchValue, replaceValue) {
1468 var o = strict(this);
1469 if (HasProperty(searchValue, $$replace))
1470 return searchValue[$$replace](o, replaceValue);
1471 return orig_replace.call(o, searchValue, replaceValue);
1472 }, !string_regexp_dispatch);
1473
1474 // 21.1.3.15 String.prototype.search ( regexp )
1475 define(
1476 String.prototype, 'search',
1477 function search(regexp) {
1478 var o = strict(this);
1479 var string = String(o);
1480 if (HasProperty(regexp, $$search)) var rx = regexp;
1481 else rx = new RegExp(regexp);
1482 return rx[$$search](string);
1483 }, !string_regexp_dispatch);
1484
1485 // 21.1.3.16 String.prototype.slice ( start, end )
1486 // 21.1.3.17 String.prototype.split ( separator, limit )
1487 define(
1488 String.prototype, 'split',
1489 function split(separator, limit) {
1490 var o = strict(this);
1491 if (HasProperty(separator, $$split))
1492 return separator[$$split](o, limit);
1493 return orig_split.call(o, separator, limit);
1494 }, !string_regexp_dispatch);
1495
1496 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
1497 define(
1498 String.prototype, 'startsWith',
1499 function startsWith(searchString) {
1500 var position = arguments[1];
1501
1502 var o = strict(this);
1503 var s = String(o);
1504 var searchStr = String(searchString);
1505 var pos = ToInteger(position);
1506 var len = s.length;
1507 var start = min(max(pos, 0), len);
1508 var searchLength = searchStr.length;
1509 if (searchLength + start > len) return false;
1510 if (s.substring(start, start + searchLength) === searchStr) return true;
1511 return false;
1512 });
1513
1514 // 21.1.3.19 String.prototype.substring ( start, end )
1515 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
1516 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
1517 // 21.1.3.22 String.prototype.toLowerCase ( )
1518 // 21.1.3.23 String.prototype.toString ( )
1519 // 21.1.3.24 String.prototype.toUpperCase ( )
1520 // 21.1.3.25 String.prototype.trim ( )
1521 // 21.1.3.26 String.prototype.valueOf ( )
1522
1523 // 21.1.3.27 String.prototype [ @@iterator ]( )
1524 define(
1525 String.prototype, $$iterator,
1526 function entries() {
1527 return CreateStringIterator(this, 'value');
1528 });
1529
1530 // 21.1.4 Properties of String Instances
1531 // 21.1.4.1 length
1532
1533 // 21.1.5 String Iterator Objects
1534 /** @constructor */
1535 function StringIterator() {}
1536
1537 // 21.1.5.1 CreateStringIterator Abstract Operation
1538 function CreateStringIterator(string, kind) {
1539 var s = String(string);
1540 var iterator = new StringIterator;
1541 set_internal(iterator, '[[IteratedString]]', s);
1542 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
1543 set_internal(iterator, '[[StringIterationKind]]', kind);
1544 return iterator;
1545 }
1546
1547 // 21.1.5.2 The %StringIteratorPrototype% Object
1548 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
1549 StringIterator.prototype = $StringIteratorPrototype$;
1550
1551 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
1552 define(
1553 $StringIteratorPrototype$, 'next',
1554 function next() {
1555 var o = ToObject(this);
1556 var s = String(o['[[IteratedString]]']),
1557 index = o['[[StringIteratorNextIndex]]'],
1558 len = s.length;
1559 if (index >= len) {
1560 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
1561 return CreateIterResultObject(undefined, true);
1562 }
1563 var cp = s.codePointAt(index);
1564 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
1565 return CreateIterResultObject(String.fromCodePoint(cp), false);
1566 });
1567
1568 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
1569 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
1570
1571 // 21.1.5.3 Properties of String Iterator Instances
1572
1573 // ---------------------------------------
1574 // 21.2 RegExp (Regular Expression) Objects
1575 // ---------------------------------------
1576
1577 // 21.2.1 Patterns
1578 // 21.2.2 Pattern Semantics
1579 // 21.2.2.1 Notation
1580 // 21.2.2.2 Pattern
1581 // 21.2.2.3 Disjunction
1582 // 21.2.2.4 Alternative
1583 // 21.2.2.5 Term
1584 // 21.2.2.6 Assertion
1585 // 21.2.2.7 Quantifier
1586 // 21.2.2.8 Atom
1587 // 21.2.2.9 AtomEscape
1588 // 21.2.2.10 CharacterEscape
1589 // 21.2.2.11 DecimalEscape
1590 // 21.2.2.12 CharacterClassEscape
1591 // 21.2.2.13 CharacterClass
1592 // 21.2.2.14 ClassRanges
1593 // 21.2.2.15 NonemptyClassRanges
1594 // 21.2.2.16 NonemptyClassRangesNoDash
1595 // 21.2.2.17 ClassAtom
1596 // 21.2.2.18 ClassAtomNoDash
1597 // 21.2.2.19 ClassEscape
1598 // 21.2.3 The RegExp Constructor
1599 // 21.2.3.1 RegExp ( pattern, flags )
1600 // 21.2.3.2 new RegExp( ...argumentsList )
1601 // 21.2.3.3 Abstract Operations for the RegExp Constructor
1602 // 21.2.4 Properties of the RegExp Constructor
1603 // 21.2.4.1 RegExp.prototype
1604 // 21.2.5 Properties of the RegExp Prototype Object
1605 // 21.2.5.1 RegExp.prototype.constructor
1606 // 21.2.5.2 RegExp.prototype.exec ( string )
1607
1608 // 21.2.5.3 get RegExp.prototype.flags
1609 if (!('flags' in RegExp.prototype)) {
1610 Object.defineProperty(
1611 RegExp.prototype, 'flags', {
1612 get: function() {
1613 var s = String(this);
1614 return s.substring(s.lastIndexOf('/') + 1);
1615 }
1616 });
1617 }
1618
1619 // 21.2.5.4 get RegExp.prototype.global
1620 // 21.2.5.5 get RegExp.prototype.ignoreCase
1621
1622 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
1623 define(RegExp.prototype, $$match, function(string) {
1624 var o = strict(this);
1625 return orig_match.call(string, o);
1626 });
1627
1628 // 21.2.5.7 get RegExp.prototype.multiline
1629
1630 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
1631 define(RegExp.prototype, $$replace, function(string, replaceValue) {
1632 var o = strict(this);
1633 return orig_replace.call(string, o, replaceValue);
1634 });
1635
1636 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
1637 define(RegExp.prototype, $$search, function(string) {
1638 var o = strict(this);
1639 return orig_search.call(string, o);
1640 });
1641
1642 // 21.2.5.10 get RegExp.prototype.source
1643
1644 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
1645 define(RegExp.prototype, $$split, function(string, limit) {
1646 var o = strict(this);
1647 return orig_split.call(string, o, limit);
1648 });
1649
1650 // 21.2.5.12 get RegExp.prototype.sticky
1651 // 21.2.5.13 RegExp.prototype.test( S )
1652 // 21.2.5.14 RegExp.prototype.toString ( )
1653 // 21.2.5.15 get RegExp.prototype.unicode
1654
1655 // 21.2.6 Properties of RegExp Instances
1656 // 21.2.6.1 lastIndex
1657
1658 // (No polyfillable changes from ES5)
1659
1660 // ---------------------------------------
1661 // 22 Indexed Collections
1662 // ---------------------------------------
1663
1664 // ---------------------------------------
1665 // 22.1 Array Objects
1666 // ---------------------------------------
1667
1668 // 22.1.1 The Array Constructor
1669 // 22.1.1.1 Array ( )
1670 // 22.1.1.2 Array (len)
1671 // 22.1.1.3 Array (...items )
1672
1673 // 22.1.2 Properties of the Array Constructor
1674
1675 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
1676 define(
1677 Array, 'from',
1678 function from(items) {
1679 var mapfn = arguments[1];
1680 var thisArg = arguments[2];
1681
1682 var c = strict(this);
1683 if (mapfn === undefined) {
1684 var mapping = false;
1685 } else {
1686 if (!IsCallable(mapfn)) throw TypeError();
1687 var t = thisArg;
1688 mapping = true;
1689 }
1690 var usingIterator = GetMethod(items, $$iterator);
1691 if (usingIterator !== undefined) {
1692 if (IsConstructor(c)) {
1693 var a = new c();
1694 } else {
1695 a = new Array(0);
1696 }
1697 var iterator = GetIterator(items, usingIterator);
1698 var k = 0;
1699 while (true) {
1700 var next = IteratorStep(iterator);
1701 if (next === false) {
1702 a.length = k;
1703 return a;
1704 }
1705 var nextValue = IteratorValue(next);
1706 if (mapping)
1707 var mappedValue = mapfn.call(t, nextValue);
1708 else
1709 mappedValue = nextValue;
1710 a[k] = mappedValue;
1711 k += 1;
1712 }
1713 }
1714 var arrayLike = ToObject(items);
1715 var lenValue = arrayLike.length;
1716 var len = ToLength(lenValue);
1717 if (IsConstructor(c)) {
1718 a = new c(len);
1719 } else {
1720 a = new Array(len);
1721 }
1722 k = 0;
1723 while (k < len) {
1724 var kValue = arrayLike[k];
1725 if (mapping)
1726 mappedValue = mapfn.call(t, kValue, k);
1727 else
1728 mappedValue = kValue;
1729 a[k] = mappedValue;
1730 k += 1;
1731 }
1732 a.length = len;
1733 return a;
1734 });
1735
1736 // 22.1.2.2 Array.isArray ( arg )
1737
1738 // 22.1.2.3 Array.of ( ...items )
1739 define(
1740 Array, 'of',
1741 function of() {
1742 var items = arguments;
1743
1744 var lenValue = items.length;
1745 var len = ToUint32(lenValue);
1746 var c = strict(this), a;
1747 if (IsConstructor(c)) {
1748 a = new c(len);
1749 a = ToObject(a);
1750 } else {
1751 a = new Array(len);
1752 }
1753 var k = 0;
1754 while (k < len) {
1755 a[k] = items[k];
1756 k += 1;
1757 }
1758 a.length = len;
1759 return a;
1760 });
1761
1762 // 22.1.2.4 Array.prototype
1763 // 22.1.2.5 get Array [ @@species ]
1764 // 22.1.3 Properties of the Array Prototype Object
1765 // 22.1.3.1 Array.prototype.concat ( ...arguments )
1766 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
1767 // 22.1.3.2 Array.prototype.constructor
1768 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
1769 define(
1770 Array.prototype, 'copyWithin',
1771 function copyWithin(target, start/*, end*/) {
1772 var end = arguments[2];
1773
1774 var o = ToObject(this);
1775 var lenVal = o.length;
1776 var len = ToLength(lenVal);
1777 len = max(len, 0);
1778 var relativeTarget = ToInteger(target);
1779 var to;
1780 if (relativeTarget < 0)
1781 to = max(len + relativeTarget, 0);
1782 else
1783 to = min(relativeTarget, len);
1784 var relativeStart = ToInteger(start);
1785 var from;
1786 if (relativeStart < 0)
1787 from = max(len + relativeStart, 0);
1788 else
1789 from = min(relativeStart, len);
1790 var relativeEnd;
1791 if (end === undefined)
1792 relativeEnd = len;
1793 else
1794 relativeEnd = ToInteger(end);
1795 var final;
1796 if (relativeEnd < 0)
1797 final = max(len + relativeEnd, 0);
1798 else
1799 final = min(relativeEnd, len);
1800 var count = min(final - from, len - to);
1801 var direction;
1802 if (from < to && to < from + count) {
1803 direction = -1;
1804 from = from + count - 1;
1805 to = to + count - 1;
1806 } else {
1807 direction = 1;
1808 }
1809 while (count > 0) {
1810 var fromKey = String(from);
1811 var toKey = String(to);
1812 var fromPresent = HasProperty(o, fromKey);
1813 if (fromPresent) {
1814 var fromVal = o[fromKey];
1815 o[toKey] = fromVal;
1816 } else {
1817 delete o[toKey];
1818 }
1819 from = from + direction;
1820 to = to + direction;
1821 count = count - 1;
1822 }
1823 return o;
1824 });
1825
1826 // 22.1.3.4 Array.prototype.entries ( )
1827 var nativeArrayIteratorMethods =
1828 ('entries' in Array.prototype && 'next' in [].entries());
1829
1830 define(
1831 Array.prototype, 'entries',
1832 function entries() {
1833 return CreateArrayIterator(this, 'key+value');
1834 }, !nativeArrayIteratorMethods);
1835
1836 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
1837
1838 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
1839 define(
1840 Array.prototype, 'fill',
1841 function fill(value/*, start, end*/) {
1842 var start = arguments[1],
1843 end = arguments[2];
1844
1845 var o = ToObject(this);
1846 var lenVal = o.length;
1847 var len = ToLength(lenVal);
1848 len = max(len, 0);
1849 var relativeStart = ToInteger(start);
1850 var k;
1851 if (relativeStart < 0)
1852 k = max((len + relativeStart), 0);
1853 else
1854 k = min(relativeStart, len);
1855 var relativeEnd;
1856 if (end === undefined)
1857 relativeEnd = len;
1858 else
1859 relativeEnd = ToInteger(end);
1860 var final;
1861 if (relativeEnd < 0)
1862 final = max((len + relativeEnd), 0);
1863 else
1864 final = min(relativeEnd, len);
1865 while (k < final) {
1866 var pk = String(k);
1867 o[pk] = value;
1868 k += 1;
1869 }
1870 return o;
1871 });
1872
1873 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
1874
1875 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
1876 define(
1877 Array.prototype, 'find',
1878 function find(predicate) {
1879 var o = ToObject(this);
1880 var lenValue = o.length;
1881 var len = ToInteger(lenValue);
1882 if (!IsCallable(predicate)) throw TypeError();
1883 var t = arguments.length > 1 ? arguments[1] : undefined;
1884 var k = 0;
1885 while (k < len) {
1886 var pk = String(k);
1887 var kPresent = HasProperty(o, pk);
1888 if (kPresent) {
1889 var kValue = o[pk];
1890 var testResult = predicate.call(t, kValue, k, o);
1891 if (Boolean(testResult)) {
1892 return kValue;
1893 }
1894 }
1895 ++k;
1896 }
1897 return undefined;
1898 });
1899
1900 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
1901 define(
1902 Array.prototype, 'findIndex',
1903 function findIndex(predicate) {
1904 var o = ToObject(this);
1905 var lenValue = o.length;
1906 var len = ToLength(lenValue);
1907 if (!IsCallable(predicate)) throw TypeError();
1908 var t = arguments.length > 1 ? arguments[1] : undefined;
1909 var k = 0;
1910 while (k < len) {
1911 var pk = String(k);
1912 var kPresent = HasProperty(o, pk);
1913 if (kPresent) {
1914 var kValue = o[pk];
1915 var testResult = predicate.call(t, kValue, k, o);
1916 if (Boolean(testResult)) {
1917 return k;
1918 }
1919 }
1920 ++k;
1921 }
1922 return -1;
1923 });
1924
1925 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
1926 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
1927 // 22.1.3.12 Array.prototype.join (separator)
1928
1929 // 22.1.3.13 Array.prototype.keys ( )
1930 define(
1931 Array.prototype, 'keys',
1932 function keys() {
1933 return CreateArrayIterator(this, 'key');
1934 }, !nativeArrayIteratorMethods);
1935
1936 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
1937 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
1938 // 22.1.3.16 Array.prototype.pop ( )
1939 // 22.1.3.17 Array.prototype.push ( ...items )
1940 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
1941 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
1942 // 22.1.3.20 Array.prototype.reverse ( )
1943 // 22.1.3.21 Array.prototype.shift ( )
1944 // 22.1.3.22 Array.prototype.slice (start, end)
1945 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
1946 // 22.1.3.24 Array.prototype.sort (comparefn)
1947 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
1948 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1949 // 22.1.3.27 Array.prototype.toString ( )
1950 // 22.1.3.28 Array.prototype.unshift ( ...items )
1951
1952 // 22.1.3.29 Array.prototype.values ( )
1953 define(
1954 Array.prototype, 'values',
1955 function values() {
1956 return CreateArrayIterator(this, 'value');
1957 }, !nativeArrayIteratorMethods);
1958
1959 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
1960 define(
1961 Array.prototype, $$iterator,
1962 Array.prototype.values
1963 );
1964
1965 // 22.1.3.31 Array.prototype [ @@unscopables ]
1966 // 22.1.4 Properties of Array Instances
1967 // 22.1.4.1 length
1968
1969 // 22.1.5 Array Iterator Objects
1970 function ArrayIterator() {}
1971
1972 // 22.1.5.1 CreateArrayIterator Abstract Operation
1973 function CreateArrayIterator(array, kind) {
1974 var o = ToObject(array);
1975 var iterator = new ArrayIterator;
1976 set_internal(iterator, '[[IteratedObject]]', o);
1977 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
1978 set_internal(iterator, '[[ArrayIterationKind]]', kind);
1979 return iterator;
1980 }
1981
1982 // 22.1.5.2 The %ArrayIteratorPrototype% Object
1983 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
1984 ArrayIterator.prototype = $ArrayIteratorPrototype$;
1985
1986 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
1987 define(
1988 $ArrayIteratorPrototype$, 'next',
1989 function next() {
1990 var o = strict(this);
1991 if (Type(o) !== 'object') throw TypeError();
1992 var a = o['[[IteratedObject]]'],
1993 index = o['[[ArrayIteratorNextIndex]]'],
1994 itemKind = o['[[ArrayIterationKind]]'],
1995 lenValue = a.length,
1996 len = ToUint32(lenValue),
1997 elementKey,
1998 elementValue;
1999 if (itemKind.indexOf('sparse') !== -1) {
2000 var found = false;
2001 while (!found && index < len) {
2002 elementKey = String(index);
2003 found = HasProperty(a, elementKey);
2004 if (!found) {
2005 index += 1;
2006 }
2007 }
2008 }
2009 if (index >= len) {
2010 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2011 return CreateIterResultObject(undefined, true);
2012 }
2013 elementKey = index;
2014 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2015 if (itemKind.indexOf('value') !== -1)
2016 elementValue = a[elementKey];
2017 if (itemKind.indexOf('key+value') !== -1)
2018 return CreateIterResultObject([elementKey, elementValue], false);
2019 if (itemKind.indexOf('key') !== -1)
2020 return CreateIterResultObject(elementKey, false);
2021 if (itemKind === 'value')
2022 return CreateIterResultObject(elementValue, false);
2023 throw Error('Internal error');
2024 });
2025
2026 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2027 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2028
2029 // 22.1.5.3 Properties of Array Iterator Instances
2030
2031
2032 // ---------------------------------------
2033 // 22.2 TypedArray Objects
2034 // ---------------------------------------
2035
2036 // See typedarray.js for TypedArray polyfill
2037
2038 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2039 'Int16Array', 'Uint16Array',
2040 'Int32Array', 'Uint32Array',
2041 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2042 if (!($TypedArrayName$ in global))
2043 return;
2044 var $TypedArray$ = global[$TypedArrayName$];
2045
2046 // 22.2.1 The %TypedArray% Intrinsic Object
2047 // 22.2.1.1 %TypedArray% ( length )
2048 // 22.2.1.2 %TypedArray% ( typedArray )
2049 // 22.2.1.3 %TypedArray% ( object )
2050 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2051 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2052 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2053
2054 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2055 define(
2056 $TypedArray$, 'from',
2057 function from(source) {
2058 var mapfn = arguments[1];
2059 var thisArg = arguments[2];
2060
2061 var c = strict(this);
2062 if (!IsConstructor(c)) throw TypeError();
2063 if (mapfn === undefined) {
2064 var mapping = false;
2065 } else {
2066 if (IsCallable(mapfn)) throw TypeError();
2067 var t = thisArg;
2068 mapping = true;
2069 }
2070 var usingIterator = GetMethod(source, $$iterator);
2071 if (usingIterator !== undefined) {
2072 var iterator = GetIterator(source, usingIterator);
2073 var values = [];
2074 var next = true;
2075 while (next !== false) {
2076 next = IteratorStep(iterator);
2077 if (next !== false) {
2078 var nextValue = IteratorValue(next);
2079 values.push(nextValue);
2080 }
2081 }
2082 var len = values.length;
2083 var newObj = new c(len);
2084 var k = 0;
2085 while (k < len) {
2086 var kValue = values.shift();
2087 if (mapping) {
2088 var mappedValue = mapfn.call(t, kValue);
2089 } else {
2090 mappedValue = kValue;
2091 }
2092 newObj[k] = mappedValue;
2093 ++k;
2094 }
2095 console.assert(values.length === 0);
2096 return newObj;
2097 }
2098 var arrayLike = ToObject(source);
2099 var lenValue = arrayLike.length;
2100 len = ToLength(lenValue);
2101 newObj = new c(len);
2102 k = 0;
2103 while (k < len) {
2104 kValue = arrayLike[k];
2105 if (mapping) {
2106 mappedValue = mapfn.call(t, kValue, k);
2107 } else {
2108 mappedValue = kValue;
2109 }
2110 newObj[k] = mappedValue;
2111 ++k;
2112 }
2113 return newObj;
2114 });
2115
2116 // 22.2.2.2 %TypedArray%.of ( ...items )
2117 define(
2118 $TypedArray$, 'of',
2119 function of() {
2120 var items = arguments;
2121
2122 var len = items.length;
2123 var c = strict(this);
2124 var newObj = new c(len);
2125 var k = 0;
2126 while (k < len) {
2127 newObj[k] = items[k];
2128 ++k;
2129 }
2130 return newObj;
2131 });
2132
2133 // 22.2.2.3 %TypedArray%.prototype
2134 // 22.2.2.4 get %TypedArray% [ @@species ]
2135 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2136 // 22.2.3.1 get %TypedArray%.prototype.buffer
2137 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2138 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2139 // 22.2.3.4 %TypedArray%.prototype.constructor
2140
2141 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2142 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2143
2144 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2145 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2146
2147 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2148 define($TypedArray$.prototype, 'every', Array.prototype.every);
2149
2150 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2151 define(
2152 $TypedArray$.prototype, 'fill',
2153 //Array.prototype.fill // Doesn't work in Safari 7
2154 function fill(value/*, start, end*/) {
2155 var start = arguments[1],
2156 end = arguments[2];
2157
2158 var o = ToObject(this);
2159 var lenVal = o.length;
2160 var len = ToLength(lenVal);
2161 len = max(len, 0);
2162 var relativeStart = ToInteger(start);
2163 var k;
2164 if (relativeStart < 0) k = max((len + relativeStart), 0);
2165 else k = min(relativeStart, len);
2166 var relativeEnd;
2167 if (end === undefined) relativeEnd = len;
2168 else relativeEnd = ToInteger(end);
2169 var final;
2170 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2171 else final = min(relativeEnd, len);
2172 while (k < final) {
2173 var pk = String(k);
2174 o[pk] = value;
2175 k += 1;
2176 }
2177 return o;
2178 });
2179
2180 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2181 define(
2182 $TypedArray$.prototype, 'filter',
2183 function filter(callbackfn) {
2184 var thisArg = arguments[1];
2185
2186 var o = ToObject(this);
2187 var lenVal = o.length;
2188 var len = ToLength(lenVal);
2189 if (!IsCallable(callbackfn)) throw TypeError();
2190 var t = thisArg;
2191 var c = o.constructor;
2192 var kept = [];
2193 var k = 0;
2194 var captured = 0;
2195 while (k < len) {
2196 var kValue = o[k];
2197 var selected = callbackfn.call(t, kValue, k, o);
2198 if (selected) {
2199 kept.push(kValue);
2200 ++captured;
2201 }
2202 ++k;
2203 }
2204 var a = new c(captured);
2205 var n = 0;
2206 for (var i = 0; i < kept.length; ++i) {
2207 var e = kept[i];
2208 a[n] = e;
2209 ++n;
2210 }
2211 return a;
2212 });
2213
2214 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2215 define($TypedArray$.prototype, 'find', Array.prototype.find);
2216
2217 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2218 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2219
2220 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2221 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2222
2223 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2224 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2225
2226 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2227 define($TypedArray$.prototype, 'join', Array.prototype.join);
2228
2229 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2230 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2231
2232 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2233 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2234
2235 // 22.2.3.17 get %TypedArray%.prototype.length
2236
2237 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2238 define(
2239 $TypedArray$.prototype, 'map',
2240 function map(callbackfn) {
2241 var thisArg = arguments[1];
2242
2243 var o = ToObject(this);
2244 var lenValue = o.length;
2245 var len = ToLength(lenValue);
2246 if (!IsCallable(callbackfn)) throw TypeError();
2247 var t = thisArg;
2248 var a = undefined;
2249 var c = o.constructor;
2250 if (IsConstructor(c))
2251 a = new c(len);
2252 if (a === undefined)
2253 a = new Array(len);
2254 var k = 0;
2255 while (k < len) {
2256 var kPresent = HasProperty(o, k);
2257 if (kPresent) {
2258 var kValue = o[k];
2259 var mappedValue = callbackfn.call(t, kValue, k, o);
2260 a[k] = mappedValue;
2261 }
2262 ++k;
2263 }
2264 return a;
2265 });
2266
2267 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2268 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2269
2270 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2271 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2272
2273 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2274 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2275
2276 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2277 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2278 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2279
2280 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2281 define(
2282 $TypedArray$.prototype, 'slice',
2283 function slice(start, end) {
2284 var o = ToObject(this);
2285 var lenVal = o.length;
2286 var len = ToLength(lenVal);
2287 var relativeStart = ToInteger(start);
2288 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2289 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2290 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2291 var count = final - k;
2292 var c = o.constructor;
2293 if (IsConstructor(c)) {
2294 var a = new c(count);
2295 } else {
2296 throw TypeError();
2297 }
2298 var n = 0;
2299 while (k < final) {
2300 var kValue = o[k];
2301 a[n] = kValue;
2302 ++k;
2303 ++n;
2304 }
2305 return a;
2306 });
2307
2308 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2309 define($TypedArray$.prototype, 'some', Array.prototype.some);
2310
2311 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2312 define(
2313 $TypedArray$.prototype, 'sort',
2314 function sort() {
2315 var comparefn = arguments[0];
2316
2317 function sortCompare(x, y) {
2318 console.assert(Type(x) === 'number' && Type(y) === 'number');
2319 if (x !== x && y !== y) return +0;
2320 if (x !== x) return 1;
2321 if (y !== y) return -1;
2322 if (comparefn !== undefined) {
2323 return comparefn(x, y);
2324 }
2325 if (x < y) return -1;
2326 if (x > y) return 1;
2327 return +0;
2328 }
2329 return Array.prototype.sort.call(this, sortCompare);
2330 });
2331
2332 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
2333 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
2334 // 22.2.3.28 %TypedArray%.prototype.toString ( )
2335
2336 // 22.2.3.29 %TypedArray%.prototype.values ( )
2337 define($TypedArray$.prototype, 'values', Array.prototype.values);
2338
2339 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
2340 define(
2341 $TypedArray$.prototype, $$iterator,
2342 $TypedArray$.prototype.values
2343 );
2344
2345 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
2346 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
2347
2348 // 22.2.4 The TypedArray Constructors
2349 // 22.2.4.1TypedArray( ... argumentsList)
2350 // 22.2.5 Properties of the TypedArray Constructors
2351 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
2352 // 22.2.5.2 TypedArray.prototype
2353 // 22.2.6 Properties of TypedArray Prototype Objects
2354 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
2355 // 22.2.6.2 TypedArray.prototype.constructor
2356 // 22.2.7 Properties of TypedArray Instances
2357 });
2358
2359 // ---------------------------------------
2360 // 23 Keyed Collection
2361 // ---------------------------------------
2362
2363 // ---------------------------------------
2364 // 23.1 Map Objects
2365 // ---------------------------------------
2366
2367 (function() {
2368 // 23.1.1 The Map Constructor
2369
2370 // 23.1.1.1 Map ( [ iterable ] )
2371 /** @constructor */
2372 function Map(/*iterable*/) {
2373 var map = strict(this);
2374 var iterable = arguments[0];
2375
2376 if (Type(map) !== 'object') throw TypeError();
2377 if ('[[MapData]]' in map) throw TypeError();
2378
2379 if (iterable !== undefined) {
2380 var adder = map['set'];
2381 if (!IsCallable(adder)) throw TypeError();
2382 var iter = GetIterator(ToObject(iterable));
2383 }
2384 set_internal(map, '[[MapData]]', { keys: [], values: [] });
2385 if (iter === undefined) return map;
2386 while (true) {
2387 var next = IteratorStep(iter);
2388 if (next === false)
2389 return map;
2390 var nextItem = IteratorValue(next);
2391 if (Type(nextItem) !== 'object') throw TypeError();
2392 var k = nextItem[0];
2393 var v = nextItem[1];
2394 adder.call(map, k, v);
2395 }
2396
2397 return map;
2398 }
2399
2400 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
2401 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
2402 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
2403 (new global.Map([['a', 1]]).size !== 1))
2404 global.Map = Map;
2405
2406
2407 function MapDataIndexOf(mapData, key) {
2408 var i;
2409 if (key === key) return mapData.keys.indexOf(key);
2410 // Slow case for NaN
2411 for (i = 0; i < mapData.keys.length; i += 1)
2412 if (SameValueZero(mapData.keys[i], key)) return i;
2413 return -1;
2414 }
2415
2416 // 23.1.1.2 new Map ( ... argumentsList )
2417 // 23.1.2 Properties of the Map Constructor
2418 // 23.1.2.1 Map.prototype
2419 var $MapPrototype$ = {};
2420 Map.prototype = $MapPrototype$;
2421
2422 // 23.1.2.2 get Map [ @@species ]
2423
2424 // 23.1.3 Properties of the Map Prototype Object
2425 // 23.1.3.1 Map.prototype.clear ()
2426 define(
2427 Map.prototype, 'clear',
2428 function clear() {
2429 var m = strict(this);
2430 if (Type(m) !== 'object') throw TypeError();
2431 if (!('[[MapData]]' in m)) throw TypeError();
2432 if (m['[[MapData]]'] === undefined) throw TypeError();
2433 var entries = m['[[MapData]]'];
2434 entries.keys.length = 0;
2435 entries.values.length = 0;
2436 return undefined;
2437 });
2438
2439 // 23.1.3.2 Map.prototype.constructor
2440
2441 // 23.1.3.3 Map.prototype.delete ( key )
2442 define(
2443 Map.prototype, 'delete',
2444 function delete_(key) {
2445 var m = strict(this);
2446 if (Type(m) !== 'object') throw TypeError();
2447 if (!('[[MapData]]' in m)) throw TypeError();
2448 if (m['[[MapData]]'] === undefined) throw TypeError();
2449 var entries = m['[[MapData]]'];
2450 var i = MapDataIndexOf(entries, key);
2451 if (i < 0) return false;
2452 entries.keys[i] = empty;
2453 entries.values[i] = empty;
2454 return true;
2455 });
2456
2457 // 23.1.3.4 Map.prototype.entries ( )
2458 define(
2459 Map.prototype, 'entries',
2460 function entries() {
2461 var m = strict(this);
2462 if (Type(m) !== 'object') throw TypeError();
2463 return CreateMapIterator(m, 'key+value');
2464 });
2465
2466 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
2467 define(
2468 Map.prototype, 'forEach',
2469 function forEach(callbackfn /*, thisArg*/) {
2470 var thisArg = arguments[1];
2471
2472 var m = strict(this);
2473 if (Type(m) !== 'object') throw TypeError();
2474 if (!('[[MapData]]' in m)) throw TypeError();
2475 if (m['[[MapData]]'] === undefined) throw TypeError();
2476 var entries = m['[[MapData]]'];
2477
2478 if (!IsCallable(callbackfn)) {
2479 throw TypeError('First argument to forEach is not callable.');
2480 }
2481 for (var i = 0; i < entries.keys.length; ++i) {
2482 if (entries.keys[i] !== empty) {
2483 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
2484 }
2485 }
2486 return undefined;
2487 });
2488
2489 // 23.1.3.6 Map.prototype.get ( key )
2490 define(
2491 Map.prototype, 'get',
2492 function get(key) {
2493 var m = strict(this);
2494 if (Type(m) !== 'object') throw TypeError();
2495 if (!('[[MapData]]' in m)) throw TypeError();
2496 if (m['[[MapData]]'] === undefined) throw TypeError();
2497 var entries = m['[[MapData]]'];
2498 var i = MapDataIndexOf(entries, key);
2499 if (i >= 0) return entries.values[i];
2500 return undefined;
2501 });
2502
2503 // 23.1.3.7 Map.prototype.has ( key )
2504 define(
2505 Map.prototype, 'has',
2506 function has(key) {
2507 var m = strict(this);
2508 if (Type(m) !== 'object') throw TypeError();
2509 if (!('[[MapData]]' in m)) throw TypeError();
2510 if (m['[[MapData]]'] === undefined) throw TypeError();
2511 var entries = m['[[MapData]]'];
2512 if (MapDataIndexOf(entries, key) >= 0) return true;
2513 return false;
2514 });
2515
2516 // 23.1.3.8 Map.prototype.keys ( )
2517 define(
2518 Map.prototype, 'keys',
2519 function keys() {
2520 var m = strict(this);
2521 if (Type(m) !== 'object') throw TypeError();
2522 return CreateMapIterator(m, 'key');
2523 });
2524
2525 // 23.1.3.9 Map.prototype.set ( key , value )
2526 define(
2527 Map.prototype, 'set',
2528 function set(key, value) {
2529 var m = strict(this);
2530 if (Type(m) !== 'object') throw TypeError();
2531 if (!('[[MapData]]' in m)) throw TypeError();
2532 if (m['[[MapData]]'] === undefined) throw TypeError();
2533 var entries = m['[[MapData]]'];
2534 var i = MapDataIndexOf(entries, key);
2535 if (i < 0) i = entries.keys.length;
2536 if (SameValue(key, -0)) key = 0;
2537 entries.keys[i] = key;
2538 entries.values[i] = value;
2539 return m;
2540 });
2541
2542 // 23.1.3.10 get Map.prototype.size
2543 Object.defineProperty(
2544 Map.prototype, 'size', {
2545 get: function() {
2546 var m = strict(this);
2547 if (Type(m) !== 'object') throw TypeError();
2548 if (!('[[MapData]]' in m)) throw TypeError();
2549 if (m['[[MapData]]'] === undefined) throw TypeError();
2550 var entries = m['[[MapData]]'];
2551 var count = 0;
2552 for (var i = 0; i < entries.keys.length; ++i) {
2553 if (entries.keys[i] !== empty)
2554 count = count + 1;
2555 }
2556 return count;
2557 }
2558 });
2559
2560 // 23.1.3.11 Map.prototype.values ( )
2561 define(
2562 Map.prototype, 'values',
2563 function values() {
2564 var m = strict(this);
2565 if (Type(m) !== 'object') throw TypeError();
2566 return CreateMapIterator(m, 'value');
2567 });
2568
2569 // 23.1.3.12 Map.prototype [ @@iterator ]( )
2570 define(
2571 Map.prototype, $$iterator,
2572 function() {
2573 var m = strict(this);
2574 if (Type(m) !== 'object') throw TypeError();
2575 return CreateMapIterator(m, 'key+value');
2576 });
2577
2578 // 23.1.3.13 Map.prototype [ @@toStringTag ]
2579 define(global.Map.prototype, $$toStringTag, 'Map');
2580
2581 // 23.1.4 Properties of Map Instances
2582 // 23.1.5 Map Iterator Objects
2583
2584 /** @constructor */
2585 function MapIterator() {}
2586
2587 // 23.1.5.1 CreateMapIterator Abstract Operation
2588 function CreateMapIterator(map, kind) {
2589 if (Type(map) !== 'object') throw TypeError();
2590 if (!('[[MapData]]' in map)) throw TypeError();
2591 if (map['[[MapData]]'] === undefined) throw TypeError();
2592 var iterator = new MapIterator;
2593 set_internal(iterator, '[[Map]]', map);
2594 set_internal(iterator, '[[MapNextIndex]]', 0);
2595 set_internal(iterator, '[[MapIterationKind]]', kind);
2596 return iterator;
2597 }
2598
2599 // 23.1.5.2 The %MapIteratorPrototype% Object
2600 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
2601 MapIterator.prototype = $MapIteratorPrototype$;
2602
2603 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
2604 define(
2605 $MapIteratorPrototype$, 'next',
2606 function next() {
2607 var o = strict(this);
2608 if (Type(o) !== 'object') throw TypeError();
2609 var m = o['[[Map]]'],
2610 index = o['[[MapNextIndex]]'],
2611 itemKind = o['[[MapIterationKind]]'],
2612 entries = m['[[MapData]]'];
2613 while (index < entries.keys.length) {
2614 var e = {key: entries.keys[index], value: entries.values[index]};
2615 index = index += 1;
2616 set_internal(o, '[[MapNextIndex]]', index);
2617 if (e.key !== empty) {
2618 if (itemKind === 'key') {
2619 return CreateIterResultObject(e.key, false);
2620 } else if (itemKind === 'value') {
2621 return CreateIterResultObject(e.value, false);
2622 } else {
2623 return CreateIterResultObject([e.key, e.value], false);
2624 }
2625 }
2626 }
2627 return CreateIterResultObject(undefined, true);
2628 });
2629
2630 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
2631 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
2632
2633 // 23.1.5.3 Properties of Map Iterator Instances
2634 }());
2635
2636 // ---------------------------------------
2637 // 23.2 Set Objects
2638 // ---------------------------------------
2639
2640 (function() {
2641 // 23.2.1 The Set Constructor
2642 // 23.2.1.1 Set ( [ iterable ] )
2643
2644 /** @constructor */
2645 function Set(/*iterable*/) {
2646 var set = strict(this);
2647 var iterable = arguments[0];
2648
2649 if (Type(set) !== 'object') throw TypeError();
2650 if ('[[SetData]]' in set) throw TypeError();
2651
2652 if (iterable !== undefined) {
2653 var adder = set['add'];
2654 if (!IsCallable(adder)) throw TypeError();
2655 var iter = GetIterator(ToObject(iterable));
2656 }
2657 set_internal(set, '[[SetData]]', []);
2658 if (iter === undefined) return set;
2659 while (true) {
2660 var next = IteratorStep(iter);
2661 if (next === false)
2662 return set;
2663 var nextValue = IteratorValue(next);
2664 adder.call(set, nextValue);
2665 }
2666
2667 return set;
2668 }
2669
2670 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
2671 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
2672 (new global.Set([1]).size !== 1))
2673 global.Set = Set;
2674
2675 function SetDataIndexOf(setData, key) {
2676 var i;
2677 if (key === key)
2678 return setData.indexOf(key);
2679 // Slow case for NaN
2680 for (i = 0; i < setData.length; i += 1)
2681 if (SameValueZero(setData[i], key)) return i;
2682 return -1;
2683 }
2684
2685 // 23.2.1.2 new Set ( ...argumentsList )
2686 // 23.2.2 Properties of the Set Constructor
2687
2688 // 23.2.2.1 Set.prototype
2689 var $SetPrototype$ = {};
2690 Set.prototype = $SetPrototype$;
2691
2692 // 23.2.2.2 get Set [ @@species ]
2693 // 23.2.3 Properties of the Set Prototype Object
2694
2695 // 23.2.3.1 Set.prototype.add (value )
2696 define(
2697 Set.prototype, 'add',
2698 function add(value) {
2699 var s = strict(this);
2700 if (Type(s) !== 'object') throw TypeError();
2701 if (!('[[SetData]]' in s)) throw TypeError();
2702 if (s['[[SetData]]'] === undefined) throw TypeError();
2703 if (SameValue(value, -0)) value = 0;
2704 var entries = s['[[SetData]]'];
2705 var i = SetDataIndexOf(entries, value);
2706 if (i < 0) i = s['[[SetData]]'].length;
2707 s['[[SetData]]'][i] = value;
2708
2709 return s;
2710 });
2711
2712 // 23.2.3.2 Set.prototype.clear ()
2713 define(
2714 Set.prototype, 'clear',
2715 function clear() {
2716 var s = strict(this);
2717 if (Type(s) !== 'object') throw TypeError();
2718 if (!('[[SetData]]' in s)) throw TypeError();
2719 if (s['[[SetData]]'] === undefined) throw TypeError();
2720 var entries = s['[[SetData]]'];
2721 entries.length = 0;
2722 return undefined;
2723 });
2724
2725 // 23.2.3.3 Set.prototype.constructor
2726 // 23.2.3.4 Set.prototype.delete ( value )
2727 define(
2728 Set.prototype, 'delete',
2729 function delete_(value) {
2730 var s = strict(this);
2731 if (Type(s) !== 'object') throw TypeError();
2732 if (!('[[SetData]]' in s)) throw TypeError();
2733 if (s['[[SetData]]'] === undefined) throw TypeError();
2734 var entries = s['[[SetData]]'];
2735 var i = SetDataIndexOf(entries, value);
2736 if (i < 0) return false;
2737 entries[i] = empty;
2738 return true;
2739 });
2740
2741 // 23.2.3.5 Set.prototype.entries ( )
2742 define(
2743 Set.prototype, 'entries',
2744 function entries() {
2745 var s = strict(this);
2746 if (Type(s) !== 'object') throw TypeError();
2747 return CreateSetIterator(s, 'key+value');
2748 });
2749
2750 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
2751 define(
2752 Set.prototype, 'forEach',
2753 function forEach(callbackfn/*, thisArg*/) {
2754 var thisArg = arguments[1];
2755
2756 var s = strict(this);
2757 if (Type(s) !== 'object') throw TypeError();
2758 if (!('[[SetData]]' in s)) throw TypeError();
2759 if (s['[[SetData]]'] === undefined) throw TypeError();
2760 var entries = s['[[SetData]]'];
2761
2762 if (!IsCallable(callbackfn)) {
2763 throw TypeError('First argument to forEach is not callable.');
2764 }
2765 for (var i = 0; i < entries.length; ++i) {
2766 if (entries[i] !== empty) {
2767 callbackfn.call(thisArg, entries[i], entries[i], s);
2768 }
2769 }
2770 });
2771
2772 // 23.2.3.7 Set.prototype.has ( value )
2773 define(
2774 Set.prototype, 'has',
2775 function has(key) {
2776 var s = strict(this);
2777 if (Type(s) !== 'object') throw TypeError();
2778 if (!('[[SetData]]' in s)) throw TypeError();
2779 if (s['[[SetData]]'] === undefined) throw TypeError();
2780 var entries = s['[[SetData]]'];
2781 return SetDataIndexOf(entries, key) !== -1;
2782 });
2783
2784 // 23.2.3.8 Set.prototype.keys ( )
2785 // See Set.prototype.values
2786
2787 // 23.2.3.9 get Set.prototype.size
2788 Object.defineProperty(
2789 Set.prototype, 'size', {
2790 get: function() {
2791 var s = strict(this);
2792 if (Type(s) !== 'object') throw TypeError();
2793 if (!('[[SetData]]' in s)) throw TypeError();
2794 if (s['[[SetData]]'] === undefined) throw TypeError();
2795 var entries = s['[[SetData]]'];
2796 var count = 0;
2797 for (var i = 0; i < entries.length; ++i) {
2798 if (entries[i] !== empty)
2799 count = count + 1;
2800 }
2801 return count;
2802 }
2803 });
2804
2805 // 23.2.3.10 Set.prototype.values ( )
2806 define(
2807 Set.prototype, 'values',
2808 function values() {
2809 var s = strict(this);
2810 if (Type(s) !== 'object') throw TypeError();
2811 return CreateSetIterator(s, 'value');
2812 });
2813 // NOTE: function name is still 'values':
2814 Set.prototype.keys = Set.prototype.values;
2815
2816 // 23.2.3.11 Set.prototype [@@iterator ] ( )
2817 define(
2818 Set.prototype, $$iterator,
2819 function() {
2820 var s = strict(this);
2821 if (Type(s) !== 'object') throw TypeError();
2822 return CreateSetIterator(s);
2823 });
2824
2825 // 23.2.3.12 Set.prototype [ @@toStringTag ]
2826 define(global.Set.prototype, $$toStringTag, 'Set');
2827
2828 // 23.2.4 Properties of Set Instances
2829 // 23.2.5 Set Iterator Objects
2830 /** @constructor */
2831 function SetIterator() {}
2832
2833 // 23.2.5.1 CreateSetIterator Abstract Operation
2834 function CreateSetIterator(set, kind) {
2835 if (Type(set) !== 'object') throw TypeError();
2836 if (!('[[SetData]]' in set)) throw TypeError();
2837 if (set['[[SetData]]'] === undefined) throw TypeError();
2838 var iterator = new SetIterator;
2839 set_internal(iterator, '[[IteratedSet]]', set);
2840 set_internal(iterator, '[[SetNextIndex]]', 0);
2841 set_internal(iterator, '[[SetIterationKind]]', kind);
2842 return iterator;
2843 }
2844
2845 // 23.2.5.2 The %SetIteratorPrototype% Object
2846 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
2847 SetIterator.prototype = $SetIteratorPrototype$;
2848
2849 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
2850 define(
2851 $SetIteratorPrototype$, 'next',
2852 function next() {
2853 var o = strict(this);
2854 if (Type(o) !== 'object') throw TypeError();
2855 var s = o['[[IteratedSet]]'],
2856 index = o['[[SetNextIndex]]'],
2857 itemKind = o['[[SetIterationKind]]'],
2858 entries = s['[[SetData]]'];
2859 while (index < entries.length) {
2860 var e = entries[index];
2861 index = index += 1;
2862 set_internal(o, '[[SetNextIndex]]', index);
2863 if (e !== empty) {
2864 if (itemKind === 'key+value')
2865 return CreateIterResultObject([e, e], false);
2866 return CreateIterResultObject(e, false);
2867 }
2868 }
2869 return CreateIterResultObject(undefined, true);
2870 });
2871
2872 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
2873 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
2874
2875 // 23.2.5.3 Properties of Set Iterator Instances
2876
2877 }());
2878
2879 // ---------------------------------------
2880 // 23.3 WeakMap Objects
2881 // ---------------------------------------
2882
2883 (function() {
2884 // 23.3.1 The WeakMap Constructor
2885 // 23.3.1.1 WeakMap ( [ iterable ] )
2886 /** @constructor */
2887 function WeakMap(/*iterable*/) {
2888 var map = strict(this);
2889 var iterable = arguments[0];
2890
2891 if (Type(map) !== 'object') throw TypeError();
2892 if ('[[WeakMapData]]' in map) throw TypeError();
2893
2894 if (iterable !== undefined) {
2895 var adder = map['set'];
2896 if (!IsCallable(adder)) throw TypeError();
2897 var iter = GetIterator(ToObject(iterable));
2898 }
2899 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
2900 if (iter === undefined) return map;
2901 while (true) {
2902 var next = IteratorStep(iter);
2903 if (next === false)
2904 return map;
2905 var nextValue = IteratorValue(next);
2906 if (Type(nextValue) !== 'object') throw TypeError();
2907 var k = nextValue[0];
2908 var v = nextValue[1];
2909 adder.call(map, k, v);
2910 }
2911
2912 return map;
2913 }
2914
2915 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
2916 global.WeakMap = WeakMap;
2917
2918 // 23.3.2 Properties of the WeakMap Constructor
2919 // 23.3.2.1 WeakMap.prototype
2920 var $WeakMapPrototype$ = {};
2921 WeakMap.prototype = $WeakMapPrototype$;
2922
2923
2924
2925 // 23.3.2.2 WeakMap[ @@create ] ( )
2926 // 23.3.3 Properties of the WeakMap Prototype Object
2927
2928 // 23.3.3.1 WeakMap.prototype.constructor
2929
2930 // 23.3.3.2 WeakMap.prototype.delete ( key )
2931 define(
2932 WeakMap.prototype, 'delete',
2933 function delete_(key) {
2934 var M = strict(this);
2935 if (Type(M) !== 'object') throw TypeError();
2936 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2937 if (Type(key) !== 'object') throw TypeError('Expected object');
2938 return M['[[WeakMapData]]'].remove(key);
2939 });
2940
2941 // 23.3.3.3 WeakMap.prototype.get ( key )
2942 define(
2943 WeakMap.prototype, 'get',
2944 function get(key, defaultValue) {
2945 var M = strict(this);
2946 if (Type(M) !== 'object') throw TypeError();
2947 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2948 if (Type(key) !== 'object') throw TypeError('Expected object');
2949 return M['[[WeakMapData]]'].get(key, defaultValue);
2950 });
2951
2952 // 23.3.3.4 WeakMap.prototype.has ( key )
2953 define(
2954 WeakMap.prototype, 'has',
2955 function has(key) {
2956 var M = strict(this);
2957 if (Type(M) !== 'object') throw TypeError();
2958 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2959 if (Type(key) !== 'object') throw TypeError('Expected object');
2960 return M['[[WeakMapData]]'].has(key);
2961 });
2962
2963 // 23.3.3.5 WeakMap.prototype.set ( key , value )
2964 define(
2965 WeakMap.prototype, 'set',
2966 function set(key, value) {
2967 var M = strict(this);
2968 if (Type(M) !== 'object') throw TypeError();
2969 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2970 if (Type(key) !== 'object') throw TypeError('Expected object');
2971 M['[[WeakMapData]]'].set(key, value);
2972 return M;
2973 });
2974
2975 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
2976 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
2977
2978 // 23.3.4 Properties of WeakMap Instances
2979
2980 // Polyfills for incomplete native implementations:
2981 (function() {
2982 var wm = new global.WeakMap();
2983 var orig = global.WeakMap.prototype.set;
2984 define(global.WeakMap.prototype, 'set', function set() {
2985 orig.apply(this, arguments);
2986 return this;
2987 }, wm.set({}, 0) !== wm);
2988 }());
2989 }());
2990
2991 // ---------------------------------------
2992 // 23.4 WeakSet Objects
2993 // ---------------------------------------
2994
2995 (function() {
2996 // 23.4.1 The WeakSet Constructor
2997 // 23.4.1.1 WeakSet ( [ iterable ] )
2998 /** @constructor */
2999 function WeakSet(/*iterable*/) {
3000 var set = strict(this);
3001 var iterable = arguments[0];
3002
3003 if (Type(set) !== 'object') throw TypeError();
3004 if ('[[WeakSetData]]' in set) throw TypeError();
3005
3006 if (iterable !== undefined) {
3007 var adder = set['add'];
3008 if (!IsCallable(adder)) throw TypeError();
3009 var iter = GetIterator(ToObject(iterable));
3010 }
3011 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3012 if (iter === undefined) return set;
3013 while (true) {
3014 var next = IteratorStep(iter);
3015 if (next === false)
3016 return set;
3017 var nextValue = IteratorValue(next);
3018 adder.call(set, nextValue);
3019 }
3020
3021 return set;
3022 }
3023
3024 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3025 global.WeakSet = WeakSet;
3026
3027 // 23.4.2 Properties of the WeakSet Constructor
3028 // 23.4.2.1 WeakSet.prototype
3029 var $WeakSetPrototype$ = {};
3030 WeakSet.prototype = $WeakSetPrototype$;
3031
3032 // 23.4.3 Properties of the WeakSet Prototype Object
3033 // 23.4.3.1 WeakSet.prototype.add (value )
3034 define(
3035 WeakSet.prototype, 'add',
3036 function add(value) {
3037 var S = strict(this);
3038 if (Type(S) !== 'object') throw TypeError();
3039 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3040 if (Type(value) !== 'object') throw TypeError('Expected object');
3041 S['[[WeakSetData]]'].set(value, true);
3042 return S;
3043 });
3044
3045 // 23.4.3.2 WeakSet.prototype.constructor
3046 // 23.4.3.3 WeakSet.prototype.delete ( value )
3047 define(
3048 WeakSet.prototype, 'delete',
3049 function delete_(value) {
3050 var S = strict(this);
3051 if (Type(S) !== 'object') throw TypeError();
3052 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3053 if (Type(value) !== 'object') throw TypeError('Expected object');
3054 return S['[[WeakSetData]]'].remove(value);
3055 });
3056
3057 // 23.4.3.4 WeakSet.prototype.has ( value )
3058 define(
3059 WeakSet.prototype, 'has',
3060 function has(key) {
3061 var S = strict(this);
3062 if (Type(S) !== 'object') throw TypeError();
3063 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3064 if (Type(key) !== 'object') throw TypeError('Expected object');
3065 return S['[[WeakSetData]]'].has(key);
3066 });
3067
3068 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3069 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3070
3071 // 23.4.4 Properties of WeakSet Instances
3072
3073 // Polyfills for incomplete native implementations:
3074 (function() {
3075 var ws = new global.WeakSet();
3076 var orig = global.WeakSet.prototype.add;
3077 define(global.WeakSet.prototype, 'add', function add() {
3078 orig.apply(this, arguments);
3079 return this;
3080 }, ws.add({}) !== ws);
3081 }());
3082 }());
3083
3084 // ---------------------------------------
3085 // 24 Structured Data
3086 // ---------------------------------------
3087
3088 // ---------------------------------------
3089 // 24.1 ArrayBuffer Objects
3090 // ---------------------------------------
3091
3092 // See typedarray.js for TypedArray polyfill
3093
3094 (function() {
3095 if (!('ArrayBuffer' in global))
3096 return;
3097
3098 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3099 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3100 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3101 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3102 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3103 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3104 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3105 // 24.1.2 The ArrayBuffer Constructor
3106 // 24.1.2.1 ArrayBuffer( length )
3107 // 24.1.3 Properties of the ArrayBuffer Constructor
3108
3109 // 24.1.3.1 ArrayBuffer.isView ( arg )
3110 define(
3111 ArrayBuffer, 'isView',
3112 function isView(arg) {
3113 if (Type(arg) !== 'object') return false;
3114 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3115 return false;
3116 });
3117
3118 // 24.1.3.2 ArrayBuffer.prototype
3119 // 24.1.3.3 get ArrayBuffer [ @@species ]
3120 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3121 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3122 // 24.1.4.2 ArrayBuffer.prototype.constructor
3123 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3124
3125 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3126 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3127
3128 // 24.1.5 Properties of the ArrayBuffer Instances
3129 }());
3130
3131 // ---------------------------------------
3132 // 24.2 DataView Objects
3133 // ---------------------------------------
3134
3135 // See typedarray.js for TypedArray polyfill
3136
3137 (function() {
3138 if (!('DataView' in global))
3139 return;
3140
3141 // 24.2.1 Abstract Operations For DataView Objects
3142 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3143 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3144 // 24.2.2 The DataView Constructor
3145 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3146 // 24.2.3 Properties of the DataView Constructor
3147 // 24.2.3.1 DataView.prototype
3148 // 24.2.4 Properties of the DataView Prototype Object
3149 // 24.2.4.1 get DataView.prototype.buffer
3150 // 24.2.4.2 get DataView.prototype.byteLength
3151 // 24.2.4.3 get DataView.prototype.byteOffset
3152 // 24.2.4.4 DataView.prototype.constructor
3153 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3154 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3155 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3156 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3157 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3158 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3159 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3160 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3161 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3162 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3163 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3164 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3165 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3166 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3167 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3168 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3169
3170 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3171 define(DataView.prototype, $$toStringTag, 'DataView');
3172
3173 // 24.2.5 Properties of DataView Instances
3174 }());
3175
3176 // ---------------------------------------
3177 // 24.3 The JSON Object
3178 // ---------------------------------------
3179
3180 // 24.3.1 JSON.parse ( text [ , reviver ] )
3181 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3182 // 24.3.3 JSON [ @@toStringTag ]
3183 define(JSON, $$toStringTag, 'JSON');
3184
3185 // ---------------------------------------
3186 // 25.1 Iteration
3187 // ---------------------------------------
3188
3189 // 25.1.1 Common Iteration Interfaces
3190 // 25.1.1.1 The Iterable Interface
3191 // 25.1.1.2 The Iterator Interface
3192 // 25.1.1.3 The IteratorResult Interface
3193
3194 // 25.1.2 The %IteratorPrototype% Object
3195 // Defined earlier, so other prototypes can reference it.
3196 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3197 define($IteratorPrototype$, $$iterator, function() {
3198 return this;
3199 });
3200
3201
3202 // ---------------------------------------
3203 // 25.4 Promise Objects
3204 // ---------------------------------------
3205
3206 (function() {
3207 // 25.4 Promise Objects
3208
3209 // 25.4.1 Promise Abstract Operations
3210
3211 // 25.4.1.1 PromiseCapability Records
3212 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3213
3214 function IfAbruptRejectPromise(value, capability) {
3215 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3216 return capability['[[Promise]]'];
3217 }
3218
3219 // 25.4.1.2 PromiseReaction Records
3220
3221 // 25.4.1.3 CreateResolvingFunctions ( promise )
3222
3223 function CreateResolvingFunctions(promise) {
3224 var alreadyResolved = {'[[value]]': false};
3225 var resolve = PromiseResolveFunction();
3226 set_internal(resolve, '[[Promise]]', promise);
3227 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3228 var reject = PromiseRejectFunction();
3229 set_internal(reject, '[[Promise]]', promise);
3230 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3231 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3232 }
3233
3234 // 25.4.1.3.1 Promise Reject Functions
3235
3236 function PromiseRejectFunction() {
3237 var F = function(reason) {
3238 console.assert(Type(F['[[Promise]]']) === 'object');
3239 var promise = F['[[Promise]]'];
3240 var alreadyResolved = F['[[AlreadyResolved]]'];
3241 if (alreadyResolved['[[value]]']) return undefined;
3242 set_internal(alreadyResolved, '[[value]]', true);
3243 return RejectPromise(promise, reason);
3244 };
3245 return F;
3246 }
3247
3248 // 25.4.1.3.2 Promise Resolve Functions
3249
3250 function PromiseResolveFunction() {
3251 var F = function(resolution) {
3252 console.assert(Type(F['[[Promise]]']) === 'object');
3253 var promise = F['[[Promise]]'];
3254 var alreadyResolved = F['[[AlreadyResolved]]'];
3255 if (alreadyResolved['[[value]]']) return undefined;
3256 set_internal(alreadyResolved, '[[value]]', true);
3257
3258 if (SameValue(resolution, promise)) {
3259 var selfResolutionError = TypeError();
3260 return RejectPromise(promise, selfResolutionError);
3261 }
3262 if (Type(resolution) !== 'object')
3263 return FulfillPromise(promise, resolution);
3264 try {
3265 var then = resolution['then'];
3266 } catch(then) {
3267 return RejectPromise(promise, then);
3268 }
3269 if (!IsCallable(then))
3270 return FulfillPromise(promise, resolution);
3271 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3272 return undefined;
3273 };
3274 return F;
3275 }
3276
3277 // 25.4.1.4 FulfillPromise ( promise, value )
3278
3279 function FulfillPromise(promise, value) {
3280 console.assert(promise['[[PromiseState]]'] === 'pending');
3281 var reactions = promise['[[PromiseFulfillReactions]]'];
3282 set_internal(promise, '[[PromiseResult]]', value);
3283 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3284 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3285 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3286 return TriggerPromiseReactions(reactions, value);
3287 }
3288
3289 // 25.4.1.5 NewPromiseCapability ( C )
3290
3291 function NewPromiseCapability(c) {
3292 // To keep Promise hermetic, this doesn't look much like the spec.
3293 return CreatePromiseCapabilityRecord(undefined, c);
3294 }
3295
3296 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3297
3298 function CreatePromiseCapabilityRecord(promise, constructor) {
3299 // To keep Promise hermetic, this doesn't look much like the spec.
3300 console.assert(IsConstructor(constructor));
3301 var promiseCapability = {};
3302 set_internal(promiseCapability, '[[Promise]]', promise);
3303 set_internal(promiseCapability, '[[Resolve]]', undefined);
3304 set_internal(promiseCapability, '[[Reject]]', undefined);
3305 var executor = GetCapabilitiesExecutor();
3306 set_internal(executor, '[[Capability]]', promiseCapability);
3307
3308 // NOTE: Differs from spec; object is constructed here
3309 var constructorResult = promise = new constructor(executor);
3310 set_internal(promiseCapability, '[[Promise]]', promise);
3311
3312 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3313 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3314 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3315 return promiseCapability;
3316 }
3317
3318 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3319
3320 function GetCapabilitiesExecutor() {
3321 var F = function(resolve, reject) {
3322 console.assert(F['[[Capability]]']);
3323 var promiseCapability = F['[[Capability]]'];
3324 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
3325 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
3326 set_internal(promiseCapability, '[[Resolve]]', resolve);
3327 set_internal(promiseCapability, '[[Reject]]', reject);
3328 return undefined;
3329 };
3330 return F;
3331 }
3332
3333 // 25.4.1.6 IsPromise ( x )
3334
3335 function IsPromise(x) {
3336 if (Type(x) !== 'object') return false;
3337 if (!('[[PromiseState]]' in x)) return false;
3338 if (x['[[PromiseState]]'] === undefined) return false;
3339 return true;
3340 }
3341
3342 // 25.4.1.7 RejectPromise ( promise, reason )
3343
3344 function RejectPromise(promise, reason) {
3345 console.assert(promise['[[PromiseState]]'] === 'pending');
3346 var reactions = promise['[[PromiseRejectReactions]]'];
3347 set_internal(promise, '[[PromiseResult]]', reason);
3348 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3349 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3350 set_internal(promise, '[[PromiseState]]', 'rejected');
3351 return TriggerPromiseReactions(reactions, reason);
3352 }
3353
3354 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
3355
3356 function TriggerPromiseReactions(reactions, argument) {
3357 for (var i = 0, len = reactions.length; i < len; ++i)
3358 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
3359 return undefined;
3360 }
3361
3362 // 25.4.2 Promise Jobs
3363
3364 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
3365
3366 function PromiseReactionJob(reaction, argument) {
3367 var promiseCapability = reaction['[[Capabilities]]'];
3368 var handler = reaction['[[Handler]]'];
3369 var handlerResult, status;
3370 try {
3371 if (handler === 'Identity') handlerResult = argument;
3372 else if (handler === 'Thrower') throw argument;
3373 else handlerResult = handler.call(undefined, argument);
3374 } catch (handlerResult) {
3375 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
3376 NextJob(status); return;
3377 }
3378 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
3379 NextJob(status);
3380 }
3381
3382 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
3383
3384 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
3385 // SPEC BUG: promise vs. promiseToResolve
3386 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
3387 try {
3388 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
3389 resolvingFunctions['[[Reject]]']);
3390 } catch (thenCallResult) {
3391 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
3392 NextJob(status); return;
3393 }
3394 NextJob(thenCallResult);
3395 }
3396
3397 // 25.4.3 The Promise Constructor
3398
3399 // 25.4.3.1 Promise ( executor )
3400
3401 function Promise(executor) {
3402 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
3403 Object.defineProperty(this, '[[PromiseState]]', config);
3404 Object.defineProperty(this, '[[PromiseConstructor]]', config);
3405 Object.defineProperty(this, '[[PromiseResult]]', config);
3406 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
3407 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
3408
3409 var promise = this;
3410 if (Type(promise) !== 'object') throw new TypeError();
3411 if (!('[[PromiseState]]' in promise)) throw TypeError();
3412 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
3413 if (!IsCallable(executor)) throw TypeError();
3414
3415 set_internal(promise, '[[PromiseConstructor]]', Promise);
3416
3417 return InitializePromise(promise, executor);
3418 }
3419
3420 // 25.4.3.1.1 InitializePromise ( promise, executor )
3421
3422 function InitializePromise(promise, executor) {
3423 console.assert('[[PromiseState]]' in promise);
3424 console.assert(IsCallable(executor));
3425 set_internal(promise, '[[PromiseState]]', 'pending');
3426 set_internal(promise, '[[PromiseFulfillReactions]]', []);
3427 set_internal(promise, '[[PromiseRejectReactions]]', []);
3428 var resolvingFunctions = CreateResolvingFunctions(promise);
3429 try {
3430 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
3431 resolvingFunctions['[[Reject]]']);
3432 } catch (completion) {
3433 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
3434 }
3435 return promise;
3436 }
3437
3438 // 25.4.4 Properties of the Promise Constructor
3439 // 25.4.4.1 Promise.all ( iterable )
3440
3441 define(Promise, 'all', function all(iterable) {
3442 var c = strict(this);
3443 var promiseCapability = NewPromiseCapability(c);
3444 try {
3445 var iterator = GetIterator(iterable);
3446 } catch (value) {
3447 promiseCapability['[[Reject]]'].call(undefined, value);
3448 return promiseCapability['[[Promise]]'];
3449 }
3450 var values = [];
3451 var remainingElementsCount = { value: 1 };
3452 var index = 0;
3453 while (true) {
3454 try {
3455 var next = IteratorStep(iterator);
3456 } catch (value) {
3457 promiseCapability['[[Reject]]'].call(undefined, value);
3458 return promiseCapability['[[Promise]]'];
3459 }
3460 if (!next) {
3461 remainingElementsCount.value -= 1;
3462 if (remainingElementsCount.value === 0) {
3463 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
3464
3465
3466 }
3467 return promiseCapability['[[Promise]]'];
3468 }
3469 try {
3470 var nextValue = IteratorValue(next);
3471 } catch (value) {
3472 promiseCapability['[[Reject]]'].call(undefined, value);
3473 return promiseCapability['[[Promise]]'];
3474 }
3475 try {
3476 var nextPromise = c.resolve(nextValue);
3477 } catch (value) {
3478 promiseCapability['[[Reject]]'].call(undefined, value);
3479 return promiseCapability['[[Promise]]'];
3480 }
3481 var resolveElement = PromiseAllResolveElementFunction();
3482 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
3483 set_internal(resolveElement, '[[Index]]', index);
3484 set_internal(resolveElement, '[[Values]]', values);
3485 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
3486 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
3487 remainingElementsCount.value += 1;
3488 try {
3489 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
3490 } catch (value) {
3491 promiseCapability['[[Reject]]'].call(undefined, value);
3492 return promiseCapability['[[Promise]]'];
3493 }
3494 index += 1;
3495 }
3496 });
3497
3498 // 25.4.4.1.1 Promise.all Resolve Element Functions
3499
3500 function PromiseAllResolveElementFunction() {
3501 var F = function(x) {
3502 var alreadyCalled = F['[[AlreadyCalled]]'];
3503 if (alreadyCalled.value) return undefined;
3504 alreadyCalled.value = true;
3505 var index = F['[[Index]]'];
3506 var values = F['[[Values]]'];
3507 var promiseCapability = F['[[Capabilities]]'];
3508 var remainingElementsCount = F['[[RemainingElements]]'];
3509 try {
3510 values[index] = x;
3511 } catch (result) {
3512 promiseCapability['[[Reject]]'].call(undefined, result);
3513 return promiseCapability['[[Promise]]'];
3514 }
3515 remainingElementsCount.value -= 1;
3516 if (remainingElementsCount.value === 0)
3517 return promiseCapability['[[Resolve]]'].call(undefined, values);
3518 return undefined;
3519 };
3520 return F;
3521 }
3522
3523 // 25.4.4.2 Promise.prototype
3524
3525 Promise.prototype = {};
3526
3527 // 25.4.4.3 Promise.race ( iterable )
3528
3529 define(Promise, 'race', function race(iterable) {
3530 var c = strict(this);
3531 var promiseCapability = NewPromiseCapability(c);
3532 try {
3533 var iterator = GetIterator(iterable);
3534 } catch (value) {
3535 promiseCapability['[[Reject]]'].call(undefined, value);
3536 return promiseCapability['[[Promise]]'];
3537 }
3538 while (true) {
3539 try {
3540 var next = IteratorStep(iterator);
3541 } catch (value) {
3542 promiseCapability['[[Reject]]'].call(undefined, value);
3543 return promiseCapability['[[Promise]]'];
3544 }
3545 if (!next) return promiseCapability['[[Promise]]'];
3546 try {
3547 var nextValue = IteratorValue(next);
3548 } catch (value) {
3549 promiseCapability['[[Reject]]'].call(undefined, value);
3550 return promiseCapability['[[Promise]]'];
3551 }
3552 try {
3553 var nextPromise = c.resolve(nextValue);
3554 } catch (value) {
3555 promiseCapability['[[Reject]]'].call(undefined, value);
3556 return promiseCapability['[[Promise]]'];
3557 }
3558 try {
3559 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
3560 } catch (value) {
3561 promiseCapability['[[Reject]]'].call(undefined, value);
3562 return promiseCapability['[[Promise]]'];
3563 }
3564 }
3565 });
3566
3567 // 25.4.4.4 Promise.reject ( r )
3568
3569 define(Promise, 'reject', function reject(r) {
3570 var c = strict(this);
3571 var promiseCapability = NewPromiseCapability(c);
3572 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
3573 return promiseCapability['[[Promise]]'];
3574 });
3575
3576 // 25.4.4.5 Promise.resolve ( x )
3577
3578 define(Promise, 'resolve', function resolve(x) {
3579 var c = strict(this);
3580 if (IsPromise(x)) {
3581 var constructor = x['[[PromiseConstructor]]'];
3582 if (SameValue(constructor, c)) return x;
3583 }
3584 var promiseCapability = NewPromiseCapability(c);
3585 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
3586 return promiseCapability['[[Promise]]'];
3587 });
3588
3589 // 25.4.4.6 Promise [ @@create ] ( )
3590 // 25.4.4.6.1 AllocatePromise ( constructor )
3591 // 25.4.5 Properties of the Promise Prototype Object
3592 // 25.4.5.1 Promise.prototype.catch ( onRejected )
3593
3594 define(Promise.prototype, 'catch', function catch_(onRejected) {
3595 var promise = this;
3596 return promise.then(undefined, onRejected);
3597 });
3598
3599 // 25.4.5.2 Promise.prototype.constructor
3600
3601 Promise.prototype.constructor = Promise;
3602
3603 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
3604
3605 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
3606 var promise = this;
3607 if (!IsPromise(promise)) throw TypeError();
3608 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
3609 if (!IsCallable(onRejected)) onRejected = 'Thrower';
3610 var c = promise.constructor;
3611 var promiseCapability = NewPromiseCapability(c);
3612 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
3613 '[[Handler]]': onFulfilled };
3614 var rejectReaction = { '[[Capabilities]]': promiseCapability,
3615 '[[Handler]]': onRejected };
3616 if (promise['[[PromiseState]]'] === 'pending') {
3617 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
3618 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
3619 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
3620 var value = promise['[[PromiseResult]]'];
3621 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
3622 } else if (promise['[[PromiseState]]'] === 'rejected') {
3623 var reason = promise['[[PromiseResult]]'];
3624 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
3625 }
3626 return promiseCapability['[[Promise]]'];
3627 });
3628
3629 // 25.4.6 Properties of Promise Instances
3630
3631 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3632 global.Promise = Promise;
3633
3634 // Patch early Promise.cast vs. Promise.resolve implementations
3635 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
3636 }());
3637
3638 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
3639 define(Promise.prototype, $$toStringTag, 'Promise');
3640
3641 // ---------------------------------------
3642 // 26 Reflection
3643 // ---------------------------------------
3644
3645 (function() {
3646 // 26.1 The Reflect Object
3647 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3648 global.Reflect = {};
3649
3650 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
3651 define(
3652 Reflect, 'apply',
3653 function apply(target, thisArgument, argumentsList) {
3654 if (!IsCallable(target)) throw TypeError();
3655 return Function.prototype.apply.call(target, thisArgument, argumentsList);
3656 });
3657
3658 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
3659 define(
3660 Reflect, 'construct',
3661 function construct(target, argumentsList) {
3662 return __cons(target, argumentsList);
3663 });
3664
3665 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
3666 define(
3667 Reflect, 'defineProperty',
3668 function defineProperty(target, propertyKey, attributes) {
3669 try {
3670 Object.defineProperty(target, propertyKey, attributes);
3671 return true;
3672 } catch (_) {
3673 return false;
3674 }
3675 });
3676
3677 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
3678 define(
3679 Reflect, 'deleteProperty',
3680 function deleteProperty(target,name) {
3681 try {
3682 delete target[name];
3683 return !HasOwnProperty(target, name);
3684 } catch (_) {
3685 return false;
3686 }
3687 });
3688
3689 // 26.1.5 Reflect.enumerate ( target )
3690 define(
3691 Reflect, 'enumerate',
3692 function enumerate(target) {
3693 target = ToObject(target);
3694 var iterator = Enumerate(target);
3695 return iterator;
3696 });
3697
3698 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
3699 define(
3700 Reflect, 'get',
3701 function get(target, name, receiver) {
3702 target = ToObject(target);
3703 name = String(name);
3704 receiver = (receiver === undefined) ? target : ToObject(receiver);
3705 var desc = getPropertyDescriptor(target, name);
3706 if (desc && 'get' in desc)
3707 return Function.prototype.call.call(desc['get'], receiver);
3708 return target[name];
3709 });
3710
3711 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
3712 define(
3713 Reflect, 'getOwnPropertyDescriptor',
3714 Object.getOwnPropertyDescriptor);
3715
3716 // 26.1.8 Reflect.getPrototypeOf ( target )
3717 define(
3718 Reflect, 'getPrototypeOf',
3719 Object.getPrototypeOf);
3720
3721 // 26.1.9 Reflect.has ( target, propertyKey )
3722 define(
3723 Reflect, 'has',
3724 function has(target,name) {
3725 return String(name) in ToObject(target);
3726 });
3727
3728 // 26.1.10 Reflect.isExtensible (target)
3729 define(
3730 Reflect, 'isExtensible',
3731 Object.isExtensible);
3732
3733 // 26.1.11 Reflect.ownKeys ( target )
3734 define(
3735 Reflect, 'ownKeys',
3736 function ownKeys(target) {
3737 var obj = ToObject(target);
3738 return Object.getOwnPropertyNames(obj);
3739 });
3740
3741 // 26.1.12 Reflect.preventExtensions ( target )
3742 define(
3743 Reflect, 'preventExtensions',
3744 function preventExtensions(target) {
3745 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
3746 });
3747
3748 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
3749 define(
3750 Reflect, 'set',
3751 function set(target, name, value, receiver) {
3752 target = ToObject(target);
3753 name = String(name);
3754 receiver = (receiver === undefined) ? target : ToObject(receiver);
3755 var desc = getPropertyDescriptor(target, name);
3756 try {
3757 if (desc && 'set' in desc)
3758 Function.prototype.call.call(desc['set'], receiver, value);
3759 else
3760 target[name] = value;
3761 return true;
3762 } catch (_) {
3763 return false;
3764 }
3765 });
3766
3767 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
3768 define(
3769 Reflect, 'setPrototypeOf',
3770 function setPrototypeOf(target, proto) {
3771 try {
3772 target.__proto__ = proto;
3773 return Reflect.getPrototypeOf(target) === proto;
3774 } catch(_) {
3775 return false;
3776 }
3777 });
3778
3779 }());
3780
3781 // ---------------------------------------
3782 // 26.2 Proxy Objects
3783 // ---------------------------------------
3784
3785 // Not polyfillable.
3786
3787}(self));
3788
3789// This helper is defined outside the main scope so that the use of
3790// 'eval' does not taint the scope for minifiers.
3791function __cons(t, a) {
3792 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
3793}
diff --git a/tests.js b/tests.js
index a3c3f57..89f4ce3 100644
--- a/tests.js
+++ b/tests.js
@@ -4,7 +4,7 @@
4 4
5var page = require('webpage').create(); 5var page = require('webpage').create();
6var url = 'src/index.html'; 6var url = 'src/index.html';
7var testMaxTime = 10000; 7var testMaxTime = 20000;
8 8
9page.viewportSize = { 9page.viewportSize = {
10 width: 1024, 10 width: 1024,
@@ -607,6 +607,66 @@ page.open(url, function(status) {
607}); 607});
608}, 608},
609 609
610// Network can be set to ethereum
611function() {
612
613page.open(url, function(status) {
614
615 // set the phrase and coin
616 page.evaluate(function() {
617 $(".phrase").val("abandon abandon ability");
618 $(".phrase").trigger("input");
619 $(".network option[selected]").removeAttr("selected");
620 $(".network option[value=13]").prop("selected", true);
621 $(".network").trigger("change");
622 });
623 waitForGenerate(function() {
624 // check the address is generated correctly
625 // this value comes from
626 // https://www.myetherwallet.com/#view-wallet-info
627 // Unusual capitalization is due to checksum
628 var expected = "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772";
629 var actual = page.evaluate(function() {
630 return $(".address:first").text();
631 });
632 if (actual != expected) {
633 console.log("Ethereum address is incorrect");
634 console.log("Expected: " + expected);
635 console.log("Actual: " + actual);
636 fail();
637 }
638 // check the private key is correct
639 // this private key can be imported into
640 // https://www.myetherwallet.com/#view-wallet-info
641 // and it should correlate to the address above
642 var expected = "8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7";
643 var actual = page.evaluate(function() {
644 return $(".privkey:first").text();
645 });
646 if (actual != expected) {
647 console.log("Ethereum privkey is incorrect");
648 console.log("Expected: " + expected);
649 console.log("Actual: " + actual);
650 fail();
651 }
652 // check the public key is correct
653 // TODO
654 // don't have any third-party source to generate the expected value
655 //var expected = "?";
656 //var actual = page.evaluate(function() {
657 // return $(".pubkey:first").text();
658 //});
659 //if (actual != expected) {
660 // console.log("Ethereum privkey is incorrect");
661 // console.log("Expected: " + expected);
662 // console.log("Actual: " + actual);
663 // fail();
664 //}
665 next();
666 });
667});
668},
669
610// BIP39 seed is set from phrase 670// BIP39 seed is set from phrase
611function() { 671function() {
612page.open(url, function(status) { 672page.open(url, function(status) {
@@ -2268,7 +2328,6 @@ page.open(url, function(status) {
2268 // use entropy 2328 // use entropy
2269 page.evaluate(function() { 2329 page.evaluate(function() {
2270 $(".use-entropy").prop("checked", true).trigger("change"); 2330 $(".use-entropy").prop("checked", true).trigger("change");
2271 $(".mnemonic-length").val("raw");
2272 $(".entropy").val("00000000 00000000 00000000 00000000").trigger("input"); 2331 $(".entropy").val("00000000 00000000 00000000 00000000").trigger("input");
2273 }); 2332 });
2274 // check the mnemonic is set and address is correct 2333 // check the mnemonic is set and address is correct
@@ -2804,7 +2863,6 @@ page.open(url, function(status) {
2804 // use entropy 2863 // use entropy
2805 page.evaluate(function() { 2864 page.evaluate(function() {
2806 $(".use-entropy").prop("checked", true).trigger("change"); 2865 $(".use-entropy").prop("checked", true).trigger("change");
2807 $(".mnemonic-length").val("raw");
2808 }); 2866 });
2809 var nextTest = function runNextTest(i) { 2867 var nextTest = function runNextTest(i) {
2810 function getFeedbackError(expected, actual) { 2868 function getFeedbackError(expected, actual) {
@@ -2886,7 +2944,6 @@ page.open(url, function(status) {
2886 // use entropy 2944 // use entropy
2887 page.evaluate(function() { 2945 page.evaluate(function() {
2888 $(".use-entropy").prop("checked", true).trigger("change"); 2946 $(".use-entropy").prop("checked", true).trigger("change");
2889 $(".mnemonic-length").val("raw");
2890 var entropy = "00000000 00000000 00000000 00000000"; 2947 var entropy = "00000000 00000000 00000000 00000000";
2891 entropy += "11111111 11111111 11111111 1111"; // Missing last byte 2948 entropy += "11111111 11111111 11111111 1111"; // Missing last byte
2892 $(".entropy").val(entropy).trigger("input"); 2949 $(".entropy").val(entropy).trigger("input");
@@ -2913,7 +2970,6 @@ page.open(url, function(status) {
2913 // use entropy 2970 // use entropy
2914 page.evaluate(function() { 2971 page.evaluate(function() {
2915 $(".use-entropy").prop("checked", true).trigger("change"); 2972 $(".use-entropy").prop("checked", true).trigger("change");
2916 $(".mnemonic-length").val("raw");
2917 var entropy = ""; 2973 var entropy = "";
2918 // Generate a very long entropy string 2974 // Generate a very long entropy string
2919 for (var i=0; i<33; i++) { 2975 for (var i=0; i<33; i++) {
@@ -2947,7 +3003,6 @@ page.open(url, function(status) {
2947 // use entropy 3003 // use entropy
2948 page.evaluate(function() { 3004 page.evaluate(function() {
2949 $(".use-entropy").prop("checked", true).trigger("change"); 3005 $(".use-entropy").prop("checked", true).trigger("change");
2950 $(".mnemonic-length").val("raw");
2951 var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543"; 3006 var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543";
2952 $(".entropy").val(entropy).trigger("input"); 3007 $(".entropy").val(entropy).trigger("input");
2953 }); 3008 });
@@ -3039,7 +3094,6 @@ page.open(url, function(status) {
3039 // use entropy 3094 // use entropy
3040 page.evaluate(function() { 3095 page.evaluate(function() {
3041 $(".use-entropy").prop("checked", true).trigger("change"); 3096 $(".use-entropy").prop("checked", true).trigger("change");
3042 $(".mnemonic-length").val("raw");
3043 $(".entropy").val("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-6C TS TH 4H KC 5H 2H AH 2C 8D 3H 5D").trigger("input"); 3097 $(".entropy").val("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-6C TS TH 4H KC 5H 2H AH 2C 8D 3H 5D").trigger("input");
3044 }); 3098 });
3045 // get the mnemonic 3099 // get the mnemonic
@@ -3345,6 +3399,7 @@ page.open(url, function(status) {
3345 // use entropy 3399 // use entropy
3346 page.evaluate(function() { 3400 page.evaluate(function() {
3347 $(".use-entropy").prop("checked", true).trigger("change"); 3401 $(".use-entropy").prop("checked", true).trigger("change");
3402 $(".mnemonic-length").val("15");
3348 $(".entropy").val("1111").trigger("input"); 3403 $(".entropy").val("1111").trigger("input");
3349 }); 3404 });
3350 waitForGenerate(function() { 3405 waitForGenerate(function() {