{"version":3,"file":"js/chunk-vendors-945ce2fe.fc99ff48.js","mappings":"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","sources":["webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/api.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/base/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/base/node.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/constants/der.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/constants/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1/lib/ber/errors.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1/lib/ber/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1/lib/ber/reader.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1/lib/ber/types.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1/lib/ber/writer.js","webpack://com.crmtogether.mobilexcrm/./node_modules/asn1/lib/index.js","webpack://com.crmtogether.mobilexcrm/./node_modules/assert/build/assert.js","webpack://com.crmtogether.mobilexcrm/./node_modules/assert/build/internal/assert/assertion_error.js","webpack://com.crmtogether.mobilexcrm/./node_modules/assert/build/internal/errors.js","webpack://com.crmtogether.mobilexcrm/./node_modules/assert/build/internal/util/comparisons.js","webpack://com.crmtogether.mobilexcrm/./node_modules/available-typed-arrays/index.js"],"sourcesContent":["'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(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","// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n\n newInvalidAsn1Error: function (msg) {\n var e = new Error();\n e.name = 'InvalidAsn1Error';\n e.message = msg || '';\n return e;\n }\n\n};\n","// Copyright 2011 Mark Cavage All rights reserved.\n\nvar errors = require('./errors');\nvar types = require('./types');\n\nvar Reader = require('./reader');\nvar Writer = require('./writer');\n\n\n// --- Exports\n\nmodule.exports = {\n\n Reader: Reader,\n\n Writer: Writer\n\n};\n\nfor (var t in types) {\n if (types.hasOwnProperty(t))\n module.exports[t] = types[t];\n}\nfor (var e in errors) {\n if (errors.hasOwnProperty(e))\n module.exports[e] = errors[e];\n}\n","// Copyright 2011 Mark Cavage All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\n\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\n\n\n// --- API\n\nfunction Reader(data) {\n if (!data || !Buffer.isBuffer(data))\n throw new TypeError('data must be a node Buffer');\n\n this._buf = data;\n this._size = data.length;\n\n // These hold the \"current\" state\n this._len = 0;\n this._offset = 0;\n}\n\nObject.defineProperty(Reader.prototype, 'length', {\n enumerable: true,\n get: function () { return (this._len); }\n});\n\nObject.defineProperty(Reader.prototype, 'offset', {\n enumerable: true,\n get: function () { return (this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'remain', {\n get: function () { return (this._size - this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'buffer', {\n get: function () { return (this._buf.slice(this._offset)); }\n});\n\n\n/**\n * Reads a single byte and advances offset; you can pass in `true` to make this\n * a \"peek\" operation (i.e., get the byte, but don't advance the offset).\n *\n * @param {Boolean} peek true means don't move offset.\n * @return {Number} the next byte, null if not enough data.\n */\nReader.prototype.readByte = function (peek) {\n if (this._size - this._offset < 1)\n return null;\n\n var b = this._buf[this._offset] & 0xff;\n\n if (!peek)\n this._offset += 1;\n\n return b;\n};\n\n\nReader.prototype.peek = function () {\n return this.readByte(true);\n};\n\n\n/**\n * Reads a (potentially) variable length off the BER buffer. This call is\n * not really meant to be called directly, as callers have to manipulate\n * the internal buffer afterwards.\n *\n * As a result of this call, you can call `Reader.length`, until the\n * next thing called that does a readLength.\n *\n * @return {Number} the amount of offset to advance the buffer.\n * @throws {InvalidAsn1Error} on bad ASN.1\n */\nReader.prototype.readLength = function (offset) {\n if (offset === undefined)\n offset = this._offset;\n\n if (offset >= this._size)\n return null;\n\n var lenB = this._buf[offset++] & 0xff;\n if (lenB === null)\n return null;\n\n if ((lenB & 0x80) === 0x80) {\n lenB &= 0x7f;\n\n if (lenB === 0)\n throw newInvalidAsn1Error('Indefinite length not supported');\n\n if (lenB > 4)\n throw newInvalidAsn1Error('encoding too long');\n\n if (this._size - offset < lenB)\n return null;\n\n this._len = 0;\n for (var i = 0; i < lenB; i++)\n this._len = (this._len << 8) + (this._buf[offset++] & 0xff);\n\n } else {\n // Wasn't a variable length\n this._len = lenB;\n }\n\n return offset;\n};\n\n\n/**\n * Parses the next sequence in this BER buffer.\n *\n * To get the length of the sequence, call `Reader.length`.\n *\n * @return {Number} the sequence's tag.\n */\nReader.prototype.readSequence = function (tag) {\n var seq = this.peek();\n if (seq === null)\n return null;\n if (tag !== undefined && tag !== seq)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + seq.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n if (o === null)\n return null;\n\n this._offset = o;\n return seq;\n};\n\n\nReader.prototype.readInt = function () {\n return this._readTag(ASN1.Integer);\n};\n\n\nReader.prototype.readBoolean = function () {\n return (this._readTag(ASN1.Boolean) === 0 ? false : true);\n};\n\n\nReader.prototype.readEnumeration = function () {\n return this._readTag(ASN1.Enumeration);\n};\n\n\nReader.prototype.readString = function (tag, retbuf) {\n if (!tag)\n tag = ASN1.OctetString;\n\n var b = this.peek();\n if (b === null)\n return null;\n\n if (b !== tag)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + b.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n\n if (o === null)\n return null;\n\n if (this.length > this._size - o)\n return null;\n\n this._offset = o;\n\n if (this.length === 0)\n return retbuf ? Buffer.alloc(0) : '';\n\n var str = this._buf.slice(this._offset, this._offset + this.length);\n this._offset += this.length;\n\n return retbuf ? str : str.toString('utf8');\n};\n\nReader.prototype.readOID = function (tag) {\n if (!tag)\n tag = ASN1.OID;\n\n var b = this.readString(tag, true);\n if (b === null)\n return null;\n\n var values = [];\n var value = 0;\n\n for (var i = 0; i < b.length; i++) {\n var byte = b[i] & 0xff;\n\n value <<= 7;\n value += byte & 0x7f;\n if ((byte & 0x80) === 0) {\n values.push(value);\n value = 0;\n }\n }\n\n value = values.shift();\n values.unshift(value % 40);\n values.unshift((value / 40) >> 0);\n\n return values.join('.');\n};\n\n\nReader.prototype._readTag = function (tag) {\n assert.ok(tag !== undefined);\n\n var b = this.peek();\n\n if (b === null)\n return null;\n\n if (b !== tag)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + b.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n if (o === null)\n return null;\n\n if (this.length > 4)\n throw newInvalidAsn1Error('Integer too long: ' + this.length);\n\n if (this.length > this._size - o)\n return null;\n this._offset = o;\n\n var fb = this._buf[this._offset];\n var value = 0;\n\n for (var i = 0; i < this.length; i++) {\n value <<= 8;\n value |= (this._buf[this._offset++] & 0xff);\n }\n\n if ((fb & 0x80) === 0x80 && i !== 4)\n value -= (1 << (i * 8));\n\n return value >> 0;\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Reader;\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n EOC: 0,\n Boolean: 1,\n Integer: 2,\n BitString: 3,\n OctetString: 4,\n Null: 5,\n OID: 6,\n ObjectDescriptor: 7,\n External: 8,\n Real: 9, // float\n Enumeration: 10,\n PDV: 11,\n Utf8String: 12,\n RelativeOID: 13,\n Sequence: 16,\n Set: 17,\n NumericString: 18,\n PrintableString: 19,\n T61String: 20,\n VideotexString: 21,\n IA5String: 22,\n UTCTime: 23,\n GeneralizedTime: 24,\n GraphicString: 25,\n VisibleString: 26,\n GeneralString: 28,\n UniversalString: 29,\n CharacterString: 30,\n BMPString: 31,\n Constructor: 32,\n Context: 128\n};\n","// Copyright 2011 Mark Cavage All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\nvar DEFAULT_OPTS = {\n size: 1024,\n growthFactor: 8\n};\n\n\n// --- Helpers\n\nfunction merge(from, to) {\n assert.ok(from);\n assert.equal(typeof (from), 'object');\n assert.ok(to);\n assert.equal(typeof (to), 'object');\n\n var keys = Object.getOwnPropertyNames(from);\n keys.forEach(function (key) {\n if (to[key])\n return;\n\n var value = Object.getOwnPropertyDescriptor(from, key);\n Object.defineProperty(to, key, value);\n });\n\n return to;\n}\n\n\n\n// --- API\n\nfunction Writer(options) {\n options = merge(DEFAULT_OPTS, options || {});\n\n this._buf = Buffer.alloc(options.size || 1024);\n this._size = this._buf.length;\n this._offset = 0;\n this._options = options;\n\n // A list of offsets in the buffer where we need to insert\n // sequence tag/len pairs.\n this._seq = [];\n}\n\nObject.defineProperty(Writer.prototype, 'buffer', {\n get: function () {\n if (this._seq.length)\n throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)');\n\n return (this._buf.slice(0, this._offset));\n }\n});\n\nWriter.prototype.writeByte = function (b) {\n if (typeof (b) !== 'number')\n throw new TypeError('argument must be a Number');\n\n this._ensure(1);\n this._buf[this._offset++] = b;\n};\n\n\nWriter.prototype.writeInt = function (i, tag) {\n if (typeof (i) !== 'number')\n throw new TypeError('argument must be a Number');\n if (typeof (tag) !== 'number')\n tag = ASN1.Integer;\n\n var sz = 4;\n\n while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) &&\n (sz > 1)) {\n sz--;\n i <<= 8;\n }\n\n if (sz > 4)\n throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff');\n\n this._ensure(2 + sz);\n this._buf[this._offset++] = tag;\n this._buf[this._offset++] = sz;\n\n while (sz-- > 0) {\n this._buf[this._offset++] = ((i & 0xff000000) >>> 24);\n i <<= 8;\n }\n\n};\n\n\nWriter.prototype.writeNull = function () {\n this.writeByte(ASN1.Null);\n this.writeByte(0x00);\n};\n\n\nWriter.prototype.writeEnumeration = function (i, tag) {\n if (typeof (i) !== 'number')\n throw new TypeError('argument must be a Number');\n if (typeof (tag) !== 'number')\n tag = ASN1.Enumeration;\n\n return this.writeInt(i, tag);\n};\n\n\nWriter.prototype.writeBoolean = function (b, tag) {\n if (typeof (b) !== 'boolean')\n throw new TypeError('argument must be a Boolean');\n if (typeof (tag) !== 'number')\n tag = ASN1.Boolean;\n\n this._ensure(3);\n this._buf[this._offset++] = tag;\n this._buf[this._offset++] = 0x01;\n this._buf[this._offset++] = b ? 0xff : 0x00;\n};\n\n\nWriter.prototype.writeString = function (s, tag) {\n if (typeof (s) !== 'string')\n throw new TypeError('argument must be a string (was: ' + typeof (s) + ')');\n if (typeof (tag) !== 'number')\n tag = ASN1.OctetString;\n\n var len = Buffer.byteLength(s);\n this.writeByte(tag);\n this.writeLength(len);\n if (len) {\n this._ensure(len);\n this._buf.write(s, this._offset);\n this._offset += len;\n }\n};\n\n\nWriter.prototype.writeBuffer = function (buf, tag) {\n if (typeof (tag) !== 'number')\n throw new TypeError('tag must be a number');\n if (!Buffer.isBuffer(buf))\n throw new TypeError('argument must be a buffer');\n\n this.writeByte(tag);\n this.writeLength(buf.length);\n this._ensure(buf.length);\n buf.copy(this._buf, this._offset, 0, buf.length);\n this._offset += buf.length;\n};\n\n\nWriter.prototype.writeStringArray = function (strings) {\n if ((!strings instanceof Array))\n throw new TypeError('argument must be an Array[String]');\n\n var self = this;\n strings.forEach(function (s) {\n self.writeString(s);\n });\n};\n\n// This is really to solve DER cases, but whatever for now\nWriter.prototype.writeOID = function (s, tag) {\n if (typeof (s) !== 'string')\n throw new TypeError('argument must be a string');\n if (typeof (tag) !== 'number')\n tag = ASN1.OID;\n\n if (!/^([0-9]+\\.){3,}[0-9]+$/.test(s))\n throw new Error('argument is not a valid OID string');\n\n function encodeOctet(bytes, octet) {\n if (octet < 128) {\n bytes.push(octet);\n } else if (octet < 16384) {\n bytes.push((octet >>> 7) | 0x80);\n bytes.push(octet & 0x7F);\n } else if (octet < 2097152) {\n bytes.push((octet >>> 14) | 0x80);\n bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n bytes.push(octet & 0x7F);\n } else if (octet < 268435456) {\n bytes.push((octet >>> 21) | 0x80);\n bytes.push(((octet >>> 14) | 0x80) & 0xFF);\n bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n bytes.push(octet & 0x7F);\n } else {\n bytes.push(((octet >>> 28) | 0x80) & 0xFF);\n bytes.push(((octet >>> 21) | 0x80) & 0xFF);\n bytes.push(((octet >>> 14) | 0x80) & 0xFF);\n bytes.push(((octet >>> 7) | 0x80) & 0xFF);\n bytes.push(octet & 0x7F);\n }\n }\n\n var tmp = s.split('.');\n var bytes = [];\n bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10));\n tmp.slice(2).forEach(function (b) {\n encodeOctet(bytes, parseInt(b, 10));\n });\n\n var self = this;\n this._ensure(2 + bytes.length);\n this.writeByte(tag);\n this.writeLength(bytes.length);\n bytes.forEach(function (b) {\n self.writeByte(b);\n });\n};\n\n\nWriter.prototype.writeLength = function (len) {\n if (typeof (len) !== 'number')\n throw new TypeError('argument must be a Number');\n\n this._ensure(4);\n\n if (len <= 0x7f) {\n this._buf[this._offset++] = len;\n } else if (len <= 0xff) {\n this._buf[this._offset++] = 0x81;\n this._buf[this._offset++] = len;\n } else if (len <= 0xffff) {\n this._buf[this._offset++] = 0x82;\n this._buf[this._offset++] = len >> 8;\n this._buf[this._offset++] = len;\n } else if (len <= 0xffffff) {\n this._buf[this._offset++] = 0x83;\n this._buf[this._offset++] = len >> 16;\n this._buf[this._offset++] = len >> 8;\n this._buf[this._offset++] = len;\n } else {\n throw newInvalidAsn1Error('Length too long (> 4 bytes)');\n }\n};\n\nWriter.prototype.startSequence = function (tag) {\n if (typeof (tag) !== 'number')\n tag = ASN1.Sequence | ASN1.Constructor;\n\n this.writeByte(tag);\n this._seq.push(this._offset);\n this._ensure(3);\n this._offset += 3;\n};\n\n\nWriter.prototype.endSequence = function () {\n var seq = this._seq.pop();\n var start = seq + 3;\n var len = this._offset - start;\n\n if (len <= 0x7f) {\n this._shift(start, len, -2);\n this._buf[seq] = len;\n } else if (len <= 0xff) {\n this._shift(start, len, -1);\n this._buf[seq] = 0x81;\n this._buf[seq + 1] = len;\n } else if (len <= 0xffff) {\n this._buf[seq] = 0x82;\n this._buf[seq + 1] = len >> 8;\n this._buf[seq + 2] = len;\n } else if (len <= 0xffffff) {\n this._shift(start, len, 1);\n this._buf[seq] = 0x83;\n this._buf[seq + 1] = len >> 16;\n this._buf[seq + 2] = len >> 8;\n this._buf[seq + 3] = len;\n } else {\n throw newInvalidAsn1Error('Sequence too long');\n }\n};\n\n\nWriter.prototype._shift = function (start, len, shift) {\n assert.ok(start !== undefined);\n assert.ok(len !== undefined);\n assert.ok(shift);\n\n this._buf.copy(this._buf, start + shift, start, start + len);\n this._offset += shift;\n};\n\nWriter.prototype._ensure = function (len) {\n assert.ok(len);\n\n if (this._size - this._offset < len) {\n var sz = this._size * this._options.growthFactor;\n if (sz - this._offset < len)\n sz += len;\n\n var buf = Buffer.alloc(sz);\n\n this._buf.copy(buf, 0, 0, this._offset);\n this._buf = buf;\n this._size = sz;\n }\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Writer;\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n// If you have no idea what ASN.1 or BER is, see this:\n// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nvar Ber = require('./ber/index');\n\n\n\n// --- Exported API\n\nmodule.exports = {\n\n Ber: Ber,\n\n BerReader: Ber.Reader,\n\n BerWriter: Ber.Writer\n\n};\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = require('./internal/assert/assertion_error');\n\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\n\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : require('es6-object-assign').assign;\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n'use strict';\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = require('util/'),\n inspect = _require.inspect;\n\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n\n while (count) {\n str += str;\n count--;\n }\n\n str += str.substring(0, maxCount - str.length);\n return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\n\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n\n\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n } // Ignore the first characters.\n\n\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n } // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n\n\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n\n var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the expected line to the cache.\n\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++; // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++; // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2; // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = ''; // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n } // Inspected object to big (Show ~20 rows max)\n\n\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n _inherits(AssertionError, _Error);\n\n function AssertionError(options) {\n var _this;\n\n _classCallCheck(this, AssertionError);\n\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n\n if (message != null) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n } // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n\n\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n } // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (res.length > 27) {\n res.pop();\n }\n } // Only print a single input.\n\n\n if (res.length === 1) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n } else {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n }\n } else {\n var _res = inspectValue(actual);\n\n var other = '';\n var knownOperators = kReadableOperator[operator];\n\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n }\n }\n\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n } // Create error message including the error code in the name.\n\n\n _this.stack; // Reset the name.\n\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: inspect.custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread({}, ctx, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n\n return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n'use strict'; // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inherits(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n var _this;\n\n _classCallCheck(this, NodeError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n _this.code = code;\n return _this;\n }\n\n return NodeError;\n }(Base);\n\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\n\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n } // The maximum size for an array is 2 ** 32 -1.\n\n\n return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n\n if (y < x) {\n return 1;\n }\n\n return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n } // Check more closely if val1 and val2 are equal.\n\n\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n\n return false;\n }\n\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n\n if (val1Tag !== val2Tag) {\n return false;\n }\n\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n\n\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n } // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n\n\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (_keys.length !== _keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n } // Cheap key test\n\n\n var i = 0;\n\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n if (symbolKeysA.length !== 0) {\n var count = 0;\n\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n } // Use memos to handle cycles.\n\n\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n\n memos.position++;\n }\n\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n\n return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n\n case 'object':\n // Only pass in null as object!\n return undefined;\n\n case 'symbol':\n return false;\n\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n\n }\n\n return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n\n if (altValue != null) {\n return altValue;\n }\n\n var curB = b.get(altValue);\n\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n } // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n\n\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(val);\n }\n }\n\n if (set !== null) {\n var bValues = arrayFromSet(b);\n\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i]; // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n // keys.\n\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n }\n }\n }\n\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n\n return true;\n }\n }\n } // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n\n\n for (i = 0; i < keys.length; i++) {\n var _key = keys[i];\n\n if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n"],"names":["asn1","exports","bignum","define","base","constants","decoders","encoders","inherits","api","Entity","name","body","this","prototype","_createNamed","Base","Generated","entity","_initNamed","call","_getDecoder","enc","hasOwnProperty","decode","data","options","_getEncoder","encode","reporter","Reporter","Buffer","DecoderBuffer","isBuffer","offset","length","error","EncoderBuffer","value","Array","isArray","map","item","isEncoderBuffer","byteLength","isDecoderBuffer","isCompatible","constructor","save","restore","isEmpty","readUInt8","skip","raw","res","fail","bytes","_reporterState","slice","join","out","alloc","forEach","write","copy","Node","assert","tags","methods","concat","overrided","parent","state","_baseState","children","tag","args","reverseArgs","choice","optional","any","obj","use","useDecoder","key","explicit","implicit","contains","_wrap","module","stateProps","clone","cstate","prop","method","push","apply","arguments","_init","filter","child","equal","_useArgs","arg","Object","keys","Error","def","val","num","newKey","_decode","input","wrapResult","prevObj","result","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","e","enterObject","_decodeTag","start","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","match","some","node","type","_createEncoderBuffer","_encode","_encodeValue","undefined","_skipDefault","content","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","str","_isPrintstr","errors","ReporterError","msg","rethrow","pathLen","index","prev","now","err","inherited","elem","message","stack","partial","captureStackTrace","reverse","tagClass","tagClassByName","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","buf","oct","tagStr","derDecodeLen","len","i","j","buffer","decodedTag","_skipUntilEnd","decoder","possibleEnd","unused","String","fromCharCode","readUInt16BE","numstr","toString","printstr","values","relative","identifiers","ident","subident","first","second","tmp","year","mon","day","hour","min","sec","Date","UTC","pem","PEMDecoder","lines","split","label","toUpperCase","re","end","base64","replace","from","DEREncoder","two","encodeTag","encodedTag","header","lenOctets","writeUInt16BE","charCodeAt","id","splice","size","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","unshift","dataBuffer","defaultBuffer","PEMEncoder","p","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","wordSize","window","parseHex4Bits","string","c","parseHexByte","lowerBound","r","parseBase","mul","Math","max","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","parseLength","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","toBitArray","bitLength","bit","wbit","smallMulTo","self","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","t","_zeroBits","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","add","sub","comb10MulTo","mid","o","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","x","y","mulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","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","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","output","outLen","next","mod3","one","nOne","lpow","z","inv","windowSize","wnd","current","currentLen","mont","u","newInvalidAsn1Error","types","Reader","Writer","ASN1","TypeError","_buf","_size","_len","_offset","defineProperty","enumerable","get","readByte","peek","readLength","lenB","readSequence","seq","readInt","_readTag","Integer","readBoolean","Boolean","readEnumeration","Enumeration","readString","retbuf","OctetString","readOID","OID","byte","ok","fb","EOC","BitString","Null","ObjectDescriptor","External","Real","PDV","Utf8String","RelativeOID","Sequence","Set","NumericString","PrintableString","T61String","VideotexString","IA5String","UTCTime","GeneralizedTime","GraphicString","VisibleString","GeneralString","UniversalString","CharacterString","BMPString","Constructor","Context","DEFAULT_OPTS","growthFactor","merge","to","getOwnPropertyNames","getOwnPropertyDescriptor","_options","_seq","writeByte","_ensure","writeInt","sz","writeNull","writeEnumeration","writeBoolean","writeString","writeLength","writeBuffer","writeStringArray","strings","writeOID","encodeOctet","octet","parseInt","startSequence","endSequence","pop","_shift","Ber","BerReader","BerWriter","_typeof","Symbol","iterator","_classCallCheck","instance","isDeepEqual","isDeepStrictEqual","_require","_require$codes","codes","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","AssertionError","_require2","_require$types","isPromise","isRegExp","objectAssign","assign","objectIs","is","Map","lazyLoadComparison","comparison","warned","NO_EXCEPTION_SENTINEL","innerFail","actual","expected","operator","stackStartFn","internalMessage","argsLen","warn","process","emitWarning","console","bind","errArgs","generatedMessage","innerOk","fn","argLen","_key","notDeepStrictEqual","notEqual","deepEqual","notDeepEqual","deepStrictEqual","strictEqual","notStrictEqual","Comparison","_this","compareExceptionKey","expectedException","isPrototypeOf","getActual","checkIsPromise","then","catch","waitForActual","promiseFn","Promise","resolve","resultPromise","expectsError","details","fnType","expectsNoError","strict","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","tmp1","pos","indexOf","_objectSpread","target","source","ownKeys","getOwnPropertySymbols","sym","_defineProperty","configurable","writable","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","_inherits","subClass","superClass","create","_setPrototypeOf","_wrapNativeSuper","Class","_cache","_isNativeFunction","has","set","Wrapper","_construct","_getPrototypeOf","isNativeReflectConstruct","Reflect","construct","sham","Proxy","Parent","Function","setPrototypeOf","__proto__","getPrototypeOf","endsWith","search","this_len","substring","repeat","count","floor","maxCount","log","blue","green","white","kReadableOperator","strictEqualObject","notStrictEqualObject","notIdentical","kMaxShortLength","copyError","inspectValue","compact","customInspect","depth","maxArrayLength","Infinity","showHidden","breakLength","showProxy","sorted","getters","createErrDiff","other","lastPos","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","maxLength","stderr","isTTY","columns","maxLines","_actualLines","printedLines","skippedMsg","cur","expectedLine","actualLine","divergingLines","_Error","limit","stackTraceLimit","getColorDepth","_res","knownOperators","code","custom","recurseTimes","util","createErrorType","getMessage","arg1","arg2","arg3","NodeError","_Base","oneOf","thing","startsWith","substr","includes","determiner","reason","inspected","RangeError","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arr","_n","_d","_e","_s","_i","done","regexFlagsSupported","flags","arrayFromSet","array","arrayFromMap","objectGetOwnPropertySymbols","numberIsNaN","Number","isNaN","uncurryThis","f","propertyIsEnumerable","objectToString","isAnyArrayBuffer","isArrayBufferView","isDate","isMap","isSet","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","compare","ONLY_ENUMERABLE","kStrict","kLoose","kNoIterator","kIsArray","kIsSet","kIsMap","areSimilarRegExps","RegExp","areSimilarFloatArrays","areSimilarTypedArrays","Uint8Array","byteOffset","areEqualArrayBuffers","buf1","buf2","isEqualBoxedPrimitive","val1","val2","valueOf","BigInt","innerDeepEqual","memos","val1Tag","val2Tag","keys1","keys2","keyCheck","getTime","_keys","_keys2","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","position","val2MemoA","val2MemoB","areEq","objEquiv","delete","setHasEqualElement","memo","setValues","findLooseMatchingPrimitives","prim","setMightHaveLoosePrim","altValue","mapMightHaveLoosePrim","curB","setEquiv","aValues","bValues","_val","mapHasEqualEntry","key1","item1","key2","mapEquiv","aEntries","_aEntries$i","item2","bEntries","_i2","_bEntries$_i","keysA","possibleNames","globalThis"],"sourceRoot":""}