{"ast":null,"code":"(function (module, exports) {\n 'use strict'; // Utils\n\n function assert(val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n } // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n\n\n function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n\n var TempCtor = function () {};\n\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n } // BN\n\n\n function BN(number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0; // Reduction context\n\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n var Buffer;\n\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {}\n\n BN.isBN = function isBN(num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max(left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min(left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init(number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n\n assert(base === (base | 0) && base >= 2 && base <= 36);\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber(number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n\n this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1];\n this.length = 3;\n }\n\n if (endian !== 'le') return; // Reverse the bytes\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray(number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | number[i - 1] << 8 | number[i - 2] << 16;\n this.words[j] |= w << off & 0x3ffffff;\n this.words[j + 1] = w >>> 26 - off & 0x3ffffff;\n off += 24;\n\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | number[i + 1] << 8 | number[i + 2] << 16;\n this.words[j] |= w << off & 0x3ffffff;\n this.words[j + 1] = w >>> 26 - off & 0x3ffffff;\n off += 24;\n\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n\n return this.strip();\n };\n\n function parseHex4Bits(string, index) {\n var c = string.charCodeAt(index); // 'A' - 'F'\n\n if (c >= 65 && c <= 70) {\n return c - 55; // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87; // '0' - '9'\n } else {\n return c - 48 & 0xf;\n }\n }\n\n function parseHexByte(string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex(number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n } // 24-bits chunks\n\n\n var off = 0;\n var j = 0;\n var w;\n\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase(str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n r *= mul; // 'a'\n\n if (c >= 49) {\n r += c - 49 + 0xa; // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa; // '0' - '9'\n } else {\n r += c;\n }\n }\n\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase(number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1; // Find length of limb in base\n\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n\n limbLen--;\n limbPow = limbPow / base | 0;\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n var word = 0;\n\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n this.imuln(limbPow);\n\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy(dest) {\n dest.words = new Array(this.length);\n\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone() {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand(size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n\n return this;\n }; // Remove leading `0` from `this`\n\n\n BN.prototype.strip = function strip() {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign() {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n\n return this;\n };\n\n BN.prototype.inspect = function inspect() {\n return (this.red ? '';\n };\n /*\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n */\n\n\n var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000'];\n var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5];\n var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176];\n\n BN.prototype.toString = function toString(base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n var out;\n\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = ((w << off | carry) & 0xffffff).toString(16);\n carry = w >>> 24 - off & 0xffffff;\n\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n\n off += 2;\n\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n\n if (this.negative !== 0) {\n out = '-' + out;\n }\n\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize);\n\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n\n if (this.isZero()) {\n out = '0' + out;\n }\n\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n\n if (this.negative !== 0) {\n out = '-' + out;\n }\n\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber() {\n var ret = this.words[0];\n\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + this.words[1] * 0x4000000;\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n\n return this.negative !== 0 ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON() {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer(endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray(endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n var b, i;\n var q = this.clone();\n\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits(w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits(w) {\n var t = w;\n var r = 0;\n\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits(w) {\n // Short-cut\n if (w === 0) return 26;\n var t = w;\n var r = 0;\n\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n\n if ((t & 0x1) === 0) {\n r++;\n }\n\n return r;\n }; // Return number of used bits in a BN\n\n\n BN.prototype.bitLength = function bitLength() {\n var w = this.words[this.length - 1];\n\n var hi = this._countBits(w);\n\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray(num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = bit / 26 | 0;\n var wbit = bit % 26;\n w[bit] = (num.words[off] & 1 << wbit) >>> wbit;\n }\n\n return w;\n } // Number of trailing zero bits\n\n\n BN.prototype.zeroBits = function zeroBits() {\n if (this.isZero()) return 0;\n var r = 0;\n\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n\n r += b;\n if (b !== 26) break;\n }\n\n return r;\n };\n\n BN.prototype.byteLength = function byteLength() {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos(width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos(width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg() {\n return this.negative !== 0;\n }; // Return negative clone of `this`\n\n\n BN.prototype.neg = function neg() {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg() {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n }; // Or `num` with `this` in-place\n\n\n BN.prototype.iuor = function iuor(num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior(num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n }; // Or `num` with `this`\n\n\n BN.prototype.or = function or(num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor(num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n }; // And `num` with `this` in-place\n\n\n BN.prototype.iuand = function iuand(num) {\n // b = min-length(num, this)\n var b;\n\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n return this.strip();\n };\n\n BN.prototype.iand = function iand(num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n }; // And `num` with `this`\n\n\n BN.prototype.and = function and(num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand(num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n }; // Xor `num` with `this` in-place\n\n\n BN.prototype.iuxor = function iuxor(num) {\n // a.length > b.length\n var a;\n var b;\n\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor(num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n }; // Xor `num` with `this`\n\n\n BN.prototype.xor = function xor(num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor(num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n }; // Not ``this`` with ``width`` bitwidth\n\n\n BN.prototype.inotn = function inotn(width) {\n assert(typeof width === 'number' && width >= 0);\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26; // Extend the buffer with leading zeroes\n\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n } // Handle complete words\n\n\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n } // Handle the residue\n\n\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft;\n } // And remove leading zeroes\n\n\n return this.strip();\n };\n\n BN.prototype.notn = function notn(width) {\n return this.clone().inotn(width);\n }; // Set `bit` of `this`\n\n\n BN.prototype.setn = function setn(bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n var off = bit / 26 | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | 1 << wbit;\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n }; // Add `num` to `this` in-place\n\n\n BN.prototype.iadd = function iadd(num) {\n var r; // negative + positive\n\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign(); // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n } // a.length > b.length\n\n\n var a, b;\n\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++; // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n }; // Add `num` to `this`\n\n\n BN.prototype.add = function add(num) {\n var res;\n\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n return num.clone().iadd(this);\n }; // Subtract `num` from `this` in-place\n\n\n BN.prototype.isub = function isub(num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign(); // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n } // At this point both numbers are positive\n\n\n var cmp = this.cmp(num); // Optimization - zeroify\n\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n } // a > b\n\n\n var a, b;\n\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n } // Copy rest of the words\n\n\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n }; // Subtract `num` from `this`\n\n\n BN.prototype.sub = function sub(num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo(self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = self.length + num.length | 0;\n out.length = len;\n len = len - 1 | 0; // Peel one iteration (compiler can't do it, because of code complexity)\n\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n var lo = r & 0x3ffffff;\n var carry = r / 0x4000000 | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += r / 0x4000000 | 0;\n rword = r & 0x3ffffff;\n }\n\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n } // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n\n\n var comb10MulTo = function comb10MulTo(self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = mid + Math.imul(ah0, bl0) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = mid + Math.imul(ah1, bl0) | 0;\n hi = Math.imul(ah1, bh0);\n lo = lo + Math.imul(al0, bl1) | 0;\n mid = mid + Math.imul(al0, bh1) | 0;\n mid = mid + Math.imul(ah0, bl1) | 0;\n hi = hi + Math.imul(ah0, bh1) | 0;\n var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = mid + Math.imul(ah2, bl0) | 0;\n hi = Math.imul(ah2, bh0);\n lo = lo + Math.imul(al1, bl1) | 0;\n mid = mid + Math.imul(al1, bh1) | 0;\n mid = mid + Math.imul(ah1, bl1) | 0;\n hi = hi + Math.imul(ah1, bh1) | 0;\n lo = lo + Math.imul(al0, bl2) | 0;\n mid = mid + Math.imul(al0, bh2) | 0;\n mid = mid + Math.imul(ah0, bl2) | 0;\n hi = hi + Math.imul(ah0, bh2) | 0;\n var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = mid + Math.imul(ah3, bl0) | 0;\n hi = Math.imul(ah3, bh0);\n lo = lo + Math.imul(al2, bl1) | 0;\n mid = mid + Math.imul(al2, bh1) | 0;\n mid = mid + Math.imul(ah2, bl1) | 0;\n hi = hi + Math.imul(ah2, bh1) | 0;\n lo = lo + Math.imul(al1, bl2) | 0;\n mid = mid + Math.imul(al1, bh2) | 0;\n mid = mid + Math.imul(ah1, bl2) | 0;\n hi = hi + Math.imul(ah1, bh2) | 0;\n lo = lo + Math.imul(al0, bl3) | 0;\n mid = mid + Math.imul(al0, bh3) | 0;\n mid = mid + Math.imul(ah0, bl3) | 0;\n hi = hi + Math.imul(ah0, bh3) | 0;\n var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = mid + Math.imul(ah4, bl0) | 0;\n hi = Math.imul(ah4, bh0);\n lo = lo + Math.imul(al3, bl1) | 0;\n mid = mid + Math.imul(al3, bh1) | 0;\n mid = mid + Math.imul(ah3, bl1) | 0;\n hi = hi + Math.imul(ah3, bh1) | 0;\n lo = lo + Math.imul(al2, bl2) | 0;\n mid = mid + Math.imul(al2, bh2) | 0;\n mid = mid + Math.imul(ah2, bl2) | 0;\n hi = hi + Math.imul(ah2, bh2) | 0;\n lo = lo + Math.imul(al1, bl3) | 0;\n mid = mid + Math.imul(al1, bh3) | 0;\n mid = mid + Math.imul(ah1, bl3) | 0;\n hi = hi + Math.imul(ah1, bh3) | 0;\n lo = lo + Math.imul(al0, bl4) | 0;\n mid = mid + Math.imul(al0, bh4) | 0;\n mid = mid + Math.imul(ah0, bl4) | 0;\n hi = hi + Math.imul(ah0, bh4) | 0;\n var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = mid + Math.imul(ah5, bl0) | 0;\n hi = Math.imul(ah5, bh0);\n lo = lo + Math.imul(al4, bl1) | 0;\n mid = mid + Math.imul(al4, bh1) | 0;\n mid = mid + Math.imul(ah4, bl1) | 0;\n hi = hi + Math.imul(ah4, bh1) | 0;\n lo = lo + Math.imul(al3, bl2) | 0;\n mid = mid + Math.imul(al3, bh2) | 0;\n mid = mid + Math.imul(ah3, bl2) | 0;\n hi = hi + Math.imul(ah3, bh2) | 0;\n lo = lo + Math.imul(al2, bl3) | 0;\n mid = mid + Math.imul(al2, bh3) | 0;\n mid = mid + Math.imul(ah2, bl3) | 0;\n hi = hi + Math.imul(ah2, bh3) | 0;\n lo = lo + Math.imul(al1, bl4) | 0;\n mid = mid + Math.imul(al1, bh4) | 0;\n mid = mid + Math.imul(ah1, bl4) | 0;\n hi = hi + Math.imul(ah1, bh4) | 0;\n lo = lo + Math.imul(al0, bl5) | 0;\n mid = mid + Math.imul(al0, bh5) | 0;\n mid = mid + Math.imul(ah0, bl5) | 0;\n hi = hi + Math.imul(ah0, bh5) | 0;\n var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = mid + Math.imul(ah6, bl0) | 0;\n hi = Math.imul(ah6, bh0);\n lo = lo + Math.imul(al5, bl1) | 0;\n mid = mid + Math.imul(al5, bh1) | 0;\n mid = mid + Math.imul(ah5, bl1) | 0;\n hi = hi + Math.imul(ah5, bh1) | 0;\n lo = lo + Math.imul(al4, bl2) | 0;\n mid = mid + Math.imul(al4, bh2) | 0;\n mid = mid + Math.imul(ah4, bl2) | 0;\n hi = hi + Math.imul(ah4, bh2) | 0;\n lo = lo + Math.imul(al3, bl3) | 0;\n mid = mid + Math.imul(al3, bh3) | 0;\n mid = mid + Math.imul(ah3, bl3) | 0;\n hi = hi + Math.imul(ah3, bh3) | 0;\n lo = lo + Math.imul(al2, bl4) | 0;\n mid = mid + Math.imul(al2, bh4) | 0;\n mid = mid + Math.imul(ah2, bl4) | 0;\n hi = hi + Math.imul(ah2, bh4) | 0;\n lo = lo + Math.imul(al1, bl5) | 0;\n mid = mid + Math.imul(al1, bh5) | 0;\n mid = mid + Math.imul(ah1, bl5) | 0;\n hi = hi + Math.imul(ah1, bh5) | 0;\n lo = lo + Math.imul(al0, bl6) | 0;\n mid = mid + Math.imul(al0, bh6) | 0;\n mid = mid + Math.imul(ah0, bl6) | 0;\n hi = hi + Math.imul(ah0, bh6) | 0;\n var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = mid + Math.imul(ah7, bl0) | 0;\n hi = Math.imul(ah7, bh0);\n lo = lo + Math.imul(al6, bl1) | 0;\n mid = mid + Math.imul(al6, bh1) | 0;\n mid = mid + Math.imul(ah6, bl1) | 0;\n hi = hi + Math.imul(ah6, bh1) | 0;\n lo = lo + Math.imul(al5, bl2) | 0;\n mid = mid + Math.imul(al5, bh2) | 0;\n mid = mid + Math.imul(ah5, bl2) | 0;\n hi = hi + Math.imul(ah5, bh2) | 0;\n lo = lo + Math.imul(al4, bl3) | 0;\n mid = mid + Math.imul(al4, bh3) | 0;\n mid = mid + Math.imul(ah4, bl3) | 0;\n hi = hi + Math.imul(ah4, bh3) | 0;\n lo = lo + Math.imul(al3, bl4) | 0;\n mid = mid + Math.imul(al3, bh4) | 0;\n mid = mid + Math.imul(ah3, bl4) | 0;\n hi = hi + Math.imul(ah3, bh4) | 0;\n lo = lo + Math.imul(al2, bl5) | 0;\n mid = mid + Math.imul(al2, bh5) | 0;\n mid = mid + Math.imul(ah2, bl5) | 0;\n hi = hi + Math.imul(ah2, bh5) | 0;\n lo = lo + Math.imul(al1, bl6) | 0;\n mid = mid + Math.imul(al1, bh6) | 0;\n mid = mid + Math.imul(ah1, bl6) | 0;\n hi = hi + Math.imul(ah1, bh6) | 0;\n lo = lo + Math.imul(al0, bl7) | 0;\n mid = mid + Math.imul(al0, bh7) | 0;\n mid = mid + Math.imul(ah0, bl7) | 0;\n hi = hi + Math.imul(ah0, bh7) | 0;\n var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = mid + Math.imul(ah8, bl0) | 0;\n hi = Math.imul(ah8, bh0);\n lo = lo + Math.imul(al7, bl1) | 0;\n mid = mid + Math.imul(al7, bh1) | 0;\n mid = mid + Math.imul(ah7, bl1) | 0;\n hi = hi + Math.imul(ah7, bh1) | 0;\n lo = lo + Math.imul(al6, bl2) | 0;\n mid = mid + Math.imul(al6, bh2) | 0;\n mid = mid + Math.imul(ah6, bl2) | 0;\n hi = hi + Math.imul(ah6, bh2) | 0;\n lo = lo + Math.imul(al5, bl3) | 0;\n mid = mid + Math.imul(al5, bh3) | 0;\n mid = mid + Math.imul(ah5, bl3) | 0;\n hi = hi + Math.imul(ah5, bh3) | 0;\n lo = lo + Math.imul(al4, bl4) | 0;\n mid = mid + Math.imul(al4, bh4) | 0;\n mid = mid + Math.imul(ah4, bl4) | 0;\n hi = hi + Math.imul(ah4, bh4) | 0;\n lo = lo + Math.imul(al3, bl5) | 0;\n mid = mid + Math.imul(al3, bh5) | 0;\n mid = mid + Math.imul(ah3, bl5) | 0;\n hi = hi + Math.imul(ah3, bh5) | 0;\n lo = lo + Math.imul(al2, bl6) | 0;\n mid = mid + Math.imul(al2, bh6) | 0;\n mid = mid + Math.imul(ah2, bl6) | 0;\n hi = hi + Math.imul(ah2, bh6) | 0;\n lo = lo + Math.imul(al1, bl7) | 0;\n mid = mid + Math.imul(al1, bh7) | 0;\n mid = mid + Math.imul(ah1, bl7) | 0;\n hi = hi + Math.imul(ah1, bh7) | 0;\n lo = lo + Math.imul(al0, bl8) | 0;\n mid = mid + Math.imul(al0, bh8) | 0;\n mid = mid + Math.imul(ah0, bl8) | 0;\n hi = hi + Math.imul(ah0, bh8) | 0;\n var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = mid + Math.imul(ah9, bl0) | 0;\n hi = Math.imul(ah9, bh0);\n lo = lo + Math.imul(al8, bl1) | 0;\n mid = mid + Math.imul(al8, bh1) | 0;\n mid = mid + Math.imul(ah8, bl1) | 0;\n hi = hi + Math.imul(ah8, bh1) | 0;\n lo = lo + Math.imul(al7, bl2) | 0;\n mid = mid + Math.imul(al7, bh2) | 0;\n mid = mid + Math.imul(ah7, bl2) | 0;\n hi = hi + Math.imul(ah7, bh2) | 0;\n lo = lo + Math.imul(al6, bl3) | 0;\n mid = mid + Math.imul(al6, bh3) | 0;\n mid = mid + Math.imul(ah6, bl3) | 0;\n hi = hi + Math.imul(ah6, bh3) | 0;\n lo = lo + Math.imul(al5, bl4) | 0;\n mid = mid + Math.imul(al5, bh4) | 0;\n mid = mid + Math.imul(ah5, bl4) | 0;\n hi = hi + Math.imul(ah5, bh4) | 0;\n lo = lo + Math.imul(al4, bl5) | 0;\n mid = mid + Math.imul(al4, bh5) | 0;\n mid = mid + Math.imul(ah4, bl5) | 0;\n hi = hi + Math.imul(ah4, bh5) | 0;\n lo = lo + Math.imul(al3, bl6) | 0;\n mid = mid + Math.imul(al3, bh6) | 0;\n mid = mid + Math.imul(ah3, bl6) | 0;\n hi = hi + Math.imul(ah3, bh6) | 0;\n lo = lo + Math.imul(al2, bl7) | 0;\n mid = mid + Math.imul(al2, bh7) | 0;\n mid = mid + Math.imul(ah2, bl7) | 0;\n hi = hi + Math.imul(ah2, bh7) | 0;\n lo = lo + Math.imul(al1, bl8) | 0;\n mid = mid + Math.imul(al1, bh8) | 0;\n mid = mid + Math.imul(ah1, bl8) | 0;\n hi = hi + Math.imul(ah1, bh8) | 0;\n lo = lo + Math.imul(al0, bl9) | 0;\n mid = mid + Math.imul(al0, bh9) | 0;\n mid = mid + Math.imul(ah0, bl9) | 0;\n hi = hi + Math.imul(ah0, bh9) | 0;\n var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = mid + Math.imul(ah9, bl1) | 0;\n hi = Math.imul(ah9, bh1);\n lo = lo + Math.imul(al8, bl2) | 0;\n mid = mid + Math.imul(al8, bh2) | 0;\n mid = mid + Math.imul(ah8, bl2) | 0;\n hi = hi + Math.imul(ah8, bh2) | 0;\n lo = lo + Math.imul(al7, bl3) | 0;\n mid = mid + Math.imul(al7, bh3) | 0;\n mid = mid + Math.imul(ah7, bl3) | 0;\n hi = hi + Math.imul(ah7, bh3) | 0;\n lo = lo + Math.imul(al6, bl4) | 0;\n mid = mid + Math.imul(al6, bh4) | 0;\n mid = mid + Math.imul(ah6, bl4) | 0;\n hi = hi + Math.imul(ah6, bh4) | 0;\n lo = lo + Math.imul(al5, bl5) | 0;\n mid = mid + Math.imul(al5, bh5) | 0;\n mid = mid + Math.imul(ah5, bl5) | 0;\n hi = hi + Math.imul(ah5, bh5) | 0;\n lo = lo + Math.imul(al4, bl6) | 0;\n mid = mid + Math.imul(al4, bh6) | 0;\n mid = mid + Math.imul(ah4, bl6) | 0;\n hi = hi + Math.imul(ah4, bh6) | 0;\n lo = lo + Math.imul(al3, bl7) | 0;\n mid = mid + Math.imul(al3, bh7) | 0;\n mid = mid + Math.imul(ah3, bl7) | 0;\n hi = hi + Math.imul(ah3, bh7) | 0;\n lo = lo + Math.imul(al2, bl8) | 0;\n mid = mid + Math.imul(al2, bh8) | 0;\n mid = mid + Math.imul(ah2, bl8) | 0;\n hi = hi + Math.imul(ah2, bh8) | 0;\n lo = lo + Math.imul(al1, bl9) | 0;\n mid = mid + Math.imul(al1, bh9) | 0;\n mid = mid + Math.imul(ah1, bl9) | 0;\n hi = hi + Math.imul(ah1, bh9) | 0;\n var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = mid + Math.imul(ah9, bl2) | 0;\n hi = Math.imul(ah9, bh2);\n lo = lo + Math.imul(al8, bl3) | 0;\n mid = mid + Math.imul(al8, bh3) | 0;\n mid = mid + Math.imul(ah8, bl3) | 0;\n hi = hi + Math.imul(ah8, bh3) | 0;\n lo = lo + Math.imul(al7, bl4) | 0;\n mid = mid + Math.imul(al7, bh4) | 0;\n mid = mid + Math.imul(ah7, bl4) | 0;\n hi = hi + Math.imul(ah7, bh4) | 0;\n lo = lo + Math.imul(al6, bl5) | 0;\n mid = mid + Math.imul(al6, bh5) | 0;\n mid = mid + Math.imul(ah6, bl5) | 0;\n hi = hi + Math.imul(ah6, bh5) | 0;\n lo = lo + Math.imul(al5, bl6) | 0;\n mid = mid + Math.imul(al5, bh6) | 0;\n mid = mid + Math.imul(ah5, bl6) | 0;\n hi = hi + Math.imul(ah5, bh6) | 0;\n lo = lo + Math.imul(al4, bl7) | 0;\n mid = mid + Math.imul(al4, bh7) | 0;\n mid = mid + Math.imul(ah4, bl7) | 0;\n hi = hi + Math.imul(ah4, bh7) | 0;\n lo = lo + Math.imul(al3, bl8) | 0;\n mid = mid + Math.imul(al3, bh8) | 0;\n mid = mid + Math.imul(ah3, bl8) | 0;\n hi = hi + Math.imul(ah3, bh8) | 0;\n lo = lo + Math.imul(al2, bl9) | 0;\n mid = mid + Math.imul(al2, bh9) | 0;\n mid = mid + Math.imul(ah2, bl9) | 0;\n hi = hi + Math.imul(ah2, bh9) | 0;\n var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = mid + Math.imul(ah9, bl3) | 0;\n hi = Math.imul(ah9, bh3);\n lo = lo + Math.imul(al8, bl4) | 0;\n mid = mid + Math.imul(al8, bh4) | 0;\n mid = mid + Math.imul(ah8, bl4) | 0;\n hi = hi + Math.imul(ah8, bh4) | 0;\n lo = lo + Math.imul(al7, bl5) | 0;\n mid = mid + Math.imul(al7, bh5) | 0;\n mid = mid + Math.imul(ah7, bl5) | 0;\n hi = hi + Math.imul(ah7, bh5) | 0;\n lo = lo + Math.imul(al6, bl6) | 0;\n mid = mid + Math.imul(al6, bh6) | 0;\n mid = mid + Math.imul(ah6, bl6) | 0;\n hi = hi + Math.imul(ah6, bh6) | 0;\n lo = lo + Math.imul(al5, bl7) | 0;\n mid = mid + Math.imul(al5, bh7) | 0;\n mid = mid + Math.imul(ah5, bl7) | 0;\n hi = hi + Math.imul(ah5, bh7) | 0;\n lo = lo + Math.imul(al4, bl8) | 0;\n mid = mid + Math.imul(al4, bh8) | 0;\n mid = mid + Math.imul(ah4, bl8) | 0;\n hi = hi + Math.imul(ah4, bh8) | 0;\n lo = lo + Math.imul(al3, bl9) | 0;\n mid = mid + Math.imul(al3, bh9) | 0;\n mid = mid + Math.imul(ah3, bl9) | 0;\n hi = hi + Math.imul(ah3, bh9) | 0;\n var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = mid + Math.imul(ah9, bl4) | 0;\n hi = Math.imul(ah9, bh4);\n lo = lo + Math.imul(al8, bl5) | 0;\n mid = mid + Math.imul(al8, bh5) | 0;\n mid = mid + Math.imul(ah8, bl5) | 0;\n hi = hi + Math.imul(ah8, bh5) | 0;\n lo = lo + Math.imul(al7, bl6) | 0;\n mid = mid + Math.imul(al7, bh6) | 0;\n mid = mid + Math.imul(ah7, bl6) | 0;\n hi = hi + Math.imul(ah7, bh6) | 0;\n lo = lo + Math.imul(al6, bl7) | 0;\n mid = mid + Math.imul(al6, bh7) | 0;\n mid = mid + Math.imul(ah6, bl7) | 0;\n hi = hi + Math.imul(ah6, bh7) | 0;\n lo = lo + Math.imul(al5, bl8) | 0;\n mid = mid + Math.imul(al5, bh8) | 0;\n mid = mid + Math.imul(ah5, bl8) | 0;\n hi = hi + Math.imul(ah5, bh8) | 0;\n lo = lo + Math.imul(al4, bl9) | 0;\n mid = mid + Math.imul(al4, bh9) | 0;\n mid = mid + Math.imul(ah4, bl9) | 0;\n hi = hi + Math.imul(ah4, bh9) | 0;\n var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = mid + Math.imul(ah9, bl5) | 0;\n hi = Math.imul(ah9, bh5);\n lo = lo + Math.imul(al8, bl6) | 0;\n mid = mid + Math.imul(al8, bh6) | 0;\n mid = mid + Math.imul(ah8, bl6) | 0;\n hi = hi + Math.imul(ah8, bh6) | 0;\n lo = lo + Math.imul(al7, bl7) | 0;\n mid = mid + Math.imul(al7, bh7) | 0;\n mid = mid + Math.imul(ah7, bl7) | 0;\n hi = hi + Math.imul(ah7, bh7) | 0;\n lo = lo + Math.imul(al6, bl8) | 0;\n mid = mid + Math.imul(al6, bh8) | 0;\n mid = mid + Math.imul(ah6, bl8) | 0;\n hi = hi + Math.imul(ah6, bh8) | 0;\n lo = lo + Math.imul(al5, bl9) | 0;\n mid = mid + Math.imul(al5, bh9) | 0;\n mid = mid + Math.imul(ah5, bl9) | 0;\n hi = hi + Math.imul(ah5, bh9) | 0;\n var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = mid + Math.imul(ah9, bl6) | 0;\n hi = Math.imul(ah9, bh6);\n lo = lo + Math.imul(al8, bl7) | 0;\n mid = mid + Math.imul(al8, bh7) | 0;\n mid = mid + Math.imul(ah8, bl7) | 0;\n hi = hi + Math.imul(ah8, bh7) | 0;\n lo = lo + Math.imul(al7, bl8) | 0;\n mid = mid + Math.imul(al7, bh8) | 0;\n mid = mid + Math.imul(ah7, bl8) | 0;\n hi = hi + Math.imul(ah7, bh8) | 0;\n lo = lo + Math.imul(al6, bl9) | 0;\n mid = mid + Math.imul(al6, bh9) | 0;\n mid = mid + Math.imul(ah6, bl9) | 0;\n hi = hi + Math.imul(ah6, bh9) | 0;\n var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = mid + Math.imul(ah9, bl7) | 0;\n hi = Math.imul(ah9, bh7);\n lo = lo + Math.imul(al8, bl8) | 0;\n mid = mid + Math.imul(al8, bh8) | 0;\n mid = mid + Math.imul(ah8, bl8) | 0;\n hi = hi + Math.imul(ah8, bh8) | 0;\n lo = lo + Math.imul(al7, bl9) | 0;\n mid = mid + Math.imul(al7, bh9) | 0;\n mid = mid + Math.imul(ah7, bl9) | 0;\n hi = hi + Math.imul(ah7, bh9) | 0;\n var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = mid + Math.imul(ah9, bl8) | 0;\n hi = Math.imul(ah9, bh8);\n lo = lo + Math.imul(al8, bl9) | 0;\n mid = mid + Math.imul(al8, bh9) | 0;\n mid = mid + Math.imul(ah8, bl9) | 0;\n hi = hi + Math.imul(ah8, bh9) | 0;\n var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = mid + Math.imul(ah9, bl9) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n\n return out;\n }; // Polyfill comb\n\n\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo(self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n var carry = 0;\n var hncarry = 0;\n\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n var lo = r & 0x3ffffff;\n ncarry = ncarry + (r / 0x4000000 | 0) | 0;\n lo = lo + rword | 0;\n rword = lo & 0x3ffffff;\n ncarry = ncarry + (lo >>> 26) | 0;\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo(self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo(num, out) {\n var res;\n var len = this.length + num.length;\n\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n }; // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n\n function FFTM(x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT(N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n }; // Returns binary-reversed representation of `x`\n\n\n FFTM.prototype.revBin = function revBin(x, l, N) {\n if (x === 0 || x === N - 1) return x;\n var rb = 0;\n\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << l - i - 1;\n x >>= 1;\n }\n\n return rb;\n }; // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n\n\n FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n var rx = rtwdf_ * ro - itwdf_ * io;\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n /* jshint maxdepth : false */\n\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b(n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate(rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n t = iws[i];\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b(ws, N) {\n var carry = 0;\n\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry;\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) {\n var carry = 0;\n\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n rws[2 * i] = carry & 0x1fff;\n carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff;\n carry = carry >>> 13;\n } // Pad with zeroes\n\n\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub(N) {\n var ph = new Array(N);\n\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp(x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n var rmws = out.words;\n rmws.length = N;\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n }; // Multiply `this` by `num`\n\n\n BN.prototype.mul = function mul(num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n }; // Multiply employing FFT\n\n\n BN.prototype.mulf = function mulf(num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n }; // In-place Multiplication\n\n\n BN.prototype.imul = function imul(num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln(num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000); // Carry\n\n var carry = 0;\n\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += w / 0x4000000 | 0; // NOTE: lo is 27bit maximum\n\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln(num) {\n return this.clone().imuln(num);\n }; // `this` * `this`\n\n\n BN.prototype.sqr = function sqr() {\n return this.mul(this);\n }; // `this` * `this` in-place\n\n\n BN.prototype.isqr = function isqr() {\n return this.imul(this.clone());\n }; // Math.pow(`this`, `num`)\n\n\n BN.prototype.pow = function pow(num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1); // Skip leading zeroes\n\n var res = this;\n\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n res = res.mul(q);\n }\n }\n\n return res;\n }; // Shift-left in-place\n\n\n BN.prototype.iushln = function iushln(bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = 0x3ffffff >>> 26 - r << 26 - r;\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = (this.words[i] | 0) - newCarry << r;\n this.words[i] = c | carry;\n carry = newCarry >>> 26 - r;\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln(bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n }; // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n\n\n BN.prototype.iushrn = function iushrn(bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n\n if (hint) {\n h = (hint - hint % 26) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;\n var maskedWords = extended;\n h -= s;\n h = Math.max(0, h); // Extended mode, copy masked part\n\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n\n maskedWords.length = s;\n }\n\n if (s === 0) {// No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = carry << 26 - r | word >>> r;\n carry = word & mask;\n } // Push carried bits as a mask\n\n\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn(bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n }; // Shift-left\n\n\n BN.prototype.shln = function shln(bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln(bits) {\n return this.clone().iushln(bits);\n }; // Shift-right\n\n\n BN.prototype.shrn = function shrn(bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn(bits) {\n return this.clone().iushrn(bits);\n }; // Test if n bit is set\n\n\n BN.prototype.testn = function testn(bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r; // Fast case: bit is much higher than all existing words\n\n if (this.length <= s) return false; // Check bit and return\n\n var w = this.words[s];\n return !!(w & q);\n }; // Return only lowers bits of number (in-place)\n\n\n BN.prototype.imaskn = function imaskn(bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n }; // Return only lowers bits of number\n\n\n BN.prototype.maskn = function maskn(bits) {\n return this.clone().imaskn(bits);\n }; // Add plain number `num` to `this`\n\n\n BN.prototype.iaddn = function iaddn(num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num); // Possible sign change\n\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n } // Add without checks\n\n\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn(num) {\n this.words[0] += num; // Carry\n\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n\n this.length = Math.max(this.length, i + 1);\n return this;\n }; // Subtract plain number `num` from `this`\n\n\n BN.prototype.isubn = function isubn(num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn(num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn(num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs() {\n this.negative = 0;\n return this;\n };\n\n BN.prototype.abs = function abs() {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - (right / 0x4000000 | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip(); // Subtraction overflow\n\n assert(carry === -1);\n carry = 0;\n\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n\n this.negative = 1;\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv(num, mode) {\n var shift = this.length - num.length;\n var a = this.clone();\n var b = num; // Normalize\n\n var bhi = b.words[b.length - 1] | 0;\n\n var bhiBits = this._countBits(bhi);\n\n shift = 26 - bhiBits;\n\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n } // Initialize quotient\n\n\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n\n if (diff.negative === 0) {\n a = diff;\n\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n\n qj = Math.min(qj / bhi | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n\n a._ishlnsubmul(b, 1, j);\n\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n\n if (q) {\n q.words[j] = qj;\n }\n }\n\n if (q) {\n q.strip();\n }\n\n a.strip(); // Denormalize\n\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n }; // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n\n\n BN.prototype.divmod = function divmod(num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n } // Both numbers are positive at this point\n // Strip both numbers to approximate shift value\n\n\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n } // Very short reduction\n\n\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n }; // Find `this` / `num`\n\n\n BN.prototype.div = function div(num) {\n return this.divmod(num, 'div', false).div;\n }; // Find `this` % `num`\n\n\n BN.prototype.mod = function mod(num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod(num) {\n return this.divmod(num, 'mod', true).mod;\n }; // Find Round(`this` / `num`)\n\n\n BN.prototype.divRound = function divRound(num) {\n var dm = this.divmod(num); // Fast case - exact division\n\n if (dm.mod.isZero()) return dm.div;\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half); // Round down\n\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up\n\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn(num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n var acc = 0;\n\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n }; // In-place division by number\n\n\n BN.prototype.idivn = function idivn(num) {\n assert(num <= 0x3ffffff);\n var carry = 0;\n\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = w / num | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn(num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd(p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n } // A * x + B * y = x\n\n\n var A = new BN(1);\n var B = new BN(0); // C * x + D * y = y\n\n var C = new BN(0);\n var D = new BN(1);\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n\n if (i > 0) {\n x.iushrn(i);\n\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n\n if (j > 0) {\n y.iushrn(j);\n\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n }; // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n\n\n BN.prototype._invmp = function _invmp(p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n\n if (i > 0) {\n a.iushrn(i);\n\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n\n if (j > 0) {\n b.iushrn(j);\n\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd(num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0; // Remove common factor of two\n\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n }; // Invert number in the field F(num)\n\n\n BN.prototype.invm = function invm(num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven() {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd() {\n return (this.words[0] & 1) === 1;\n }; // And first word and num\n\n\n BN.prototype.andln = function andln(num) {\n return this.words[0] & num;\n }; // Increment at the bit position in-line\n\n\n BN.prototype.bincn = function bincn(bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r; // Fast case: bit is much higher than all existing words\n\n if (this.length <= s) {\n this._expand(s + 1);\n\n this.words[s] |= q;\n return this;\n } // Add bit and propagate, if needed\n\n\n var carry = q;\n\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.isZero = function isZero() {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn(num) {\n var negative = num < 0;\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n this.strip();\n var res;\n\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n\n if (this.negative !== 0) return -res | 0;\n return res;\n }; // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n\n\n BN.prototype.cmp = function cmp(num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n }; // Unsigned comparison\n\n\n BN.prototype.ucmp = function ucmp(num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n var res = 0;\n\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n if (a === b) continue;\n\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n\n break;\n }\n\n return res;\n };\n\n BN.prototype.gtn = function gtn(num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt(num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten(num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte(num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn(num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt(num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten(num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte(num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn(num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq(num) {\n return this.cmp(num) === 0;\n }; //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n\n\n BN.red = function red(num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed(ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed() {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed(ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed(ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd(num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd(num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub(num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub(num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl(num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul(num) {\n assert(this.red, 'redMul works only with red numbers');\n\n this.red._verify2(this, num);\n\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul(num) {\n assert(this.red, 'redMul works only with red numbers');\n\n this.red._verify2(this, num);\n\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr() {\n assert(this.red, 'redSqr works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr() {\n assert(this.red, 'redISqr works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.isqr(this);\n }; // Square root over p\n\n\n BN.prototype.redSqrt = function redSqrt() {\n assert(this.red, 'redSqrt works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm() {\n assert(this.red, 'redInvm works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.invm(this);\n }; // Return negative clone of `this` % `red modulo`\n\n\n BN.prototype.redNeg = function redNeg() {\n assert(this.red, 'redNeg works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow(num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n\n this.red._verify1(this);\n\n return this.red.pow(this, num);\n }; // Prime numbers with efficient reduction\n\n\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n }; // Pseudo-Mersenne prime\n\n function MPrime(name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp() {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce(num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split(input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK(num) {\n return num.imul(this.k);\n };\n\n function K256() {\n MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n\n inherits(K256, MPrime);\n\n K256.prototype.split = function split(input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n var outLen = Math.min(input.length, 9);\n\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n } // Shift by 9 limbs\n\n\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = (next & mask) << 4 | prev >>> 22;\n prev = next;\n }\n\n prev >>>= 22;\n input.words[i - 10] = prev;\n\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK(num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n\n var lo = 0;\n\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + (lo / 0x4000000 | 0);\n } // Fast length reduction\n\n\n if (num.words[num.length - 1] === 0) {\n num.length--;\n\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n\n return num;\n };\n\n function P224() {\n MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n\n inherits(P224, MPrime);\n\n function P192() {\n MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n\n inherits(P192, MPrime);\n\n function P25519() {\n // 2 ^ 255 - 19\n MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK(num) {\n // K = 0x13\n var carry = 0;\n\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n num.words[i] = lo;\n carry = hi;\n }\n\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n\n return num;\n }; // Exported mostly for testing purposes, use plain name instead\n\n\n BN._prime = function prime(name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n var prime;\n\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n\n primes[name] = prime;\n return prime;\n }; //\n // Base reduction engine\n //\n\n\n function Red(m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1(a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2(a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red, 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod(a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg(a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add(a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd(a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n\n return res;\n };\n\n Red.prototype.sub = function sub(a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub(a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n\n return res;\n };\n\n Red.prototype.shl = function shl(a, num) {\n this._verify1(a);\n\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul(a, b) {\n this._verify2(a, b);\n\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul(a, b) {\n this._verify2(a, b);\n\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr(a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr(a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt(a) {\n if (a.isZero()) return a.clone();\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1); // Fast case\n\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n } // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n\n\n var q = this.m.subn(1);\n var s = 0;\n\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n\n assert(!q.isZero());\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg(); // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n\n while (t.cmp(one) !== 0) {\n var tmp = t;\n\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm(a) {\n var inv = a._invmp(this.m);\n\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow(a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n\n for (var j = start - 1; j >= 0; j--) {\n var bit = word >> j & 1;\n\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo(num) {\n var r = num.umod(this.m);\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom(num) {\n var res = num.clone();\n res.red = null;\n return res;\n }; //\n // Montgomery method engine\n //\n\n\n BN.mont = function mont(num) {\n return new Mont(num);\n };\n\n function Mont(m) {\n Red.call(this, m);\n this.shift = this.m.bitLength();\n\n if (this.shift % 26 !== 0) {\n this.shift += 26 - this.shift % 26;\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo(num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom(num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul(a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul(a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm(a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/public-encrypt/node_modules/bn.js/lib/bn.js"],"names":["module","exports","assert","val","msg","Error","inherits","ctor","superCtor","super_","TempCtor","prototype","constructor","BN","number","base","endian","isBN","negative","words","length","red","_init","wordSize","Buffer","window","require","e","num","Array","isArray","max","left","right","cmp","min","init","_initNumber","_initArray","toString","replace","start","_parseHex","_parseBase","toArray","Math","ceil","i","j","w","off","strip","parseHex4Bits","string","index","c","charCodeAt","parseHexByte","lowerBound","r","parseLength","parseBase","str","end","mul","len","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","dest","clone","_expand","size","_normSign","inspect","zeros","groupSizes","groupBases","padding","out","carry","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","res","b","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","toBitArray","bit","wbit","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","a","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","add","sub","smallMulTo","self","lo","k","ncarry","rword","maxJ","comb10MulTo","o","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","fftm","FFTM","mulp","mulTo","x","y","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","bhiBits","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","name","tmp","_tmp","ireduce","rlen","split","imulK","undefined","_strip","input","K256","call","output","outLen","prev","next","P224","P192","P25519","_prime","prime","imod","mod3","one","nOne","lpow","z","inv","windowSize","wnd","current","currentLen","mont","Mont","rinv","minv","u"],"mappings":"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","sourcesContent":["(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n"]},"metadata":{},"sourceType":"script"}