(function(factory) { typeof define === "function" && define.amd ? define(factory) : factory(); })((function() { "use strict"; function _mergeNamespaces(n, m) { for (var i2 = 0; i2 < m.length; i2++) { const e = m[i2]; if (typeof e !== "string" && !Array.isArray(e)) { for (const k in e) { if (k !== "default" && !(k in n)) { const d = Object.getOwnPropertyDescriptor(e, k); if (d) { Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: () => e[k] }); } } } } } return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { value: "Module" })); } function getDefaultExportFromCjs$1(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var browser$e = { exports: {} }; var process = browser$e.exports = {}; var cachedSetTimeout; var cachedClearTimeout; function defaultSetTimout() { throw new Error("setTimeout has not been defined"); } function defaultClearTimeout() { throw new Error("clearTimeout has not been defined"); } (function() { try { if (typeof setTimeout === "function") { cachedSetTimeout = setTimeout; } else { cachedSetTimeout = defaultSetTimout; } } catch (e) { cachedSetTimeout = defaultSetTimout; } try { if (typeof clearTimeout === "function") { cachedClearTimeout = clearTimeout; } else { cachedClearTimeout = defaultClearTimeout; } } catch (e) { cachedClearTimeout = defaultClearTimeout; } })(); function runTimeout(fun) { if (cachedSetTimeout === setTimeout) { return setTimeout(fun, 0); } if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { cachedSetTimeout = setTimeout; return setTimeout(fun, 0); } try { return cachedSetTimeout(fun, 0); } catch (e) { try { return cachedSetTimeout.call(null, fun, 0); } catch (e2) { return cachedSetTimeout.call(this, fun, 0); } } } function runClearTimeout(marker) { if (cachedClearTimeout === clearTimeout) { return clearTimeout(marker); } if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { cachedClearTimeout = clearTimeout; return clearTimeout(marker); } try { return cachedClearTimeout(marker); } catch (e) { try { return cachedClearTimeout.call(null, marker); } catch (e2) { return cachedClearTimeout.call(this, marker); } } } var queue = []; var draining = false; var currentQueue; var queueIndex = -1; function cleanUpNextTick() { if (!draining || !currentQueue) { return; } draining = false; if (currentQueue.length) { queue = currentQueue.concat(queue); } else { queueIndex = -1; } if (queue.length) { drainQueue(); } } function drainQueue() { if (draining) { return; } var timeout = runTimeout(cleanUpNextTick); draining = true; var len2 = queue.length; while (len2) { currentQueue = queue; queue = []; while (++queueIndex < len2) { if (currentQueue) { currentQueue[queueIndex].run(); } } queueIndex = -1; len2 = queue.length; } currentQueue = null; draining = false; runClearTimeout(timeout); } process.nextTick = function(fun) { var args = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i2 = 1; i2 < arguments.length; i2++) { args[i2 - 1] = arguments[i2]; } } queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { runTimeout(drainQueue); } }; function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function() { this.fun.apply(null, this.array); }; process.title = "browser"; process.browser = true; process.env = {}; process.argv = []; process.version = ""; process.versions = {}; function noop() { } process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.prependListener = noop; process.prependOnceListener = noop; process.listeners = function(name) { return []; }; process.binding = function(name) { throw new Error("process.binding is not supported"); }; process.cwd = function() { return "/"; }; process.chdir = function(dir) { throw new Error("process.chdir is not supported"); }; process.umask = function() { return 0; }; var browserExports$1 = browser$e.exports; const process$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(browserExports$1); const config = { IS_NODE: typeof process$1 !== "undefined" && !!process$1.versions && !!process$1.versions.node && !process$1.versions.electron, REQUEST_ATTEMPT_LIMIT: 5, REQUEST_BATCH_SIZE: 20, REQUEST_HEADERS: {}, SERVER_URL: "https://api.parse.com/1", LIVEQUERY_SERVER_URL: null, ENCRYPTED_KEY: null, VERSION: "js8.5.0", APPLICATION_ID: null, JAVASCRIPT_KEY: null, MAINTENANCE_KEY: null, MASTER_KEY: null, USE_MASTER_KEY: false, PERFORM_USER_REWRITE: true, FORCE_REVOCABLE_SESSION: false, ENCRYPTED_USER: false, IDEMPOTENCY: false, ALLOW_CUSTOM_OBJECT_ID: false, PARSE_ERRORS: [], NODE_LOGGING: false }; function requireMethods(name, methods, controller) { methods.forEach((func) => { if (typeof controller[func] !== "function") { throw new Error(`${name} must implement ${func}()`); } }); } const CoreManager = { get: function(key2) { if (Object.hasOwn(config, key2)) { return config[key2]; } throw new Error("Configuration key not found: " + key2); }, set: function(key2, value) { config[key2] = value; }, setIfNeeded: function(key2, value) { if (!Object.hasOwn(config, key2)) { config[key2] = value; } return config[key2]; }, /* Specialized Controller Setters/Getters */ setAnalyticsController(controller) { requireMethods("AnalyticsController", ["track"], controller); config["AnalyticsController"] = controller; }, getAnalyticsController() { return config["AnalyticsController"]; }, setCloudController(controller) { requireMethods("CloudController", ["run", "getJobsData", "startJob"], controller); config["CloudController"] = controller; }, getCloudController() { return config["CloudController"]; }, setConfigController(controller) { requireMethods("ConfigController", ["current", "get", "save"], controller); config["ConfigController"] = controller; }, getConfigController() { return config["ConfigController"]; }, setCryptoController(controller) { requireMethods("CryptoController", ["encrypt", "decrypt"], controller); config["CryptoController"] = controller; }, getCryptoController() { return config["CryptoController"]; }, setEventEmitter(eventEmitter) { config["EventEmitter"] = eventEmitter; }, getEventEmitter() { return config["EventEmitter"]; }, setFileController(controller) { requireMethods("FileController", ["saveFile", "saveBase64"], controller); config["FileController"] = controller; }, setEventuallyQueue(controller) { requireMethods("EventuallyQueue", ["poll", "save", "destroy"], controller); config["EventuallyQueue"] = controller; }, getEventuallyQueue() { return config["EventuallyQueue"]; }, getFileController() { return config["FileController"]; }, setInstallationController(controller) { requireMethods( "InstallationController", ["currentInstallationId", "currentInstallation", "updateInstallationOnDisk"], controller ); config["InstallationController"] = controller; }, getInstallationController() { return config["InstallationController"]; }, setLiveQuery(liveQuery) { config["LiveQuery"] = liveQuery; }, getLiveQuery() { return config["LiveQuery"]; }, setObjectController(controller) { requireMethods("ObjectController", ["save", "fetch", "destroy"], controller); config["ObjectController"] = controller; }, getObjectController() { return config["ObjectController"]; }, setObjectStateController(controller) { requireMethods( "ObjectStateController", [ "getState", "initializeState", "removeState", "getServerData", "setServerData", "getPendingOps", "setPendingOp", "pushPendingState", "popPendingState", "mergeFirstPendingState", "getObjectCache", "estimateAttribute", "estimateAttributes", "commitServerChanges", "enqueueTask", "clearAllState" ], controller ); config["ObjectStateController"] = controller; }, getObjectStateController() { return config["ObjectStateController"]; }, setPushController(controller) { requireMethods("PushController", ["send"], controller); config["PushController"] = controller; }, getPushController() { return config["PushController"]; }, setQueryController(controller) { requireMethods("QueryController", ["find", "aggregate"], controller); config["QueryController"] = controller; }, getQueryController() { return config["QueryController"]; }, setRESTController(controller) { requireMethods("RESTController", ["request", "ajax"], controller); config["RESTController"] = controller; }, getRESTController() { return config["RESTController"]; }, setSchemaController(controller) { requireMethods( "SchemaController", ["get", "create", "update", "delete", "send", "purge"], controller ); config["SchemaController"] = controller; }, getSchemaController() { return config["SchemaController"]; }, setSessionController(controller) { requireMethods("SessionController", ["getSession"], controller); config["SessionController"] = controller; }, getSessionController() { return config["SessionController"]; }, setStorageController(controller) { if (controller.async) { requireMethods( "An async StorageController", ["getItemAsync", "setItemAsync", "removeItemAsync", "getAllKeysAsync"], controller ); } else { requireMethods( "A synchronous StorageController", ["getItem", "setItem", "removeItem", "getAllKeys"], controller ); } config["StorageController"] = controller; }, setLocalDatastoreController(controller) { requireMethods( "LocalDatastoreController", ["pinWithName", "fromPinWithName", "unPinWithName", "getAllContents", "clear"], controller ); config["LocalDatastoreController"] = controller; }, getLocalDatastoreController() { return config["LocalDatastoreController"]; }, setLocalDatastore(store) { config["LocalDatastore"] = store; }, getLocalDatastore() { return config["LocalDatastore"]; }, getStorageController() { return config["StorageController"]; }, setAsyncStorage(storage) { config["AsyncStorage"] = storage; }, getAsyncStorage() { return config["AsyncStorage"]; }, setWebSocketController(controller) { config["WebSocketController"] = controller; }, getWebSocketController() { return config["WebSocketController"]; }, setUserController(controller) { requireMethods( "UserController", [ "setCurrentUser", "currentUser", "currentUserAsync", "signUp", "logIn", "become", "logOut", "me", "requestPasswordReset", "upgradeToRevocableSession", "requestEmailVerification", "verifyPassword", "linkWith" ], controller ); config["UserController"] = controller; }, getUserController() { return config["UserController"]; }, setLiveQueryController(controller) { requireMethods( "LiveQueryController", ["setDefaultLiveQueryClient", "getDefaultLiveQueryClient", "_clearCachedDefaultClient"], controller ); config["LiveQueryController"] = controller; }, getLiveQueryController() { return config["LiveQueryController"]; }, setHooksController(controller) { requireMethods("HooksController", ["create", "get", "update", "remove"], controller); config["HooksController"] = controller; }, getHooksController() { return config["HooksController"]; }, setParseOp(op) { config["ParseOp"] = op; }, getParseOp() { return config["ParseOp"]; }, setParseObject(object) { config["ParseObject"] = object; }, getParseObject() { return config["ParseObject"]; }, setParseQuery(query) { config["ParseQuery"] = query; }, getParseQuery() { return config["ParseQuery"]; }, setParseRole(role) { config["ParseRole"] = role; }, getParseRole() { return config["ParseRole"]; }, setParseUser(user) { config["ParseUser"] = user; }, getParseUser() { return config["ParseUser"]; } }; var buffer$1 = {}; var base64Js = {}; base64Js.byteLength = byteLength; base64Js.toByteArray = toByteArray; base64Js.fromByteArray = fromByteArray; var lookup = []; var revLookup = []; var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i]; revLookup[code.charCodeAt(i)] = i; } revLookup["-".charCodeAt(0)] = 62; revLookup["_".charCodeAt(0)] = 63; function getLens(b64) { var len2 = b64.length; if (len2 % 4 > 0) { throw new Error("Invalid string. Length must be a multiple of 4"); } var validLen = b64.indexOf("="); if (validLen === -1) validLen = len2; var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; return [validLen, placeHoldersLen]; } function byteLength(b64) { var lens = getLens(b64); var validLen = lens[0]; var placeHoldersLen = lens[1]; return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; } function _byteLength(b64, validLen, placeHoldersLen) { return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; } function toByteArray(b64) { var tmp; var lens = getLens(b64); var validLen = lens[0]; var placeHoldersLen = lens[1]; var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); var curByte = 0; var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; var i2; for (i2 = 0; i2 < len2; i2 += 4) { tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)]; arr[curByte++] = tmp >> 16 & 255; arr[curByte++] = tmp >> 8 & 255; arr[curByte++] = tmp & 255; } if (placeHoldersLen === 2) { tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4; arr[curByte++] = tmp & 255; } if (placeHoldersLen === 1) { tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2; arr[curByte++] = tmp >> 8 & 255; arr[curByte++] = tmp & 255; } return arr; } function tripletToBase64(num) { return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63]; } function encodeChunk(uint8, start, end) { var tmp; var output = []; for (var i2 = start; i2 < end; i2 += 3) { tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255); output.push(tripletToBase64(tmp)); } return output.join(""); } function fromByteArray(uint8) { var tmp; var len2 = uint8.length; var extraBytes = len2 % 3; var parts = []; var maxChunkLength = 16383; for (var i2 = 0, len22 = len2 - extraBytes; i2 < len22; i2 += maxChunkLength) { parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength)); } if (extraBytes === 1) { tmp = uint8[len2 - 1]; parts.push( lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==" ); } else if (extraBytes === 2) { tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; parts.push( lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=" ); } return parts.join(""); } var ieee754 = {}; ieee754.read = function(buffer2, offset, isLE, mLen, nBytes) { var e, m; var eLen = nBytes * 8 - mLen - 1; var eMax = (1 << eLen) - 1; var eBias = eMax >> 1; var nBits = -7; var i2 = isLE ? nBytes - 1 : 0; var d = isLE ? -1 : 1; var s = buffer2[offset + i2]; i2 += d; e = s & (1 << -nBits) - 1; s >>= -nBits; nBits += eLen; for (; nBits > 0; e = e * 256 + buffer2[offset + i2], i2 += d, nBits -= 8) { } m = e & (1 << -nBits) - 1; e >>= -nBits; nBits += mLen; for (; nBits > 0; m = m * 256 + buffer2[offset + i2], i2 += d, nBits -= 8) { } if (e === 0) { e = 1 - eBias; } else if (e === eMax) { return m ? NaN : (s ? -1 : 1) * Infinity; } else { m = m + Math.pow(2, mLen); e = e - eBias; } return (s ? -1 : 1) * m * Math.pow(2, e - mLen); }; ieee754.write = function(buffer2, value, offset, isLE, mLen, nBytes) { var e, m, c; var eLen = nBytes * 8 - mLen - 1; var eMax = (1 << eLen) - 1; var eBias = eMax >> 1; var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; var i2 = isLE ? 0 : nBytes - 1; var d = isLE ? 1 : -1; var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; value = Math.abs(value); if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0; e = eMax; } else { e = Math.floor(Math.log(value) / Math.LN2); if (value * (c = Math.pow(2, -e)) < 1) { e--; c *= 2; } if (e + eBias >= 1) { value += rt / c; } else { value += rt * Math.pow(2, 1 - eBias); } if (value * c >= 2) { e++; c /= 2; } if (e + eBias >= eMax) { m = 0; e = eMax; } else if (e + eBias >= 1) { m = (value * c - 1) * Math.pow(2, mLen); e = e + eBias; } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); e = 0; } } for (; mLen >= 8; buffer2[offset + i2] = m & 255, i2 += d, m /= 256, mLen -= 8) { } e = e << mLen | m; eLen += mLen; for (; eLen > 0; buffer2[offset + i2] = e & 255, i2 += d, e /= 256, eLen -= 8) { } buffer2[offset + i2 - d] |= s * 128; }; (function(exports$12) { const base64 = base64Js; const ieee754$1 = ieee754; const customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null; exports$12.Buffer = Buffer2; exports$12.SlowBuffer = SlowBuffer; exports$12.INSPECT_MAX_BYTES = 50; const K_MAX_LENGTH = 2147483647; exports$12.kMaxLength = K_MAX_LENGTH; const { Uint8Array: GlobalUint8Array, ArrayBuffer: GlobalArrayBuffer, SharedArrayBuffer: GlobalSharedArrayBuffer } = globalThis; Buffer2.TYPED_ARRAY_SUPPORT = typedArraySupport(); if (!Buffer2.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") { console.error( "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support." ); } function typedArraySupport() { try { const arr = new GlobalUint8Array(1); const proto = { foo: function() { return 42; } }; Object.setPrototypeOf(proto, GlobalUint8Array.prototype); Object.setPrototypeOf(arr, proto); return arr.foo() === 42; } catch (e) { return false; } } Object.defineProperty(Buffer2.prototype, "parent", { enumerable: true, get: function() { if (!Buffer2.isBuffer(this)) return void 0; return this.buffer; } }); Object.defineProperty(Buffer2.prototype, "offset", { enumerable: true, get: function() { if (!Buffer2.isBuffer(this)) return void 0; return this.byteOffset; } }); function createBuffer(length) { if (length > K_MAX_LENGTH) { throw new RangeError('The value "' + length + '" is invalid for option "size"'); } const buf = new GlobalUint8Array(length); Object.setPrototypeOf(buf, Buffer2.prototype); return buf; } function Buffer2(arg, encodingOrOffset, length) { if (typeof arg === "number") { if (typeof encodingOrOffset === "string") { throw new TypeError( 'The "string" argument must be of type string. Received type number' ); } return allocUnsafe(arg); } return from(arg, encodingOrOffset, length); } Buffer2.poolSize = 8192; function from(value, encodingOrOffset, length) { if (typeof value === "string") { return fromString(value, encodingOrOffset); } if (GlobalArrayBuffer.isView(value)) { return fromArrayView(value); } if (value == null) { throw new TypeError( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value ); } if (isInstance(value, GlobalArrayBuffer) || value && isInstance(value.buffer, GlobalArrayBuffer)) { return fromArrayBuffer(value, encodingOrOffset, length); } if (typeof GlobalSharedArrayBuffer !== "undefined" && (isInstance(value, GlobalSharedArrayBuffer) || value && isInstance(value.buffer, GlobalSharedArrayBuffer))) { return fromArrayBuffer(value, encodingOrOffset, length); } if (typeof value === "number") { throw new TypeError( 'The "value" argument must not be of type number. Received type number' ); } const valueOf = value.valueOf && value.valueOf(); if (valueOf != null && valueOf !== value) { return Buffer2.from(valueOf, encodingOrOffset, length); } const b = fromObject(value); if (b) return b; if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") { return Buffer2.from(value[Symbol.toPrimitive]("string"), encodingOrOffset, length); } throw new TypeError( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value ); } Buffer2.from = function(value, encodingOrOffset, length) { return from(value, encodingOrOffset, length); }; Object.setPrototypeOf(Buffer2.prototype, GlobalUint8Array.prototype); Object.setPrototypeOf(Buffer2, GlobalUint8Array); function assertSize(size) { if (typeof size !== "number") { throw new TypeError('"size" argument must be of type number'); } else if (size < 0) { throw new RangeError('The value "' + size + '" is invalid for option "size"'); } } function alloc(size, fill, encoding) { assertSize(size); if (size <= 0) { return createBuffer(size); } if (fill !== void 0) { return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); } return createBuffer(size); } Buffer2.alloc = function(size, fill, encoding) { return alloc(size, fill, encoding); }; function allocUnsafe(size) { assertSize(size); return createBuffer(size < 0 ? 0 : checked(size) | 0); } Buffer2.allocUnsafe = function(size) { return allocUnsafe(size); }; Buffer2.allocUnsafeSlow = function(size) { return allocUnsafe(size); }; function fromString(string, encoding) { if (typeof encoding !== "string" || encoding === "") { encoding = "utf8"; } if (!Buffer2.isEncoding(encoding)) { throw new TypeError("Unknown encoding: " + encoding); } const length = byteLength2(string, encoding) | 0; let buf = createBuffer(length); const actual = buf.write(string, encoding); if (actual !== length) { buf = buf.slice(0, actual); } return buf; } function fromArrayLike(array) { const length = array.length < 0 ? 0 : checked(array.length) | 0; const buf = createBuffer(length); for (let i2 = 0; i2 < length; i2 += 1) { buf[i2] = array[i2] & 255; } return buf; } function fromArrayView(arrayView) { if (isInstance(arrayView, GlobalUint8Array)) { const copy = new GlobalUint8Array(arrayView); return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength); } return fromArrayLike(arrayView); } function fromArrayBuffer(array, byteOffset, length) { if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('"offset" is outside of buffer bounds'); } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('"length" is outside of buffer bounds'); } let buf; if (byteOffset === void 0 && length === void 0) { buf = new GlobalUint8Array(array); } else if (length === void 0) { buf = new GlobalUint8Array(array, byteOffset); } else { buf = new GlobalUint8Array(array, byteOffset, length); } Object.setPrototypeOf(buf, Buffer2.prototype); return buf; } function fromObject(obj) { if (Buffer2.isBuffer(obj)) { const len2 = checked(obj.length) | 0; const buf = createBuffer(len2); if (buf.length === 0) { return buf; } obj.copy(buf, 0, 0, len2); return buf; } if (obj.length !== void 0) { if (typeof obj.length !== "number" || numberIsNaN(obj.length)) { return createBuffer(0); } return fromArrayLike(obj); } if (obj.type === "Buffer" && Array.isArray(obj.data)) { return fromArrayLike(obj.data); } } function checked(length) { if (length >= K_MAX_LENGTH) { throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes"); } return length | 0; } function SlowBuffer(length) { if (+length != length) { length = 0; } return Buffer2.alloc(+length); } Buffer2.isBuffer = function isBuffer(b) { return b != null && b._isBuffer === true && b !== Buffer2.prototype; }; Buffer2.compare = function compare(a, b) { if (isInstance(a, GlobalUint8Array)) a = Buffer2.from(a, a.offset, a.byteLength); if (isInstance(b, GlobalUint8Array)) b = Buffer2.from(b, b.offset, b.byteLength); if (!Buffer2.isBuffer(a) || !Buffer2.isBuffer(b)) { throw new TypeError( 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' ); } if (a === b) return 0; let x = a.length; let y = b.length; for (let i2 = 0, len2 = Math.min(x, y); i2 < len2; ++i2) { if (a[i2] !== b[i2]) { x = a[i2]; y = b[i2]; break; } } if (x < y) return -1; if (y < x) return 1; return 0; }; Buffer2.isEncoding = function isEncoding(encoding) { switch (String(encoding).toLowerCase()) { case "hex": case "utf8": case "utf-8": case "ascii": case "latin1": case "binary": case "base64": case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return true; default: return false; } }; Buffer2.concat = function concat(list, length) { if (!Array.isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers'); } if (list.length === 0) { return Buffer2.alloc(0); } let i2; if (length === void 0) { length = 0; for (i2 = 0; i2 < list.length; ++i2) { length += list[i2].length; } } const buffer2 = Buffer2.allocUnsafe(length); let pos = 0; for (i2 = 0; i2 < list.length; ++i2) { let buf = list[i2]; if (isInstance(buf, GlobalUint8Array)) { if (pos + buf.length > buffer2.length) { if (!Buffer2.isBuffer(buf)) buf = Buffer2.from(buf); buf.copy(buffer2, pos); } else { GlobalUint8Array.prototype.set.call( buffer2, buf, pos ); } } else if (!Buffer2.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers'); } else { buf.copy(buffer2, pos); } pos += buf.length; } return buffer2; }; function byteLength2(string, encoding) { if (Buffer2.isBuffer(string)) { return string.length; } if (GlobalArrayBuffer.isView(string) || isInstance(string, GlobalArrayBuffer)) { return string.byteLength; } if (typeof string !== "string") { throw new TypeError( 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string ); } const len2 = string.length; const mustMatch = arguments.length > 2 && arguments[2] === true; if (!mustMatch && len2 === 0) return 0; let loweredCase = false; for (; ; ) { switch (encoding) { case "ascii": case "latin1": case "binary": return len2; case "utf8": case "utf-8": return utf8ToBytes(string).length; case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return len2 * 2; case "hex": return len2 >>> 1; case "base64": return base64ToBytes(string).length; default: if (loweredCase) { return mustMatch ? -1 : utf8ToBytes(string).length; } encoding = ("" + encoding).toLowerCase(); loweredCase = true; } } } Buffer2.byteLength = byteLength2; function slowToString(encoding, start, end) { let loweredCase = false; if (start === void 0 || start < 0) { start = 0; } if (start > this.length) { return ""; } if (end === void 0 || end > this.length) { end = this.length; } if (end <= 0) { return ""; } end >>>= 0; start >>>= 0; if (end <= start) { return ""; } if (!encoding) encoding = "utf8"; while (true) { switch (encoding) { case "hex": return hexSlice(this, start, end); case "utf8": case "utf-8": return utf8Slice(this, start, end); case "ascii": return asciiSlice(this, start, end); case "latin1": case "binary": return latin1Slice(this, start, end); case "base64": return base64Slice(this, start, end); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return utf16leSlice(this, start, end); default: if (loweredCase) throw new TypeError("Unknown encoding: " + encoding); encoding = (encoding + "").toLowerCase(); loweredCase = true; } } } Buffer2.prototype._isBuffer = true; function swap(b, n, m) { const i2 = b[n]; b[n] = b[m]; b[m] = i2; } Buffer2.prototype.swap16 = function swap16() { const len2 = this.length; if (len2 % 2 !== 0) { throw new RangeError("Buffer size must be a multiple of 16-bits"); } for (let i2 = 0; i2 < len2; i2 += 2) { swap(this, i2, i2 + 1); } return this; }; Buffer2.prototype.swap32 = function swap32() { const len2 = this.length; if (len2 % 4 !== 0) { throw new RangeError("Buffer size must be a multiple of 32-bits"); } for (let i2 = 0; i2 < len2; i2 += 4) { swap(this, i2, i2 + 3); swap(this, i2 + 1, i2 + 2); } return this; }; Buffer2.prototype.swap64 = function swap64() { const len2 = this.length; if (len2 % 8 !== 0) { throw new RangeError("Buffer size must be a multiple of 64-bits"); } for (let i2 = 0; i2 < len2; i2 += 8) { swap(this, i2, i2 + 7); swap(this, i2 + 1, i2 + 6); swap(this, i2 + 2, i2 + 5); swap(this, i2 + 3, i2 + 4); } return this; }; Buffer2.prototype.toString = function toString2() { const length = this.length; if (length === 0) return ""; if (arguments.length === 0) return utf8Slice(this, 0, length); return slowToString.apply(this, arguments); }; Buffer2.prototype.toLocaleString = Buffer2.prototype.toString; Buffer2.prototype.equals = function equals2(b) { if (!Buffer2.isBuffer(b)) throw new TypeError("Argument must be a Buffer"); if (this === b) return true; return Buffer2.compare(this, b) === 0; }; Buffer2.prototype.inspect = function inspect() { let str = ""; const max2 = exports$12.INSPECT_MAX_BYTES; str = this.toString("hex", 0, max2).replace(/(.{2})/g, "$1 ").trim(); if (this.length > max2) str += " ... "; return ""; }; if (customInspectSymbol) { Buffer2.prototype[customInspectSymbol] = Buffer2.prototype.inspect; } Buffer2.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { if (isInstance(target, GlobalUint8Array)) { target = Buffer2.from(target, target.offset, target.byteLength); } if (!Buffer2.isBuffer(target)) { throw new TypeError( 'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target ); } if (start === void 0) { start = 0; } if (end === void 0) { end = target ? target.length : 0; } if (thisStart === void 0) { thisStart = 0; } if (thisEnd === void 0) { thisEnd = this.length; } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError("out of range index"); } if (thisStart >= thisEnd && start >= end) { return 0; } if (thisStart >= thisEnd) { return -1; } if (start >= end) { return 1; } start >>>= 0; end >>>= 0; thisStart >>>= 0; thisEnd >>>= 0; if (this === target) return 0; let x = thisEnd - thisStart; let y = end - start; const len2 = Math.min(x, y); const thisCopy = this.slice(thisStart, thisEnd); const targetCopy = target.slice(start, end); for (let i2 = 0; i2 < len2; ++i2) { if (thisCopy[i2] !== targetCopy[i2]) { x = thisCopy[i2]; y = targetCopy[i2]; break; } } if (x < y) return -1; if (y < x) return 1; return 0; }; function bidirectionalIndexOf(buffer2, val, byteOffset, encoding, dir) { if (buffer2.length === 0) return -1; if (typeof byteOffset === "string") { encoding = byteOffset; byteOffset = 0; } else if (byteOffset > 2147483647) { byteOffset = 2147483647; } else if (byteOffset < -2147483648) { byteOffset = -2147483648; } byteOffset = +byteOffset; if (numberIsNaN(byteOffset)) { byteOffset = dir ? 0 : buffer2.length - 1; } if (byteOffset < 0) byteOffset = buffer2.length + byteOffset; if (byteOffset >= buffer2.length) { if (dir) return -1; else byteOffset = buffer2.length - 1; } else if (byteOffset < 0) { if (dir) byteOffset = 0; else return -1; } if (typeof val === "string") { val = Buffer2.from(val, encoding); } if (Buffer2.isBuffer(val)) { if (val.length === 0) { return -1; } return arrayIndexOf(buffer2, val, byteOffset, encoding, dir); } else if (typeof val === "number") { val = val & 255; if (typeof GlobalUint8Array.prototype.indexOf === "function") { if (dir) { return GlobalUint8Array.prototype.indexOf.call(buffer2, val, byteOffset); } else { return GlobalUint8Array.prototype.lastIndexOf.call(buffer2, val, byteOffset); } } return arrayIndexOf(buffer2, [val], byteOffset, encoding, dir); } throw new TypeError("val must be string, number or Buffer"); } function arrayIndexOf(arr, val, byteOffset, encoding, dir) { let indexSize = 1; let arrLength = arr.length; let valLength = val.length; if (encoding !== void 0) { encoding = String(encoding).toLowerCase(); if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") { if (arr.length < 2 || val.length < 2) { return -1; } indexSize = 2; arrLength /= 2; valLength /= 2; byteOffset /= 2; } } function read(buf, i3) { if (indexSize === 1) { return buf[i3]; } else { return buf.readUInt16BE(i3 * indexSize); } } let i2; if (dir) { let foundIndex = -1; for (i2 = byteOffset; i2 < arrLength; i2++) { if (read(arr, i2) === read(val, foundIndex === -1 ? 0 : i2 - foundIndex)) { if (foundIndex === -1) foundIndex = i2; if (i2 - foundIndex + 1 === valLength) return foundIndex * indexSize; } else { if (foundIndex !== -1) i2 -= i2 - foundIndex; foundIndex = -1; } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; for (i2 = byteOffset; i2 >= 0; i2--) { let found = true; for (let j = 0; j < valLength; j++) { if (read(arr, i2 + j) !== read(val, j)) { found = false; break; } } if (found) return i2; } } return -1; } Buffer2.prototype.includes = function includes(val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1; }; Buffer2.prototype.indexOf = function indexOf2(val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true); }; Buffer2.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false); }; function hexWrite(buf, string, offset, length) { offset = Number(offset) || 0; const remaining = buf.length - offset; if (!length) { length = remaining; } else { length = Number(length); if (length > remaining) { length = remaining; } } const strLen = string.length; if (length > strLen / 2) { length = strLen / 2; } let i2; for (i2 = 0; i2 < length; ++i2) { const parsed = parseInt(string.substr(i2 * 2, 2), 16); if (numberIsNaN(parsed)) return i2; buf[offset + i2] = parsed; } return i2; } function utf8Write(buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); } function asciiWrite(buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length); } function base64Write(buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length); } function ucs2Write(buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); } Buffer2.prototype.write = function write(string, offset, length, encoding) { if (offset === void 0) { encoding = "utf8"; length = this.length; offset = 0; } else if (length === void 0 && typeof offset === "string") { encoding = offset; length = this.length; offset = 0; } else if (isFinite(offset)) { offset = offset >>> 0; if (isFinite(length)) { length = length >>> 0; if (encoding === void 0) encoding = "utf8"; } else { encoding = length; length = void 0; } } else { throw new Error( "Buffer.write(string, encoding, offset[, length]) is no longer supported" ); } const remaining = this.length - offset; if (length === void 0 || length > remaining) length = remaining; if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { throw new RangeError("Attempt to write outside buffer bounds"); } if (!encoding) encoding = "utf8"; let loweredCase = false; for (; ; ) { switch (encoding) { case "hex": return hexWrite(this, string, offset, length); case "utf8": case "utf-8": return utf8Write(this, string, offset, length); case "ascii": case "latin1": case "binary": return asciiWrite(this, string, offset, length); case "base64": return base64Write(this, string, offset, length); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return ucs2Write(this, string, offset, length); default: if (loweredCase) throw new TypeError("Unknown encoding: " + encoding); encoding = ("" + encoding).toLowerCase(); loweredCase = true; } } }; Buffer2.prototype.toJSON = function toJSON() { return { type: "Buffer", data: Array.prototype.slice.call(this._arr || this, 0) }; }; function base64Slice(buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf); } else { return base64.fromByteArray(buf.slice(start, end)); } } function utf8Slice(buf, start, end) { end = Math.min(buf.length, end); const res = []; let i2 = start; while (i2 < end) { const firstByte = buf[i2]; let codePoint = null; let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1; if (i2 + bytesPerSequence <= end) { let secondByte, thirdByte, fourthByte, tempCodePoint; switch (bytesPerSequence) { case 1: if (firstByte < 128) { codePoint = firstByte; } break; case 2: secondByte = buf[i2 + 1]; if ((secondByte & 192) === 128) { tempCodePoint = (firstByte & 31) << 6 | secondByte & 63; if (tempCodePoint > 127) { codePoint = tempCodePoint; } } break; case 3: secondByte = buf[i2 + 1]; thirdByte = buf[i2 + 2]; if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) { tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63; if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) { codePoint = tempCodePoint; } } break; case 4: secondByte = buf[i2 + 1]; thirdByte = buf[i2 + 2]; fourthByte = buf[i2 + 3]; if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) { tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63; if (tempCodePoint > 65535 && tempCodePoint < 1114112) { codePoint = tempCodePoint; } } } } if (codePoint === null) { codePoint = 65533; bytesPerSequence = 1; } else if (codePoint > 65535) { codePoint -= 65536; res.push(codePoint >>> 10 & 1023 | 55296); codePoint = 56320 | codePoint & 1023; } res.push(codePoint); i2 += bytesPerSequence; } return decodeCodePointsArray(res); } const MAX_ARGUMENTS_LENGTH = 4096; function decodeCodePointsArray(codePoints) { const len2 = codePoints.length; if (len2 <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints); } let res = ""; let i2 = 0; while (i2 < len2) { res += String.fromCharCode.apply( String, codePoints.slice(i2, i2 += MAX_ARGUMENTS_LENGTH) ); } return res; } function asciiSlice(buf, start, end) { let ret = ""; end = Math.min(buf.length, end); for (let i2 = start; i2 < end; ++i2) { ret += String.fromCharCode(buf[i2] & 127); } return ret; } function latin1Slice(buf, start, end) { let ret = ""; end = Math.min(buf.length, end); for (let i2 = start; i2 < end; ++i2) { ret += String.fromCharCode(buf[i2]); } return ret; } function hexSlice(buf, start, end) { const len2 = buf.length; if (!start || start < 0) start = 0; if (!end || end < 0 || end > len2) end = len2; let out = ""; for (let i2 = start; i2 < end; ++i2) { out += hexSliceLookupTable[buf[i2]]; } return out; } function utf16leSlice(buf, start, end) { const bytes = buf.slice(start, end); let res = ""; for (let i2 = 0; i2 < bytes.length - 1; i2 += 2) { res += String.fromCharCode(bytes[i2] + bytes[i2 + 1] * 256); } return res; } Buffer2.prototype.slice = function slice(start, end) { const len2 = this.length; start = ~~start; end = end === void 0 ? len2 : ~~end; if (start < 0) { start += len2; if (start < 0) start = 0; } else if (start > len2) { start = len2; } if (end < 0) { end += len2; if (end < 0) end = 0; } else if (end > len2) { end = len2; } if (end < start) end = start; const newBuf = this.subarray(start, end); Object.setPrototypeOf(newBuf, Buffer2.prototype); return newBuf; }; function checkOffset(offset, ext, length) { if (offset % 1 !== 0 || offset < 0) throw new RangeError("offset is not uint"); if (offset + ext > length) throw new RangeError("Trying to access beyond buffer length"); } Buffer2.prototype.readUintLE = Buffer2.prototype.readUIntLE = function readUIntLE(offset, byteLength3, noAssert) { offset = offset >>> 0; byteLength3 = byteLength3 >>> 0; if (!noAssert) checkOffset(offset, byteLength3, this.length); let val = this[offset]; let mul = 1; let i2 = 0; while (++i2 < byteLength3 && (mul *= 256)) { val += this[offset + i2] * mul; } return val; }; Buffer2.prototype.readUintBE = Buffer2.prototype.readUIntBE = function readUIntBE(offset, byteLength3, noAssert) { offset = offset >>> 0; byteLength3 = byteLength3 >>> 0; if (!noAssert) { checkOffset(offset, byteLength3, this.length); } let val = this[offset + --byteLength3]; let mul = 1; while (byteLength3 > 0 && (mul *= 256)) { val += this[offset + --byteLength3] * mul; } return val; }; Buffer2.prototype.readUint8 = Buffer2.prototype.readUInt8 = function readUInt8(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 1, this.length); return this[offset]; }; Buffer2.prototype.readUint16LE = Buffer2.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] | this[offset + 1] << 8; }; Buffer2.prototype.readUint16BE = Buffer2.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] << 8 | this[offset + 1]; }; Buffer2.prototype.readUint32LE = Buffer2.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216; }; Buffer2.prototype.readUint32BE = Buffer2.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); }; Buffer2.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24; const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24; return BigInt(lo) + (BigInt(hi) << BigInt(32)); }); Buffer2.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last; return (BigInt(hi) << BigInt(32)) + BigInt(lo); }); Buffer2.prototype.readIntLE = function readIntLE(offset, byteLength3, noAssert) { offset = offset >>> 0; byteLength3 = byteLength3 >>> 0; if (!noAssert) checkOffset(offset, byteLength3, this.length); let val = this[offset]; let mul = 1; let i2 = 0; while (++i2 < byteLength3 && (mul *= 256)) { val += this[offset + i2] * mul; } mul *= 128; if (val >= mul) val -= Math.pow(2, 8 * byteLength3); return val; }; Buffer2.prototype.readIntBE = function readIntBE(offset, byteLength3, noAssert) { offset = offset >>> 0; byteLength3 = byteLength3 >>> 0; if (!noAssert) checkOffset(offset, byteLength3, this.length); let i2 = byteLength3; let mul = 1; let val = this[offset + --i2]; while (i2 > 0 && (mul *= 256)) { val += this[offset + --i2] * mul; } mul *= 128; if (val >= mul) val -= Math.pow(2, 8 * byteLength3); return val; }; Buffer2.prototype.readInt8 = function readInt8(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 1, this.length); if (!(this[offset] & 128)) return this[offset]; return (255 - this[offset] + 1) * -1; }; Buffer2.prototype.readInt16LE = function readInt16LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); const val = this[offset] | this[offset + 1] << 8; return val & 32768 ? val | 4294901760 : val; }; Buffer2.prototype.readInt16BE = function readInt16BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); const val = this[offset + 1] | this[offset] << 8; return val & 32768 ? val | 4294901760 : val; }; Buffer2.prototype.readInt32LE = function readInt32LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; }; Buffer2.prototype.readInt32BE = function readInt32BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; }; Buffer2.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24); return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24); }); Buffer2.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const val = (first << 24) + // Overflow this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last); }); Buffer2.prototype.readFloatLE = function readFloatLE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return ieee754$1.read(this, offset, true, 23, 4); }; Buffer2.prototype.readFloatBE = function readFloatBE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return ieee754$1.read(this, offset, false, 23, 4); }; Buffer2.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 8, this.length); return ieee754$1.read(this, offset, true, 52, 8); }; Buffer2.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 8, this.length); return ieee754$1.read(this, offset, false, 52, 8); }; function checkInt(buf, value, offset, ext, max2, min2) { if (!Buffer2.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); if (value > max2 || value < min2) throw new RangeError('"value" argument is out of bounds'); if (offset + ext > buf.length) throw new RangeError("Index out of range"); } Buffer2.prototype.writeUintLE = Buffer2.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength3, noAssert) { value = +value; offset = offset >>> 0; byteLength3 = byteLength3 >>> 0; if (!noAssert) { const maxBytes = Math.pow(2, 8 * byteLength3) - 1; checkInt(this, value, offset, byteLength3, maxBytes, 0); } let mul = 1; let i2 = 0; this[offset] = value & 255; while (++i2 < byteLength3 && (mul *= 256)) { this[offset + i2] = value / mul & 255; } return offset + byteLength3; }; Buffer2.prototype.writeUintBE = Buffer2.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength3, noAssert) { value = +value; offset = offset >>> 0; byteLength3 = byteLength3 >>> 0; if (!noAssert) { const maxBytes = Math.pow(2, 8 * byteLength3) - 1; checkInt(this, value, offset, byteLength3, maxBytes, 0); } let i2 = byteLength3 - 1; let mul = 1; this[offset + i2] = value & 255; while (--i2 >= 0 && (mul *= 256)) { this[offset + i2] = value / mul & 255; } return offset + byteLength3; }; Buffer2.prototype.writeUint8 = Buffer2.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 1, 255, 0); this[offset] = value & 255; return offset + 1; }; Buffer2.prototype.writeUint16LE = Buffer2.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 65535, 0); this[offset] = value & 255; this[offset + 1] = value >>> 8; return offset + 2; }; Buffer2.prototype.writeUint16BE = Buffer2.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 65535, 0); this[offset] = value >>> 8; this[offset + 1] = value & 255; return offset + 2; }; Buffer2.prototype.writeUint32LE = Buffer2.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0); this[offset + 3] = value >>> 24; this[offset + 2] = value >>> 16; this[offset + 1] = value >>> 8; this[offset] = value & 255; return offset + 4; }; Buffer2.prototype.writeUint32BE = Buffer2.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0); this[offset] = value >>> 24; this[offset + 1] = value >>> 16; this[offset + 2] = value >>> 8; this[offset + 3] = value & 255; return offset + 4; }; function wrtBigUInt64LE(buf, value, offset, min2, max2) { checkIntBI(value, min2, max2, buf, offset, 7); let lo = Number(value & BigInt(4294967295)); buf[offset++] = lo; lo = lo >> 8; buf[offset++] = lo; lo = lo >> 8; buf[offset++] = lo; lo = lo >> 8; buf[offset++] = lo; let hi = Number(value >> BigInt(32) & BigInt(4294967295)); buf[offset++] = hi; hi = hi >> 8; buf[offset++] = hi; hi = hi >> 8; buf[offset++] = hi; hi = hi >> 8; buf[offset++] = hi; return offset; } function wrtBigUInt64BE(buf, value, offset, min2, max2) { checkIntBI(value, min2, max2, buf, offset, 7); let lo = Number(value & BigInt(4294967295)); buf[offset + 7] = lo; lo = lo >> 8; buf[offset + 6] = lo; lo = lo >> 8; buf[offset + 5] = lo; lo = lo >> 8; buf[offset + 4] = lo; let hi = Number(value >> BigInt(32) & BigInt(4294967295)); buf[offset + 3] = hi; hi = hi >> 8; buf[offset + 2] = hi; hi = hi >> 8; buf[offset + 1] = hi; hi = hi >> 8; buf[offset] = hi; return offset + 8; } Buffer2.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) { return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); }); Buffer2.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) { return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); }); Buffer2.prototype.writeIntLE = function writeIntLE(value, offset, byteLength3, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { const limit = Math.pow(2, 8 * byteLength3 - 1); checkInt(this, value, offset, byteLength3, limit - 1, -limit); } let i2 = 0; let mul = 1; let sub = 0; this[offset] = value & 255; while (++i2 < byteLength3 && (mul *= 256)) { if (value < 0 && sub === 0 && this[offset + i2 - 1] !== 0) { sub = 1; } this[offset + i2] = (value / mul >> 0) - sub & 255; } return offset + byteLength3; }; Buffer2.prototype.writeIntBE = function writeIntBE(value, offset, byteLength3, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { const limit = Math.pow(2, 8 * byteLength3 - 1); checkInt(this, value, offset, byteLength3, limit - 1, -limit); } let i2 = byteLength3 - 1; let mul = 1; let sub = 0; this[offset + i2] = value & 255; while (--i2 >= 0 && (mul *= 256)) { if (value < 0 && sub === 0 && this[offset + i2 + 1] !== 0) { sub = 1; } this[offset + i2] = (value / mul >> 0) - sub & 255; } return offset + byteLength3; }; Buffer2.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 1, 127, -128); if (value < 0) value = 255 + value + 1; this[offset] = value & 255; return offset + 1; }; Buffer2.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768); this[offset] = value & 255; this[offset + 1] = value >>> 8; return offset + 2; }; Buffer2.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768); this[offset] = value >>> 8; this[offset + 1] = value & 255; return offset + 2; }; Buffer2.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648); this[offset] = value & 255; this[offset + 1] = value >>> 8; this[offset + 2] = value >>> 16; this[offset + 3] = value >>> 24; return offset + 4; }; Buffer2.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648); if (value < 0) value = 4294967295 + value + 1; this[offset] = value >>> 24; this[offset + 1] = value >>> 16; this[offset + 2] = value >>> 8; this[offset + 3] = value & 255; return offset + 4; }; Buffer2.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) { return wrtBigUInt64LE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); }); Buffer2.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) { return wrtBigUInt64BE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); }); function checkIEEE754(buf, value, offset, ext, max2, min2) { if (offset + ext > buf.length) throw new RangeError("Index out of range"); if (offset < 0) throw new RangeError("Index out of range"); } function writeFloat(buf, value, offset, littleEndian, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { checkIEEE754(buf, value, offset, 4); } ieee754$1.write(buf, value, offset, littleEndian, 23, 4); return offset + 4; } Buffer2.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert); }; Buffer2.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert); }; function writeDouble(buf, value, offset, littleEndian, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { checkIEEE754(buf, value, offset, 8); } ieee754$1.write(buf, value, offset, littleEndian, 52, 8); return offset + 8; } Buffer2.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert); }; Buffer2.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert); }; Buffer2.prototype.copy = function copy(target, targetStart, start, end) { if (!Buffer2.isBuffer(target)) throw new TypeError("argument should be a Buffer"); if (!start) start = 0; if (!end && end !== 0) end = this.length; if (targetStart >= target.length) targetStart = target.length; if (!targetStart) targetStart = 0; if (end > 0 && end < start) end = start; if (end === start) return 0; if (target.length === 0 || this.length === 0) return 0; if (targetStart < 0) { throw new RangeError("targetStart out of bounds"); } if (start < 0 || start >= this.length) throw new RangeError("Index out of range"); if (end < 0) throw new RangeError("sourceEnd out of bounds"); if (end > this.length) end = this.length; if (target.length - targetStart < end - start) { end = target.length - targetStart + start; } const len2 = end - start; if (this === target && typeof GlobalUint8Array.prototype.copyWithin === "function") { this.copyWithin(targetStart, start, end); } else { GlobalUint8Array.prototype.set.call( target, this.subarray(start, end), targetStart ); } return len2; }; Buffer2.prototype.fill = function fill(val, start, end, encoding) { if (typeof val === "string") { if (typeof start === "string") { encoding = start; start = 0; end = this.length; } else if (typeof end === "string") { encoding = end; end = this.length; } if (encoding !== void 0 && typeof encoding !== "string") { throw new TypeError("encoding must be a string"); } if (typeof encoding === "string" && !Buffer2.isEncoding(encoding)) { throw new TypeError("Unknown encoding: " + encoding); } if (val.length === 1) { const code2 = val.charCodeAt(0); if (encoding === "utf8" && code2 < 128 || encoding === "latin1") { val = code2; } } } else if (typeof val === "number") { val = val & 255; } else if (typeof val === "boolean") { val = Number(val); } if (start < 0 || this.length < start || this.length < end) { throw new RangeError("Out of range index"); } if (end <= start) { return this; } start = start >>> 0; end = end === void 0 ? this.length : end >>> 0; if (!val) val = 0; let i2; if (typeof val === "number") { for (i2 = start; i2 < end; ++i2) { this[i2] = val; } } else { const bytes = Buffer2.isBuffer(val) ? val : Buffer2.from(val, encoding); const len2 = bytes.length; if (len2 === 0) { throw new TypeError('The value "' + val + '" is invalid for argument "value"'); } for (i2 = 0; i2 < end - start; ++i2) { this[i2 + start] = bytes[i2 % len2]; } } return this; }; const errors = {}; function E(sym, getMessage, Base) { errors[sym] = class NodeError extends Base { constructor() { super(); Object.defineProperty(this, "message", { value: getMessage.apply(this, arguments), writable: true, configurable: true }); this.name = `${this.name} [${sym}]`; this.stack; delete this.name; } get code() { return sym; } set code(value) { Object.defineProperty(this, "code", { configurable: true, enumerable: true, value, writable: true }); } toString() { return `${this.name} [${sym}]: ${this.message}`; } }; } E( "ERR_BUFFER_OUT_OF_BOUNDS", function(name) { if (name) { return `${name} is outside of buffer bounds`; } return "Attempt to access memory outside buffer bounds"; }, RangeError ); E( "ERR_INVALID_ARG_TYPE", function(name, actual) { return `The "${name}" argument must be of type number. Received type ${typeof actual}`; }, TypeError ); E( "ERR_OUT_OF_RANGE", function(str, range2, input) { let msg = `The value of "${str}" is out of range.`; let received = input; if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { received = addNumericalSeparator(String(input)); } else if (typeof input === "bigint") { received = String(input); if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { received = addNumericalSeparator(received); } received += "n"; } msg += ` It must be ${range2}. Received ${received}`; return msg; }, RangeError ); function addNumericalSeparator(val) { let res = ""; let i2 = val.length; const start = val[0] === "-" ? 1 : 0; for (; i2 >= start + 4; i2 -= 3) { res = `_${val.slice(i2 - 3, i2)}${res}`; } return `${val.slice(0, i2)}${res}`; } function checkBounds(buf, offset, byteLength3) { validateNumber(offset, "offset"); if (buf[offset] === void 0 || buf[offset + byteLength3] === void 0) { boundsError(offset, buf.length - (byteLength3 + 1)); } } function checkIntBI(value, min2, max2, buf, offset, byteLength3) { if (value > max2 || value < min2) { const n = typeof min2 === "bigint" ? "n" : ""; let range2; { if (min2 === 0 || min2 === BigInt(0)) { range2 = `>= 0${n} and < 2${n} ** ${(byteLength3 + 1) * 8}${n}`; } else { range2 = `>= -(2${n} ** ${(byteLength3 + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength3 + 1) * 8 - 1}${n}`; } } throw new errors.ERR_OUT_OF_RANGE("value", range2, value); } checkBounds(buf, offset, byteLength3); } function validateNumber(value, name) { if (typeof value !== "number") { throw new errors.ERR_INVALID_ARG_TYPE(name, "number", value); } } function boundsError(value, length, type2) { if (Math.floor(value) !== value) { validateNumber(value, type2); throw new errors.ERR_OUT_OF_RANGE("offset", "an integer", value); } if (length < 0) { throw new errors.ERR_BUFFER_OUT_OF_BOUNDS(); } throw new errors.ERR_OUT_OF_RANGE( "offset", `>= ${0} and <= ${length}`, value ); } const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; function base64clean(str) { str = str.split("=")[0]; str = str.trim().replace(INVALID_BASE64_RE, ""); if (str.length < 2) return ""; while (str.length % 4 !== 0) { str = str + "="; } return str; } function utf8ToBytes(string, units) { units = units || Infinity; let codePoint; const length = string.length; let leadSurrogate = null; const bytes = []; for (let i2 = 0; i2 < length; ++i2) { codePoint = string.charCodeAt(i2); if (codePoint > 55295 && codePoint < 57344) { if (!leadSurrogate) { if (codePoint > 56319) { if ((units -= 3) > -1) bytes.push(239, 191, 189); continue; } else if (i2 + 1 === length) { if ((units -= 3) > -1) bytes.push(239, 191, 189); continue; } leadSurrogate = codePoint; continue; } if (codePoint < 56320) { if ((units -= 3) > -1) bytes.push(239, 191, 189); leadSurrogate = codePoint; continue; } codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536; } else if (leadSurrogate) { if ((units -= 3) > -1) bytes.push(239, 191, 189); } leadSurrogate = null; if (codePoint < 128) { if ((units -= 1) < 0) break; bytes.push(codePoint); } else if (codePoint < 2048) { if ((units -= 2) < 0) break; bytes.push( codePoint >> 6 | 192, codePoint & 63 | 128 ); } else if (codePoint < 65536) { if ((units -= 3) < 0) break; bytes.push( codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128 ); } else if (codePoint < 1114112) { if ((units -= 4) < 0) break; bytes.push( codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128 ); } else { throw new Error("Invalid code point"); } } return bytes; } function asciiToBytes(str) { const byteArray = []; for (let i2 = 0; i2 < str.length; ++i2) { byteArray.push(str.charCodeAt(i2) & 255); } return byteArray; } function utf16leToBytes(str, units) { let c, hi, lo; const byteArray = []; for (let i2 = 0; i2 < str.length; ++i2) { if ((units -= 2) < 0) break; c = str.charCodeAt(i2); hi = c >> 8; lo = c % 256; byteArray.push(lo); byteArray.push(hi); } return byteArray; } function base64ToBytes(str) { return base64.toByteArray(base64clean(str)); } function blitBuffer(src, dst, offset, length) { let i2; for (i2 = 0; i2 < length; ++i2) { if (i2 + offset >= dst.length || i2 >= src.length) break; dst[i2 + offset] = src[i2]; } return i2; } function isInstance(obj, type2) { return obj instanceof type2 || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type2.name; } function numberIsNaN(obj) { return obj !== obj; } const hexSliceLookupTable = (function() { const alphabet = "0123456789abcdef"; const table = new Array(256); for (let i2 = 0; i2 < 16; ++i2) { const i16 = i2 * 16; for (let j = 0; j < 16; ++j) { table[i16 + j] = alphabet[i2] + alphabet[j]; } } return table; })(); function defineBigIntMethod(fn) { return typeof BigInt === "undefined" ? BufferBigIntNotDefined : fn; } function BufferBigIntNotDefined() { throw new Error("BigInt not supported"); } })(buffer$1); const Buffer = buffer$1.Buffer; var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var events$1 = { exports: {} }; var hasRequiredEvents; function requireEvents() { if (hasRequiredEvents) return events$1.exports; hasRequiredEvents = 1; var R = typeof Reflect === "object" ? Reflect : null; var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys; if (R && typeof R.ownKeys === "function") { ReflectOwnKeys = R.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) { return value !== value; }; function EventEmitter2() { EventEmitter2.init.call(this); } events$1.exports = EventEmitter2; events$1.exports.once = once; EventEmitter2.EventEmitter = EventEmitter2; EventEmitter2.prototype._events = void 0; EventEmitter2.prototype._eventsCount = 0; EventEmitter2.prototype._maxListeners = void 0; var defaultMaxListeners = 10; function checkListener(listener) { if (typeof listener !== "function") { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter2, "defaultMaxListeners", { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "."); } defaultMaxListeners = arg; } }); EventEmitter2.init = function() { if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || void 0; }; EventEmitter2.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + "."); } this._maxListeners = n; return this; }; function _getMaxListeners(that) { if (that._maxListeners === void 0) return EventEmitter2.defaultMaxListeners; return that._maxListeners; } EventEmitter2.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners(this); }; EventEmitter2.prototype.emit = function emit(type2) { var args = []; for (var i2 = 1; i2 < arguments.length; i2++) args.push(arguments[i2]); var doError = type2 === "error"; var events2 = this._events; if (events2 !== void 0) doError = doError && events2.error === void 0; else if (!doError) return false; if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { throw er; } var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : "")); err.context = er; throw err; } var handler = events2[type2]; if (handler === void 0) return false; if (typeof handler === "function") { ReflectApply(handler, this, args); } else { var len2 = handler.length; var listeners = arrayClone(handler, len2); for (var i2 = 0; i2 < len2; ++i2) ReflectApply(listeners[i2], this, args); } return true; }; function _addListener(target, type2, listener, prepend) { var m; var events2; var existing; checkListener(listener); events2 = target._events; if (events2 === void 0) { events2 = target._events = /* @__PURE__ */ Object.create(null); target._eventsCount = 0; } else { if (events2.newListener !== void 0) { target.emit( "newListener", type2, listener.listener ? listener.listener : listener ); events2 = target._events; } existing = events2[type2]; } if (existing === void 0) { existing = events2[type2] = listener; ++target._eventsCount; } else { if (typeof existing === "function") { existing = events2[type2] = prepend ? [listener, existing] : [existing, listener]; } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } m = _getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type2) + " listeners added. Use emitter.setMaxListeners() to increase limit"); w.name = "MaxListenersExceededWarning"; w.emitter = target; w.type = type2; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter2.prototype.addListener = function addListener(type2, listener) { return _addListener(this, type2, listener, false); }; EventEmitter2.prototype.on = EventEmitter2.prototype.addListener; EventEmitter2.prototype.prependListener = function prependListener(type2, listener) { return _addListener(this, type2, listener, true); }; function onceWrapper() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap(target, type2, listener) { var state2 = { fired: false, wrapFn: void 0, target, type: type2, listener }; var wrapped = onceWrapper.bind(state2); wrapped.listener = listener; state2.wrapFn = wrapped; return wrapped; } EventEmitter2.prototype.once = function once2(type2, listener) { checkListener(listener); this.on(type2, _onceWrap(this, type2, listener)); return this; }; EventEmitter2.prototype.prependOnceListener = function prependOnceListener(type2, listener) { checkListener(listener); this.prependListener(type2, _onceWrap(this, type2, listener)); return this; }; EventEmitter2.prototype.removeListener = function removeListener(type2, listener) { var list, events2, position, i2, originalListener; checkListener(listener); events2 = this._events; if (events2 === void 0) return this; list = events2[type2]; if (list === void 0) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else { delete events2[type2]; if (events2.removeListener) this.emit("removeListener", type2, list.listener || listener); } } else if (typeof list !== "function") { position = -1; for (i2 = list.length - 1; i2 >= 0; i2--) { if (list[i2] === listener || list[i2].listener === listener) { originalListener = list[i2].listener; position = i2; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne(list, position); } if (list.length === 1) events2[type2] = list[0]; if (events2.removeListener !== void 0) this.emit("removeListener", type2, originalListener || listener); } return this; }; EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener; EventEmitter2.prototype.removeAllListeners = function removeAllListeners(type2) { var listeners, events2, i2; events2 = this._events; if (events2 === void 0) return this; if (events2.removeListener === void 0) { if (arguments.length === 0) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } else if (events2[type2] !== void 0) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else delete events2[type2]; } return this; } if (arguments.length === 0) { var keys2 = Object.keys(events2); var key2; for (i2 = 0; i2 < keys2.length; ++i2) { key2 = keys2[i2]; if (key2 === "removeListener") continue; this.removeAllListeners(key2); } this.removeAllListeners("removeListener"); this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; return this; } listeners = events2[type2]; if (typeof listeners === "function") { this.removeListener(type2, listeners); } else if (listeners !== void 0) { for (i2 = listeners.length - 1; i2 >= 0; i2--) { this.removeListener(type2, listeners[i2]); } } return this; }; function _listeners(target, type2, unwrap) { var events2 = target._events; if (events2 === void 0) return []; var evlistener = events2[type2]; if (evlistener === void 0) return []; if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter2.prototype.listeners = function listeners(type2) { return _listeners(this, type2, true); }; EventEmitter2.prototype.rawListeners = function rawListeners(type2) { return _listeners(this, type2, false); }; EventEmitter2.listenerCount = function(emitter, type2) { if (typeof emitter.listenerCount === "function") { return emitter.listenerCount(type2); } else { return listenerCount.call(emitter, type2); } }; EventEmitter2.prototype.listenerCount = listenerCount; function listenerCount(type2) { var events2 = this._events; if (events2 !== void 0) { var evlistener = events2[type2]; if (typeof evlistener === "function") { return 1; } else if (evlistener !== void 0) { return evlistener.length; } } return 0; } EventEmitter2.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i2 = 0; i2 < n; ++i2) copy[i2] = arr[i2]; return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i2 = 0; i2 < ret.length; ++i2) { ret[i2] = arr[i2].listener || arr[i2]; } return ret; } function once(emitter, name) { return new Promise(function(resolve, reject) { function errorListener(err) { emitter.removeListener(name, resolver); reject(err); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve([].slice.call(arguments)); } eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== "error") { addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === "function") { eventTargetAgnosticAddListener(emitter, "error", handler, flags); } } function eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, function wrapListener(arg) { if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } return events$1.exports; } var inherits_browser = { exports: {} }; var hasRequiredInherits_browser; function requireInherits_browser() { if (hasRequiredInherits_browser) return inherits_browser.exports; hasRequiredInherits_browser = 1; if (typeof Object.create === "function") { inherits_browser.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); } }; } else { inherits_browser.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; var TempCtor = function() { }; TempCtor.prototype = superCtor.prototype; ctor.prototype = new TempCtor(); ctor.prototype.constructor = ctor; } }; } return inherits_browser.exports; } var streamBrowser$1; var hasRequiredStreamBrowser$1; function requireStreamBrowser$1() { if (hasRequiredStreamBrowser$1) return streamBrowser$1; hasRequiredStreamBrowser$1 = 1; streamBrowser$1 = requireEvents().EventEmitter; return streamBrowser$1; } var dist = {}; var hasRequiredDist; function requireDist() { if (hasRequiredDist) return dist; hasRequiredDist = 1; (function(exports$12) { Object.defineProperties(exports$12, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); var buffer2 = {}; var base64Js2 = {}; base64Js2.byteLength = byteLength2; base64Js2.toByteArray = toByteArray2; base64Js2.fromByteArray = fromByteArray2; var lookup2 = []; var revLookup2 = []; var Arr2 = typeof Uint8Array !== "undefined" ? Uint8Array : Array; var code2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for (var i2 = 0, len2 = code2.length; i2 < len2; ++i2) { lookup2[i2] = code2[i2]; revLookup2[code2.charCodeAt(i2)] = i2; } revLookup2["-".charCodeAt(0)] = 62; revLookup2["_".charCodeAt(0)] = 63; function getLens2(b64) { var len3 = b64.length; if (len3 % 4 > 0) { throw new Error("Invalid string. Length must be a multiple of 4"); } var validLen = b64.indexOf("="); if (validLen === -1) validLen = len3; var placeHoldersLen = validLen === len3 ? 0 : 4 - validLen % 4; return [validLen, placeHoldersLen]; } function byteLength2(b64) { var lens = getLens2(b64); var validLen = lens[0]; var placeHoldersLen = lens[1]; return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; } function _byteLength2(b64, validLen, placeHoldersLen) { return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; } function toByteArray2(b64) { var tmp; var lens = getLens2(b64); var validLen = lens[0]; var placeHoldersLen = lens[1]; var arr = new Arr2(_byteLength2(b64, validLen, placeHoldersLen)); var curByte = 0; var len3 = placeHoldersLen > 0 ? validLen - 4 : validLen; var i3; for (i3 = 0; i3 < len3; i3 += 4) { tmp = revLookup2[b64.charCodeAt(i3)] << 18 | revLookup2[b64.charCodeAt(i3 + 1)] << 12 | revLookup2[b64.charCodeAt(i3 + 2)] << 6 | revLookup2[b64.charCodeAt(i3 + 3)]; arr[curByte++] = tmp >> 16 & 255; arr[curByte++] = tmp >> 8 & 255; arr[curByte++] = tmp & 255; } if (placeHoldersLen === 2) { tmp = revLookup2[b64.charCodeAt(i3)] << 2 | revLookup2[b64.charCodeAt(i3 + 1)] >> 4; arr[curByte++] = tmp & 255; } if (placeHoldersLen === 1) { tmp = revLookup2[b64.charCodeAt(i3)] << 10 | revLookup2[b64.charCodeAt(i3 + 1)] << 4 | revLookup2[b64.charCodeAt(i3 + 2)] >> 2; arr[curByte++] = tmp >> 8 & 255; arr[curByte++] = tmp & 255; } return arr; } function tripletToBase642(num) { return lookup2[num >> 18 & 63] + lookup2[num >> 12 & 63] + lookup2[num >> 6 & 63] + lookup2[num & 63]; } function encodeChunk2(uint8, start, end) { var tmp; var output = []; for (var i3 = start; i3 < end; i3 += 3) { tmp = (uint8[i3] << 16 & 16711680) + (uint8[i3 + 1] << 8 & 65280) + (uint8[i3 + 2] & 255); output.push(tripletToBase642(tmp)); } return output.join(""); } function fromByteArray2(uint8) { var tmp; var len3 = uint8.length; var extraBytes = len3 % 3; var parts = []; var maxChunkLength = 16383; for (var i3 = 0, len22 = len3 - extraBytes; i3 < len22; i3 += maxChunkLength) { parts.push(encodeChunk2(uint8, i3, i3 + maxChunkLength > len22 ? len22 : i3 + maxChunkLength)); } if (extraBytes === 1) { tmp = uint8[len3 - 1]; parts.push( lookup2[tmp >> 2] + lookup2[tmp << 4 & 63] + "==" ); } else if (extraBytes === 2) { tmp = (uint8[len3 - 2] << 8) + uint8[len3 - 1]; parts.push( lookup2[tmp >> 10] + lookup2[tmp >> 4 & 63] + lookup2[tmp << 2 & 63] + "=" ); } return parts.join(""); } var ieee7542 = {}; ieee7542.read = function(buffer3, offset, isLE, mLen, nBytes) { var e, m; var eLen = nBytes * 8 - mLen - 1; var eMax = (1 << eLen) - 1; var eBias = eMax >> 1; var nBits = -7; var i3 = isLE ? nBytes - 1 : 0; var d = isLE ? -1 : 1; var s = buffer3[offset + i3]; i3 += d; e = s & (1 << -nBits) - 1; s >>= -nBits; nBits += eLen; for (; nBits > 0; e = e * 256 + buffer3[offset + i3], i3 += d, nBits -= 8) { } m = e & (1 << -nBits) - 1; e >>= -nBits; nBits += mLen; for (; nBits > 0; m = m * 256 + buffer3[offset + i3], i3 += d, nBits -= 8) { } if (e === 0) { e = 1 - eBias; } else if (e === eMax) { return m ? NaN : (s ? -1 : 1) * Infinity; } else { m = m + Math.pow(2, mLen); e = e - eBias; } return (s ? -1 : 1) * m * Math.pow(2, e - mLen); }; ieee7542.write = function(buffer3, value, offset, isLE, mLen, nBytes) { var e, m, c; var eLen = nBytes * 8 - mLen - 1; var eMax = (1 << eLen) - 1; var eBias = eMax >> 1; var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; var i3 = isLE ? 0 : nBytes - 1; var d = isLE ? 1 : -1; var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; value = Math.abs(value); if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0; e = eMax; } else { e = Math.floor(Math.log(value) / Math.LN2); if (value * (c = Math.pow(2, -e)) < 1) { e--; c *= 2; } if (e + eBias >= 1) { value += rt / c; } else { value += rt * Math.pow(2, 1 - eBias); } if (value * c >= 2) { e++; c /= 2; } if (e + eBias >= eMax) { m = 0; e = eMax; } else if (e + eBias >= 1) { m = (value * c - 1) * Math.pow(2, mLen); e = e + eBias; } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); e = 0; } } for (; mLen >= 8; buffer3[offset + i3] = m & 255, i3 += d, m /= 256, mLen -= 8) { } e = e << mLen | m; eLen += mLen; for (; eLen > 0; buffer3[offset + i3] = e & 255, i3 += d, e /= 256, eLen -= 8) { } buffer3[offset + i3 - d] |= s * 128; }; (function(exports$13) { const base64 = base64Js2; const ieee754$1 = ieee7542; const customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null; exports$13.Buffer = Buffer3; exports$13.SlowBuffer = SlowBuffer; exports$13.INSPECT_MAX_BYTES = 50; const K_MAX_LENGTH = 2147483647; exports$13.kMaxLength = K_MAX_LENGTH; const { Uint8Array: GlobalUint8Array, ArrayBuffer: GlobalArrayBuffer, SharedArrayBuffer: GlobalSharedArrayBuffer } = globalThis; Buffer3.TYPED_ARRAY_SUPPORT = typedArraySupport(); if (!Buffer3.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") { console.error( "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support." ); } function typedArraySupport() { try { const arr = new GlobalUint8Array(1); const proto = { foo: function() { return 42; } }; Object.setPrototypeOf(proto, GlobalUint8Array.prototype); Object.setPrototypeOf(arr, proto); return arr.foo() === 42; } catch (e) { return false; } } Object.defineProperty(Buffer3.prototype, "parent", { enumerable: true, get: function() { if (!Buffer3.isBuffer(this)) return void 0; return this.buffer; } }); Object.defineProperty(Buffer3.prototype, "offset", { enumerable: true, get: function() { if (!Buffer3.isBuffer(this)) return void 0; return this.byteOffset; } }); function createBuffer(length) { if (length > K_MAX_LENGTH) { throw new RangeError('The value "' + length + '" is invalid for option "size"'); } const buf = new GlobalUint8Array(length); Object.setPrototypeOf(buf, Buffer3.prototype); return buf; } function Buffer3(arg, encodingOrOffset, length) { if (typeof arg === "number") { if (typeof encodingOrOffset === "string") { throw new TypeError( 'The "string" argument must be of type string. Received type number' ); } return allocUnsafe(arg); } return from(arg, encodingOrOffset, length); } Buffer3.poolSize = 8192; function from(value, encodingOrOffset, length) { if (typeof value === "string") { return fromString(value, encodingOrOffset); } if (GlobalArrayBuffer.isView(value)) { return fromArrayView(value); } if (value == null) { throw new TypeError( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value ); } if (isInstance(value, GlobalArrayBuffer) || value && isInstance(value.buffer, GlobalArrayBuffer)) { return fromArrayBuffer(value, encodingOrOffset, length); } if (typeof GlobalSharedArrayBuffer !== "undefined" && (isInstance(value, GlobalSharedArrayBuffer) || value && isInstance(value.buffer, GlobalSharedArrayBuffer))) { return fromArrayBuffer(value, encodingOrOffset, length); } if (typeof value === "number") { throw new TypeError( 'The "value" argument must not be of type number. Received type number' ); } const valueOf = value.valueOf && value.valueOf(); if (valueOf != null && valueOf !== value) { return Buffer3.from(valueOf, encodingOrOffset, length); } const b = fromObject(value); if (b) return b; if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") { return Buffer3.from(value[Symbol.toPrimitive]("string"), encodingOrOffset, length); } throw new TypeError( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value ); } Buffer3.from = function(value, encodingOrOffset, length) { return from(value, encodingOrOffset, length); }; Object.setPrototypeOf(Buffer3.prototype, GlobalUint8Array.prototype); Object.setPrototypeOf(Buffer3, GlobalUint8Array); function assertSize(size) { if (typeof size !== "number") { throw new TypeError('"size" argument must be of type number'); } else if (size < 0) { throw new RangeError('The value "' + size + '" is invalid for option "size"'); } } function alloc(size, fill, encoding) { assertSize(size); if (size <= 0) { return createBuffer(size); } if (fill !== void 0) { return typeof encoding === "string" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); } return createBuffer(size); } Buffer3.alloc = function(size, fill, encoding) { return alloc(size, fill, encoding); }; function allocUnsafe(size) { assertSize(size); return createBuffer(size < 0 ? 0 : checked(size) | 0); } Buffer3.allocUnsafe = function(size) { return allocUnsafe(size); }; Buffer3.allocUnsafeSlow = function(size) { return allocUnsafe(size); }; function fromString(string, encoding) { if (typeof encoding !== "string" || encoding === "") { encoding = "utf8"; } if (!Buffer3.isEncoding(encoding)) { throw new TypeError("Unknown encoding: " + encoding); } const length = byteLength3(string, encoding) | 0; let buf = createBuffer(length); const actual = buf.write(string, encoding); if (actual !== length) { buf = buf.slice(0, actual); } return buf; } function fromArrayLike(array) { const length = array.length < 0 ? 0 : checked(array.length) | 0; const buf = createBuffer(length); for (let i3 = 0; i3 < length; i3 += 1) { buf[i3] = array[i3] & 255; } return buf; } function fromArrayView(arrayView) { if (isInstance(arrayView, GlobalUint8Array)) { const copy = new GlobalUint8Array(arrayView); return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength); } return fromArrayLike(arrayView); } function fromArrayBuffer(array, byteOffset, length) { if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('"offset" is outside of buffer bounds'); } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('"length" is outside of buffer bounds'); } let buf; if (byteOffset === void 0 && length === void 0) { buf = new GlobalUint8Array(array); } else if (length === void 0) { buf = new GlobalUint8Array(array, byteOffset); } else { buf = new GlobalUint8Array(array, byteOffset, length); } Object.setPrototypeOf(buf, Buffer3.prototype); return buf; } function fromObject(obj) { if (Buffer3.isBuffer(obj)) { const len3 = checked(obj.length) | 0; const buf = createBuffer(len3); if (buf.length === 0) { return buf; } obj.copy(buf, 0, 0, len3); return buf; } if (obj.length !== void 0) { if (typeof obj.length !== "number" || numberIsNaN(obj.length)) { return createBuffer(0); } return fromArrayLike(obj); } if (obj.type === "Buffer" && Array.isArray(obj.data)) { return fromArrayLike(obj.data); } } function checked(length) { if (length >= K_MAX_LENGTH) { throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes"); } return length | 0; } function SlowBuffer(length) { if (+length != length) { length = 0; } return Buffer3.alloc(+length); } Buffer3.isBuffer = function isBuffer(b) { return b != null && b._isBuffer === true && b !== Buffer3.prototype; }; Buffer3.compare = function compare(a, b) { if (isInstance(a, GlobalUint8Array)) a = Buffer3.from(a, a.offset, a.byteLength); if (isInstance(b, GlobalUint8Array)) b = Buffer3.from(b, b.offset, b.byteLength); if (!Buffer3.isBuffer(a) || !Buffer3.isBuffer(b)) { throw new TypeError( 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' ); } if (a === b) return 0; let x = a.length; let y = b.length; for (let i3 = 0, len3 = Math.min(x, y); i3 < len3; ++i3) { if (a[i3] !== b[i3]) { x = a[i3]; y = b[i3]; break; } } if (x < y) return -1; if (y < x) return 1; return 0; }; Buffer3.isEncoding = function isEncoding(encoding) { switch (String(encoding).toLowerCase()) { case "hex": case "utf8": case "utf-8": case "ascii": case "latin1": case "binary": case "base64": case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return true; default: return false; } }; Buffer3.concat = function concat(list, length) { if (!Array.isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers'); } if (list.length === 0) { return Buffer3.alloc(0); } let i3; if (length === void 0) { length = 0; for (i3 = 0; i3 < list.length; ++i3) { length += list[i3].length; } } const buffer3 = Buffer3.allocUnsafe(length); let pos = 0; for (i3 = 0; i3 < list.length; ++i3) { let buf = list[i3]; if (isInstance(buf, GlobalUint8Array)) { if (pos + buf.length > buffer3.length) { if (!Buffer3.isBuffer(buf)) buf = Buffer3.from(buf); buf.copy(buffer3, pos); } else { GlobalUint8Array.prototype.set.call( buffer3, buf, pos ); } } else if (!Buffer3.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers'); } else { buf.copy(buffer3, pos); } pos += buf.length; } return buffer3; }; function byteLength3(string, encoding) { if (Buffer3.isBuffer(string)) { return string.length; } if (GlobalArrayBuffer.isView(string) || isInstance(string, GlobalArrayBuffer)) { return string.byteLength; } if (typeof string !== "string") { throw new TypeError( 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string ); } const len3 = string.length; const mustMatch = arguments.length > 2 && arguments[2] === true; if (!mustMatch && len3 === 0) return 0; let loweredCase = false; for (; ; ) { switch (encoding) { case "ascii": case "latin1": case "binary": return len3; case "utf8": case "utf-8": return utf8ToBytes(string).length; case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return len3 * 2; case "hex": return len3 >>> 1; case "base64": return base64ToBytes(string).length; default: if (loweredCase) { return mustMatch ? -1 : utf8ToBytes(string).length; } encoding = ("" + encoding).toLowerCase(); loweredCase = true; } } } Buffer3.byteLength = byteLength3; function slowToString(encoding, start, end) { let loweredCase = false; if (start === void 0 || start < 0) { start = 0; } if (start > this.length) { return ""; } if (end === void 0 || end > this.length) { end = this.length; } if (end <= 0) { return ""; } end >>>= 0; start >>>= 0; if (end <= start) { return ""; } if (!encoding) encoding = "utf8"; while (true) { switch (encoding) { case "hex": return hexSlice(this, start, end); case "utf8": case "utf-8": return utf8Slice(this, start, end); case "ascii": return asciiSlice(this, start, end); case "latin1": case "binary": return latin1Slice(this, start, end); case "base64": return base64Slice(this, start, end); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return utf16leSlice(this, start, end); default: if (loweredCase) throw new TypeError("Unknown encoding: " + encoding); encoding = (encoding + "").toLowerCase(); loweredCase = true; } } } Buffer3.prototype._isBuffer = true; function swap(b, n, m) { const i3 = b[n]; b[n] = b[m]; b[m] = i3; } Buffer3.prototype.swap16 = function swap16() { const len3 = this.length; if (len3 % 2 !== 0) { throw new RangeError("Buffer size must be a multiple of 16-bits"); } for (let i3 = 0; i3 < len3; i3 += 2) { swap(this, i3, i3 + 1); } return this; }; Buffer3.prototype.swap32 = function swap32() { const len3 = this.length; if (len3 % 4 !== 0) { throw new RangeError("Buffer size must be a multiple of 32-bits"); } for (let i3 = 0; i3 < len3; i3 += 4) { swap(this, i3, i3 + 3); swap(this, i3 + 1, i3 + 2); } return this; }; Buffer3.prototype.swap64 = function swap64() { const len3 = this.length; if (len3 % 8 !== 0) { throw new RangeError("Buffer size must be a multiple of 64-bits"); } for (let i3 = 0; i3 < len3; i3 += 8) { swap(this, i3, i3 + 7); swap(this, i3 + 1, i3 + 6); swap(this, i3 + 2, i3 + 5); swap(this, i3 + 3, i3 + 4); } return this; }; Buffer3.prototype.toString = function toString2() { const length = this.length; if (length === 0) return ""; if (arguments.length === 0) return utf8Slice(this, 0, length); return slowToString.apply(this, arguments); }; Buffer3.prototype.toLocaleString = Buffer3.prototype.toString; Buffer3.prototype.equals = function equals2(b) { if (!Buffer3.isBuffer(b)) throw new TypeError("Argument must be a Buffer"); if (this === b) return true; return Buffer3.compare(this, b) === 0; }; Buffer3.prototype.inspect = function inspect() { let str = ""; const max2 = exports$13.INSPECT_MAX_BYTES; str = this.toString("hex", 0, max2).replace(/(.{2})/g, "$1 ").trim(); if (this.length > max2) str += " ... "; return ""; }; if (customInspectSymbol) { Buffer3.prototype[customInspectSymbol] = Buffer3.prototype.inspect; } Buffer3.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { if (isInstance(target, GlobalUint8Array)) { target = Buffer3.from(target, target.offset, target.byteLength); } if (!Buffer3.isBuffer(target)) { throw new TypeError( 'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target ); } if (start === void 0) { start = 0; } if (end === void 0) { end = target ? target.length : 0; } if (thisStart === void 0) { thisStart = 0; } if (thisEnd === void 0) { thisEnd = this.length; } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError("out of range index"); } if (thisStart >= thisEnd && start >= end) { return 0; } if (thisStart >= thisEnd) { return -1; } if (start >= end) { return 1; } start >>>= 0; end >>>= 0; thisStart >>>= 0; thisEnd >>>= 0; if (this === target) return 0; let x = thisEnd - thisStart; let y = end - start; const len3 = Math.min(x, y); const thisCopy = this.slice(thisStart, thisEnd); const targetCopy = target.slice(start, end); for (let i3 = 0; i3 < len3; ++i3) { if (thisCopy[i3] !== targetCopy[i3]) { x = thisCopy[i3]; y = targetCopy[i3]; break; } } if (x < y) return -1; if (y < x) return 1; return 0; }; function bidirectionalIndexOf(buffer3, val, byteOffset, encoding, dir) { if (buffer3.length === 0) return -1; if (typeof byteOffset === "string") { encoding = byteOffset; byteOffset = 0; } else if (byteOffset > 2147483647) { byteOffset = 2147483647; } else if (byteOffset < -2147483648) { byteOffset = -2147483648; } byteOffset = +byteOffset; if (numberIsNaN(byteOffset)) { byteOffset = dir ? 0 : buffer3.length - 1; } if (byteOffset < 0) byteOffset = buffer3.length + byteOffset; if (byteOffset >= buffer3.length) { if (dir) return -1; else byteOffset = buffer3.length - 1; } else if (byteOffset < 0) { if (dir) byteOffset = 0; else return -1; } if (typeof val === "string") { val = Buffer3.from(val, encoding); } if (Buffer3.isBuffer(val)) { if (val.length === 0) { return -1; } return arrayIndexOf(buffer3, val, byteOffset, encoding, dir); } else if (typeof val === "number") { val = val & 255; if (typeof GlobalUint8Array.prototype.indexOf === "function") { if (dir) { return GlobalUint8Array.prototype.indexOf.call(buffer3, val, byteOffset); } else { return GlobalUint8Array.prototype.lastIndexOf.call(buffer3, val, byteOffset); } } return arrayIndexOf(buffer3, [val], byteOffset, encoding, dir); } throw new TypeError("val must be string, number or Buffer"); } function arrayIndexOf(arr, val, byteOffset, encoding, dir) { let indexSize = 1; let arrLength = arr.length; let valLength = val.length; if (encoding !== void 0) { encoding = String(encoding).toLowerCase(); if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") { if (arr.length < 2 || val.length < 2) { return -1; } indexSize = 2; arrLength /= 2; valLength /= 2; byteOffset /= 2; } } function read(buf, i4) { if (indexSize === 1) { return buf[i4]; } else { return buf.readUInt16BE(i4 * indexSize); } } let i3; if (dir) { let foundIndex = -1; for (i3 = byteOffset; i3 < arrLength; i3++) { if (read(arr, i3) === read(val, foundIndex === -1 ? 0 : i3 - foundIndex)) { if (foundIndex === -1) foundIndex = i3; if (i3 - foundIndex + 1 === valLength) return foundIndex * indexSize; } else { if (foundIndex !== -1) i3 -= i3 - foundIndex; foundIndex = -1; } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; for (i3 = byteOffset; i3 >= 0; i3--) { let found = true; for (let j = 0; j < valLength; j++) { if (read(arr, i3 + j) !== read(val, j)) { found = false; break; } } if (found) return i3; } } return -1; } Buffer3.prototype.includes = function includes(val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1; }; Buffer3.prototype.indexOf = function indexOf2(val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true); }; Buffer3.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false); }; function hexWrite(buf, string, offset, length) { offset = Number(offset) || 0; const remaining = buf.length - offset; if (!length) { length = remaining; } else { length = Number(length); if (length > remaining) { length = remaining; } } const strLen = string.length; if (length > strLen / 2) { length = strLen / 2; } let i3; for (i3 = 0; i3 < length; ++i3) { const parsed = parseInt(string.substr(i3 * 2, 2), 16); if (numberIsNaN(parsed)) return i3; buf[offset + i3] = parsed; } return i3; } function utf8Write(buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); } function asciiWrite(buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length); } function base64Write(buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length); } function ucs2Write(buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); } Buffer3.prototype.write = function write(string, offset, length, encoding) { if (offset === void 0) { encoding = "utf8"; length = this.length; offset = 0; } else if (length === void 0 && typeof offset === "string") { encoding = offset; length = this.length; offset = 0; } else if (isFinite(offset)) { offset = offset >>> 0; if (isFinite(length)) { length = length >>> 0; if (encoding === void 0) encoding = "utf8"; } else { encoding = length; length = void 0; } } else { throw new Error( "Buffer.write(string, encoding, offset[, length]) is no longer supported" ); } const remaining = this.length - offset; if (length === void 0 || length > remaining) length = remaining; if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { throw new RangeError("Attempt to write outside buffer bounds"); } if (!encoding) encoding = "utf8"; let loweredCase = false; for (; ; ) { switch (encoding) { case "hex": return hexWrite(this, string, offset, length); case "utf8": case "utf-8": return utf8Write(this, string, offset, length); case "ascii": case "latin1": case "binary": return asciiWrite(this, string, offset, length); case "base64": return base64Write(this, string, offset, length); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return ucs2Write(this, string, offset, length); default: if (loweredCase) throw new TypeError("Unknown encoding: " + encoding); encoding = ("" + encoding).toLowerCase(); loweredCase = true; } } }; Buffer3.prototype.toJSON = function toJSON() { return { type: "Buffer", data: Array.prototype.slice.call(this._arr || this, 0) }; }; function base64Slice(buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf); } else { return base64.fromByteArray(buf.slice(start, end)); } } function utf8Slice(buf, start, end) { end = Math.min(buf.length, end); const res = []; let i3 = start; while (i3 < end) { const firstByte = buf[i3]; let codePoint = null; let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1; if (i3 + bytesPerSequence <= end) { let secondByte, thirdByte, fourthByte, tempCodePoint; switch (bytesPerSequence) { case 1: if (firstByte < 128) { codePoint = firstByte; } break; case 2: secondByte = buf[i3 + 1]; if ((secondByte & 192) === 128) { tempCodePoint = (firstByte & 31) << 6 | secondByte & 63; if (tempCodePoint > 127) { codePoint = tempCodePoint; } } break; case 3: secondByte = buf[i3 + 1]; thirdByte = buf[i3 + 2]; if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) { tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63; if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) { codePoint = tempCodePoint; } } break; case 4: secondByte = buf[i3 + 1]; thirdByte = buf[i3 + 2]; fourthByte = buf[i3 + 3]; if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) { tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63; if (tempCodePoint > 65535 && tempCodePoint < 1114112) { codePoint = tempCodePoint; } } } } if (codePoint === null) { codePoint = 65533; bytesPerSequence = 1; } else if (codePoint > 65535) { codePoint -= 65536; res.push(codePoint >>> 10 & 1023 | 55296); codePoint = 56320 | codePoint & 1023; } res.push(codePoint); i3 += bytesPerSequence; } return decodeCodePointsArray(res); } const MAX_ARGUMENTS_LENGTH = 4096; function decodeCodePointsArray(codePoints) { const len3 = codePoints.length; if (len3 <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints); } let res = ""; let i3 = 0; while (i3 < len3) { res += String.fromCharCode.apply( String, codePoints.slice(i3, i3 += MAX_ARGUMENTS_LENGTH) ); } return res; } function asciiSlice(buf, start, end) { let ret = ""; end = Math.min(buf.length, end); for (let i3 = start; i3 < end; ++i3) { ret += String.fromCharCode(buf[i3] & 127); } return ret; } function latin1Slice(buf, start, end) { let ret = ""; end = Math.min(buf.length, end); for (let i3 = start; i3 < end; ++i3) { ret += String.fromCharCode(buf[i3]); } return ret; } function hexSlice(buf, start, end) { const len3 = buf.length; if (!start || start < 0) start = 0; if (!end || end < 0 || end > len3) end = len3; let out = ""; for (let i3 = start; i3 < end; ++i3) { out += hexSliceLookupTable[buf[i3]]; } return out; } function utf16leSlice(buf, start, end) { const bytes = buf.slice(start, end); let res = ""; for (let i3 = 0; i3 < bytes.length - 1; i3 += 2) { res += String.fromCharCode(bytes[i3] + bytes[i3 + 1] * 256); } return res; } Buffer3.prototype.slice = function slice(start, end) { const len3 = this.length; start = ~~start; end = end === void 0 ? len3 : ~~end; if (start < 0) { start += len3; if (start < 0) start = 0; } else if (start > len3) { start = len3; } if (end < 0) { end += len3; if (end < 0) end = 0; } else if (end > len3) { end = len3; } if (end < start) end = start; const newBuf = this.subarray(start, end); Object.setPrototypeOf(newBuf, Buffer3.prototype); return newBuf; }; function checkOffset(offset, ext, length) { if (offset % 1 !== 0 || offset < 0) throw new RangeError("offset is not uint"); if (offset + ext > length) throw new RangeError("Trying to access beyond buffer length"); } Buffer3.prototype.readUintLE = Buffer3.prototype.readUIntLE = function readUIntLE(offset, byteLength4, noAssert) { offset = offset >>> 0; byteLength4 = byteLength4 >>> 0; if (!noAssert) checkOffset(offset, byteLength4, this.length); let val = this[offset]; let mul = 1; let i3 = 0; while (++i3 < byteLength4 && (mul *= 256)) { val += this[offset + i3] * mul; } return val; }; Buffer3.prototype.readUintBE = Buffer3.prototype.readUIntBE = function readUIntBE(offset, byteLength4, noAssert) { offset = offset >>> 0; byteLength4 = byteLength4 >>> 0; if (!noAssert) { checkOffset(offset, byteLength4, this.length); } let val = this[offset + --byteLength4]; let mul = 1; while (byteLength4 > 0 && (mul *= 256)) { val += this[offset + --byteLength4] * mul; } return val; }; Buffer3.prototype.readUint8 = Buffer3.prototype.readUInt8 = function readUInt8(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 1, this.length); return this[offset]; }; Buffer3.prototype.readUint16LE = Buffer3.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] | this[offset + 1] << 8; }; Buffer3.prototype.readUint16BE = Buffer3.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] << 8 | this[offset + 1]; }; Buffer3.prototype.readUint32LE = Buffer3.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216; }; Buffer3.prototype.readUint32BE = Buffer3.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); }; Buffer3.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24; const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24; return BigInt(lo) + (BigInt(hi) << BigInt(32)); }); Buffer3.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last; return (BigInt(hi) << BigInt(32)) + BigInt(lo); }); Buffer3.prototype.readIntLE = function readIntLE(offset, byteLength4, noAssert) { offset = offset >>> 0; byteLength4 = byteLength4 >>> 0; if (!noAssert) checkOffset(offset, byteLength4, this.length); let val = this[offset]; let mul = 1; let i3 = 0; while (++i3 < byteLength4 && (mul *= 256)) { val += this[offset + i3] * mul; } mul *= 128; if (val >= mul) val -= Math.pow(2, 8 * byteLength4); return val; }; Buffer3.prototype.readIntBE = function readIntBE(offset, byteLength4, noAssert) { offset = offset >>> 0; byteLength4 = byteLength4 >>> 0; if (!noAssert) checkOffset(offset, byteLength4, this.length); let i3 = byteLength4; let mul = 1; let val = this[offset + --i3]; while (i3 > 0 && (mul *= 256)) { val += this[offset + --i3] * mul; } mul *= 128; if (val >= mul) val -= Math.pow(2, 8 * byteLength4); return val; }; Buffer3.prototype.readInt8 = function readInt8(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 1, this.length); if (!(this[offset] & 128)) return this[offset]; return (255 - this[offset] + 1) * -1; }; Buffer3.prototype.readInt16LE = function readInt16LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); const val = this[offset] | this[offset + 1] << 8; return val & 32768 ? val | 4294901760 : val; }; Buffer3.prototype.readInt16BE = function readInt16BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 2, this.length); const val = this[offset + 1] | this[offset] << 8; return val & 32768 ? val | 4294901760 : val; }; Buffer3.prototype.readInt32LE = function readInt32LE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; }; Buffer3.prototype.readInt32BE = function readInt32BE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; }; Buffer3.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24); return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24); }); Buffer3.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) { offset = offset >>> 0; validateNumber(offset, "offset"); const first = this[offset]; const last = this[offset + 7]; if (first === void 0 || last === void 0) { boundsError(offset, this.length - 8); } const val = (first << 24) + // Overflow this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset]; return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last); }); Buffer3.prototype.readFloatLE = function readFloatLE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return ieee754$1.read(this, offset, true, 23, 4); }; Buffer3.prototype.readFloatBE = function readFloatBE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 4, this.length); return ieee754$1.read(this, offset, false, 23, 4); }; Buffer3.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 8, this.length); return ieee754$1.read(this, offset, true, 52, 8); }; Buffer3.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { offset = offset >>> 0; if (!noAssert) checkOffset(offset, 8, this.length); return ieee754$1.read(this, offset, false, 52, 8); }; function checkInt(buf, value, offset, ext, max2, min2) { if (!Buffer3.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); if (value > max2 || value < min2) throw new RangeError('"value" argument is out of bounds'); if (offset + ext > buf.length) throw new RangeError("Index out of range"); } Buffer3.prototype.writeUintLE = Buffer3.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength4, noAssert) { value = +value; offset = offset >>> 0; byteLength4 = byteLength4 >>> 0; if (!noAssert) { const maxBytes = Math.pow(2, 8 * byteLength4) - 1; checkInt(this, value, offset, byteLength4, maxBytes, 0); } let mul = 1; let i3 = 0; this[offset] = value & 255; while (++i3 < byteLength4 && (mul *= 256)) { this[offset + i3] = value / mul & 255; } return offset + byteLength4; }; Buffer3.prototype.writeUintBE = Buffer3.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength4, noAssert) { value = +value; offset = offset >>> 0; byteLength4 = byteLength4 >>> 0; if (!noAssert) { const maxBytes = Math.pow(2, 8 * byteLength4) - 1; checkInt(this, value, offset, byteLength4, maxBytes, 0); } let i3 = byteLength4 - 1; let mul = 1; this[offset + i3] = value & 255; while (--i3 >= 0 && (mul *= 256)) { this[offset + i3] = value / mul & 255; } return offset + byteLength4; }; Buffer3.prototype.writeUint8 = Buffer3.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 1, 255, 0); this[offset] = value & 255; return offset + 1; }; Buffer3.prototype.writeUint16LE = Buffer3.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 65535, 0); this[offset] = value & 255; this[offset + 1] = value >>> 8; return offset + 2; }; Buffer3.prototype.writeUint16BE = Buffer3.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 65535, 0); this[offset] = value >>> 8; this[offset + 1] = value & 255; return offset + 2; }; Buffer3.prototype.writeUint32LE = Buffer3.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0); this[offset + 3] = value >>> 24; this[offset + 2] = value >>> 16; this[offset + 1] = value >>> 8; this[offset] = value & 255; return offset + 4; }; Buffer3.prototype.writeUint32BE = Buffer3.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0); this[offset] = value >>> 24; this[offset + 1] = value >>> 16; this[offset + 2] = value >>> 8; this[offset + 3] = value & 255; return offset + 4; }; function wrtBigUInt64LE(buf, value, offset, min2, max2) { checkIntBI(value, min2, max2, buf, offset, 7); let lo = Number(value & BigInt(4294967295)); buf[offset++] = lo; lo = lo >> 8; buf[offset++] = lo; lo = lo >> 8; buf[offset++] = lo; lo = lo >> 8; buf[offset++] = lo; let hi = Number(value >> BigInt(32) & BigInt(4294967295)); buf[offset++] = hi; hi = hi >> 8; buf[offset++] = hi; hi = hi >> 8; buf[offset++] = hi; hi = hi >> 8; buf[offset++] = hi; return offset; } function wrtBigUInt64BE(buf, value, offset, min2, max2) { checkIntBI(value, min2, max2, buf, offset, 7); let lo = Number(value & BigInt(4294967295)); buf[offset + 7] = lo; lo = lo >> 8; buf[offset + 6] = lo; lo = lo >> 8; buf[offset + 5] = lo; lo = lo >> 8; buf[offset + 4] = lo; let hi = Number(value >> BigInt(32) & BigInt(4294967295)); buf[offset + 3] = hi; hi = hi >> 8; buf[offset + 2] = hi; hi = hi >> 8; buf[offset + 1] = hi; hi = hi >> 8; buf[offset] = hi; return offset + 8; } Buffer3.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) { return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); }); Buffer3.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) { return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt("0xffffffffffffffff")); }); Buffer3.prototype.writeIntLE = function writeIntLE(value, offset, byteLength4, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { const limit = Math.pow(2, 8 * byteLength4 - 1); checkInt(this, value, offset, byteLength4, limit - 1, -limit); } let i3 = 0; let mul = 1; let sub = 0; this[offset] = value & 255; while (++i3 < byteLength4 && (mul *= 256)) { if (value < 0 && sub === 0 && this[offset + i3 - 1] !== 0) { sub = 1; } this[offset + i3] = (value / mul >> 0) - sub & 255; } return offset + byteLength4; }; Buffer3.prototype.writeIntBE = function writeIntBE(value, offset, byteLength4, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { const limit = Math.pow(2, 8 * byteLength4 - 1); checkInt(this, value, offset, byteLength4, limit - 1, -limit); } let i3 = byteLength4 - 1; let mul = 1; let sub = 0; this[offset + i3] = value & 255; while (--i3 >= 0 && (mul *= 256)) { if (value < 0 && sub === 0 && this[offset + i3 + 1] !== 0) { sub = 1; } this[offset + i3] = (value / mul >> 0) - sub & 255; } return offset + byteLength4; }; Buffer3.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 1, 127, -128); if (value < 0) value = 255 + value + 1; this[offset] = value & 255; return offset + 1; }; Buffer3.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768); this[offset] = value & 255; this[offset + 1] = value >>> 8; return offset + 2; }; Buffer3.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768); this[offset] = value >>> 8; this[offset + 1] = value & 255; return offset + 2; }; Buffer3.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648); this[offset] = value & 255; this[offset + 1] = value >>> 8; this[offset + 2] = value >>> 16; this[offset + 3] = value >>> 24; return offset + 4; }; Buffer3.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648); if (value < 0) value = 4294967295 + value + 1; this[offset] = value >>> 24; this[offset + 1] = value >>> 16; this[offset + 2] = value >>> 8; this[offset + 3] = value & 255; return offset + 4; }; Buffer3.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) { return wrtBigUInt64LE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); }); Buffer3.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) { return wrtBigUInt64BE(this, value, offset, -BigInt("0x8000000000000000"), BigInt("0x7fffffffffffffff")); }); function checkIEEE754(buf, value, offset, ext, max2, min2) { if (offset + ext > buf.length) throw new RangeError("Index out of range"); if (offset < 0) throw new RangeError("Index out of range"); } function writeFloat(buf, value, offset, littleEndian, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { checkIEEE754(buf, value, offset, 4); } ieee754$1.write(buf, value, offset, littleEndian, 23, 4); return offset + 4; } Buffer3.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert); }; Buffer3.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert); }; function writeDouble(buf, value, offset, littleEndian, noAssert) { value = +value; offset = offset >>> 0; if (!noAssert) { checkIEEE754(buf, value, offset, 8); } ieee754$1.write(buf, value, offset, littleEndian, 52, 8); return offset + 8; } Buffer3.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert); }; Buffer3.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert); }; Buffer3.prototype.copy = function copy(target, targetStart, start, end) { if (!Buffer3.isBuffer(target)) throw new TypeError("argument should be a Buffer"); if (!start) start = 0; if (!end && end !== 0) end = this.length; if (targetStart >= target.length) targetStart = target.length; if (!targetStart) targetStart = 0; if (end > 0 && end < start) end = start; if (end === start) return 0; if (target.length === 0 || this.length === 0) return 0; if (targetStart < 0) { throw new RangeError("targetStart out of bounds"); } if (start < 0 || start >= this.length) throw new RangeError("Index out of range"); if (end < 0) throw new RangeError("sourceEnd out of bounds"); if (end > this.length) end = this.length; if (target.length - targetStart < end - start) { end = target.length - targetStart + start; } const len3 = end - start; if (this === target && typeof GlobalUint8Array.prototype.copyWithin === "function") { this.copyWithin(targetStart, start, end); } else { GlobalUint8Array.prototype.set.call( target, this.subarray(start, end), targetStart ); } return len3; }; Buffer3.prototype.fill = function fill(val, start, end, encoding) { if (typeof val === "string") { if (typeof start === "string") { encoding = start; start = 0; end = this.length; } else if (typeof end === "string") { encoding = end; end = this.length; } if (encoding !== void 0 && typeof encoding !== "string") { throw new TypeError("encoding must be a string"); } if (typeof encoding === "string" && !Buffer3.isEncoding(encoding)) { throw new TypeError("Unknown encoding: " + encoding); } if (val.length === 1) { const code3 = val.charCodeAt(0); if (encoding === "utf8" && code3 < 128 || encoding === "latin1") { val = code3; } } } else if (typeof val === "number") { val = val & 255; } else if (typeof val === "boolean") { val = Number(val); } if (start < 0 || this.length < start || this.length < end) { throw new RangeError("Out of range index"); } if (end <= start) { return this; } start = start >>> 0; end = end === void 0 ? this.length : end >>> 0; if (!val) val = 0; let i3; if (typeof val === "number") { for (i3 = start; i3 < end; ++i3) { this[i3] = val; } } else { const bytes = Buffer3.isBuffer(val) ? val : Buffer3.from(val, encoding); const len3 = bytes.length; if (len3 === 0) { throw new TypeError('The value "' + val + '" is invalid for argument "value"'); } for (i3 = 0; i3 < end - start; ++i3) { this[i3 + start] = bytes[i3 % len3]; } } return this; }; const errors = {}; function E(sym, getMessage, Base) { errors[sym] = class NodeError extends Base { constructor() { super(); Object.defineProperty(this, "message", { value: getMessage.apply(this, arguments), writable: true, configurable: true }); this.name = `${this.name} [${sym}]`; this.stack; delete this.name; } get code() { return sym; } set code(value) { Object.defineProperty(this, "code", { configurable: true, enumerable: true, value, writable: true }); } toString() { return `${this.name} [${sym}]: ${this.message}`; } }; } E( "ERR_BUFFER_OUT_OF_BOUNDS", function(name) { if (name) { return `${name} is outside of buffer bounds`; } return "Attempt to access memory outside buffer bounds"; }, RangeError ); E( "ERR_INVALID_ARG_TYPE", function(name, actual) { return `The "${name}" argument must be of type number. Received type ${typeof actual}`; }, TypeError ); E( "ERR_OUT_OF_RANGE", function(str, range2, input) { let msg = `The value of "${str}" is out of range.`; let received = input; if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { received = addNumericalSeparator(String(input)); } else if (typeof input === "bigint") { received = String(input); if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { received = addNumericalSeparator(received); } received += "n"; } msg += ` It must be ${range2}. Received ${received}`; return msg; }, RangeError ); function addNumericalSeparator(val) { let res = ""; let i3 = val.length; const start = val[0] === "-" ? 1 : 0; for (; i3 >= start + 4; i3 -= 3) { res = `_${val.slice(i3 - 3, i3)}${res}`; } return `${val.slice(0, i3)}${res}`; } function checkBounds(buf, offset, byteLength4) { validateNumber(offset, "offset"); if (buf[offset] === void 0 || buf[offset + byteLength4] === void 0) { boundsError(offset, buf.length - (byteLength4 + 1)); } } function checkIntBI(value, min2, max2, buf, offset, byteLength4) { if (value > max2 || value < min2) { const n = typeof min2 === "bigint" ? "n" : ""; let range2; { if (min2 === 0 || min2 === BigInt(0)) { range2 = `>= 0${n} and < 2${n} ** ${(byteLength4 + 1) * 8}${n}`; } else { range2 = `>= -(2${n} ** ${(byteLength4 + 1) * 8 - 1}${n}) and < 2 ** ${(byteLength4 + 1) * 8 - 1}${n}`; } } throw new errors.ERR_OUT_OF_RANGE("value", range2, value); } checkBounds(buf, offset, byteLength4); } function validateNumber(value, name) { if (typeof value !== "number") { throw new errors.ERR_INVALID_ARG_TYPE(name, "number", value); } } function boundsError(value, length, type2) { if (Math.floor(value) !== value) { validateNumber(value, type2); throw new errors.ERR_OUT_OF_RANGE("offset", "an integer", value); } if (length < 0) { throw new errors.ERR_BUFFER_OUT_OF_BOUNDS(); } throw new errors.ERR_OUT_OF_RANGE( "offset", `>= ${0} and <= ${length}`, value ); } const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; function base64clean(str) { str = str.split("=")[0]; str = str.trim().replace(INVALID_BASE64_RE, ""); if (str.length < 2) return ""; while (str.length % 4 !== 0) { str = str + "="; } return str; } function utf8ToBytes(string, units) { units = units || Infinity; let codePoint; const length = string.length; let leadSurrogate = null; const bytes = []; for (let i3 = 0; i3 < length; ++i3) { codePoint = string.charCodeAt(i3); if (codePoint > 55295 && codePoint < 57344) { if (!leadSurrogate) { if (codePoint > 56319) { if ((units -= 3) > -1) bytes.push(239, 191, 189); continue; } else if (i3 + 1 === length) { if ((units -= 3) > -1) bytes.push(239, 191, 189); continue; } leadSurrogate = codePoint; continue; } if (codePoint < 56320) { if ((units -= 3) > -1) bytes.push(239, 191, 189); leadSurrogate = codePoint; continue; } codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536; } else if (leadSurrogate) { if ((units -= 3) > -1) bytes.push(239, 191, 189); } leadSurrogate = null; if (codePoint < 128) { if ((units -= 1) < 0) break; bytes.push(codePoint); } else if (codePoint < 2048) { if ((units -= 2) < 0) break; bytes.push( codePoint >> 6 | 192, codePoint & 63 | 128 ); } else if (codePoint < 65536) { if ((units -= 3) < 0) break; bytes.push( codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128 ); } else if (codePoint < 1114112) { if ((units -= 4) < 0) break; bytes.push( codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128 ); } else { throw new Error("Invalid code point"); } } return bytes; } function asciiToBytes(str) { const byteArray = []; for (let i3 = 0; i3 < str.length; ++i3) { byteArray.push(str.charCodeAt(i3) & 255); } return byteArray; } function utf16leToBytes(str, units) { let c, hi, lo; const byteArray = []; for (let i3 = 0; i3 < str.length; ++i3) { if ((units -= 2) < 0) break; c = str.charCodeAt(i3); hi = c >> 8; lo = c % 256; byteArray.push(lo); byteArray.push(hi); } return byteArray; } function base64ToBytes(str) { return base64.toByteArray(base64clean(str)); } function blitBuffer(src, dst, offset, length) { let i3; for (i3 = 0; i3 < length; ++i3) { if (i3 + offset >= dst.length || i3 >= src.length) break; dst[i3 + offset] = src[i3]; } return i3; } function isInstance(obj, type2) { return obj instanceof type2 || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type2.name; } function numberIsNaN(obj) { return obj !== obj; } const hexSliceLookupTable = (function() { const alphabet = "0123456789abcdef"; const table = new Array(256); for (let i3 = 0; i3 < 16; ++i3) { const i16 = i3 * 16; for (let j = 0; j < 16; ++j) { table[i16 + j] = alphabet[i3] + alphabet[j]; } } return table; })(); function defineBigIntMethod(fn) { return typeof BigInt === "undefined" ? BufferBigIntNotDefined : fn; } function BufferBigIntNotDefined() { throw new Error("BigInt not supported"); } })(buffer2); const Buffer2 = buffer2.Buffer; exports$12.Blob = buffer2.Blob; exports$12.BlobOptions = buffer2.BlobOptions; exports$12.Buffer = buffer2.Buffer; exports$12.File = buffer2.File; exports$12.FileOptions = buffer2.FileOptions; exports$12.INSPECT_MAX_BYTES = buffer2.INSPECT_MAX_BYTES; exports$12.SlowBuffer = buffer2.SlowBuffer; exports$12.TranscodeEncoding = buffer2.TranscodeEncoding; exports$12.atob = buffer2.atob; exports$12.btoa = buffer2.btoa; exports$12.constants = buffer2.constants; exports$12.default = Buffer2; exports$12.isAscii = buffer2.isAscii; exports$12.isUtf8 = buffer2.isUtf8; exports$12.kMaxLength = buffer2.kMaxLength; exports$12.kStringMaxLength = buffer2.kStringMaxLength; exports$12.resolveObjectURL = buffer2.resolveObjectURL; exports$12.transcode = buffer2.transcode; })(dist); return dist; } var util$1 = {}; var types = {}; var shams$1; var hasRequiredShams$1; function requireShams$1() { if (hasRequiredShams$1) return shams$1; hasRequiredShams$1 = 1; shams$1 = function hasSymbols2() { if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") { return false; } if (typeof Symbol.iterator === "symbol") { return true; } var obj = {}; var sym = /* @__PURE__ */ Symbol("test"); var symObj = Object(sym); if (typeof sym === "string") { return false; } if (Object.prototype.toString.call(sym) !== "[object Symbol]") { return false; } if (Object.prototype.toString.call(symObj) !== "[object Symbol]") { return false; } var symVal = 42; obj[sym] = symVal; for (var _ in obj) { return false; } if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) { return false; } if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) { return false; } var syms = Object.getOwnPropertySymbols(obj); if (syms.length !== 1 || syms[0] !== sym) { return false; } if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } if (typeof Object.getOwnPropertyDescriptor === "function") { var descriptor = ( /** @type {PropertyDescriptor} */ Object.getOwnPropertyDescriptor(obj, sym) ); if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } } return true; }; return shams$1; } var shams; var hasRequiredShams; function requireShams() { if (hasRequiredShams) return shams; hasRequiredShams = 1; var hasSymbols2 = requireShams$1(); shams = function hasToStringTagShams() { return hasSymbols2() && !!Symbol.toStringTag; }; return shams; } var esObjectAtoms; var hasRequiredEsObjectAtoms; function requireEsObjectAtoms() { if (hasRequiredEsObjectAtoms) return esObjectAtoms; hasRequiredEsObjectAtoms = 1; esObjectAtoms = Object; return esObjectAtoms; } var esErrors; var hasRequiredEsErrors; function requireEsErrors() { if (hasRequiredEsErrors) return esErrors; hasRequiredEsErrors = 1; esErrors = Error; return esErrors; } var _eval; var hasRequired_eval; function require_eval() { if (hasRequired_eval) return _eval; hasRequired_eval = 1; _eval = EvalError; return _eval; } var range; var hasRequiredRange; function requireRange() { if (hasRequiredRange) return range; hasRequiredRange = 1; range = RangeError; return range; } var ref; var hasRequiredRef; function requireRef() { if (hasRequiredRef) return ref; hasRequiredRef = 1; ref = ReferenceError; return ref; } var syntax; var hasRequiredSyntax; function requireSyntax() { if (hasRequiredSyntax) return syntax; hasRequiredSyntax = 1; syntax = SyntaxError; return syntax; } var type; var hasRequiredType; function requireType() { if (hasRequiredType) return type; hasRequiredType = 1; type = TypeError; return type; } var uri; var hasRequiredUri; function requireUri() { if (hasRequiredUri) return uri; hasRequiredUri = 1; uri = URIError; return uri; } var abs; var hasRequiredAbs; function requireAbs() { if (hasRequiredAbs) return abs; hasRequiredAbs = 1; abs = Math.abs; return abs; } var floor; var hasRequiredFloor; function requireFloor() { if (hasRequiredFloor) return floor; hasRequiredFloor = 1; floor = Math.floor; return floor; } var max; var hasRequiredMax; function requireMax() { if (hasRequiredMax) return max; hasRequiredMax = 1; max = Math.max; return max; } var min; var hasRequiredMin; function requireMin() { if (hasRequiredMin) return min; hasRequiredMin = 1; min = Math.min; return min; } var pow; var hasRequiredPow; function requirePow() { if (hasRequiredPow) return pow; hasRequiredPow = 1; pow = Math.pow; return pow; } var round; var hasRequiredRound; function requireRound() { if (hasRequiredRound) return round; hasRequiredRound = 1; round = Math.round; return round; } var _isNaN; var hasRequired_isNaN; function require_isNaN() { if (hasRequired_isNaN) return _isNaN; hasRequired_isNaN = 1; _isNaN = Number.isNaN || function isNaN2(a) { return a !== a; }; return _isNaN; } var sign$1; var hasRequiredSign$1; function requireSign$1() { if (hasRequiredSign$1) return sign$1; hasRequiredSign$1 = 1; var $isNaN = /* @__PURE__ */ require_isNaN(); sign$1 = function sign2(number) { if ($isNaN(number) || number === 0) { return number; } return number < 0 ? -1 : 1; }; return sign$1; } var gOPD; var hasRequiredGOPD; function requireGOPD() { if (hasRequiredGOPD) return gOPD; hasRequiredGOPD = 1; gOPD = Object.getOwnPropertyDescriptor; return gOPD; } var gopd; var hasRequiredGopd; function requireGopd() { if (hasRequiredGopd) return gopd; hasRequiredGopd = 1; var $gOPD = /* @__PURE__ */ requireGOPD(); if ($gOPD) { try { $gOPD([], "length"); } catch (e) { $gOPD = null; } } gopd = $gOPD; return gopd; } var esDefineProperty; var hasRequiredEsDefineProperty; function requireEsDefineProperty() { if (hasRequiredEsDefineProperty) return esDefineProperty; hasRequiredEsDefineProperty = 1; var $defineProperty = Object.defineProperty || false; if ($defineProperty) { try { $defineProperty({}, "a", { value: 1 }); } catch (e) { $defineProperty = false; } } esDefineProperty = $defineProperty; return esDefineProperty; } var hasSymbols; var hasRequiredHasSymbols; function requireHasSymbols() { if (hasRequiredHasSymbols) return hasSymbols; hasRequiredHasSymbols = 1; var origSymbol = typeof Symbol !== "undefined" && Symbol; var hasSymbolSham = requireShams$1(); hasSymbols = function hasNativeSymbols() { if (typeof origSymbol !== "function") { return false; } if (typeof Symbol !== "function") { return false; } if (typeof origSymbol("foo") !== "symbol") { return false; } if (typeof /* @__PURE__ */ Symbol("bar") !== "symbol") { return false; } return hasSymbolSham(); }; return hasSymbols; } var Reflect_getPrototypeOf; var hasRequiredReflect_getPrototypeOf; function requireReflect_getPrototypeOf() { if (hasRequiredReflect_getPrototypeOf) return Reflect_getPrototypeOf; hasRequiredReflect_getPrototypeOf = 1; Reflect_getPrototypeOf = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null; return Reflect_getPrototypeOf; } var Object_getPrototypeOf; var hasRequiredObject_getPrototypeOf; function requireObject_getPrototypeOf() { if (hasRequiredObject_getPrototypeOf) return Object_getPrototypeOf; hasRequiredObject_getPrototypeOf = 1; var $Object = /* @__PURE__ */ requireEsObjectAtoms(); Object_getPrototypeOf = $Object.getPrototypeOf || null; return Object_getPrototypeOf; } var implementation; var hasRequiredImplementation; function requireImplementation() { if (hasRequiredImplementation) return implementation; hasRequiredImplementation = 1; var ERROR_MESSAGE = "Function.prototype.bind called on incompatible "; var toStr = Object.prototype.toString; var max2 = Math.max; var funcType = "[object Function]"; var concatty = function concatty2(a, b) { var arr = []; for (var i2 = 0; i2 < a.length; i2 += 1) { arr[i2] = a[i2]; } for (var j = 0; j < b.length; j += 1) { arr[j + a.length] = b[j]; } return arr; }; var slicy = function slicy2(arrLike, offset) { var arr = []; for (var i2 = offset, j = 0; i2 < arrLike.length; i2 += 1, j += 1) { arr[j] = arrLike[i2]; } return arr; }; var joiny = function(arr, joiner) { var str = ""; for (var i2 = 0; i2 < arr.length; i2 += 1) { str += arr[i2]; if (i2 + 1 < arr.length) { str += joiner; } } return str; }; implementation = function bind(that) { var target = this; if (typeof target !== "function" || toStr.apply(target) !== funcType) { throw new TypeError(ERROR_MESSAGE + target); } var args = slicy(arguments, 1); var bound; var binder = function() { if (this instanceof bound) { var result = target.apply( this, concatty(args, arguments) ); if (Object(result) === result) { return result; } return this; } return target.apply( that, concatty(args, arguments) ); }; var boundLength = max2(0, target.length - args.length); var boundArgs = []; for (var i2 = 0; i2 < boundLength; i2++) { boundArgs[i2] = "$" + i2; } bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder); if (target.prototype) { var Empty = function Empty2() { }; Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; return implementation; } var functionBind; var hasRequiredFunctionBind; function requireFunctionBind() { if (hasRequiredFunctionBind) return functionBind; hasRequiredFunctionBind = 1; var implementation2 = requireImplementation(); functionBind = Function.prototype.bind || implementation2; return functionBind; } var functionCall; var hasRequiredFunctionCall; function requireFunctionCall() { if (hasRequiredFunctionCall) return functionCall; hasRequiredFunctionCall = 1; functionCall = Function.prototype.call; return functionCall; } var functionApply; var hasRequiredFunctionApply; function requireFunctionApply() { if (hasRequiredFunctionApply) return functionApply; hasRequiredFunctionApply = 1; functionApply = Function.prototype.apply; return functionApply; } var reflectApply; var hasRequiredReflectApply; function requireReflectApply() { if (hasRequiredReflectApply) return reflectApply; hasRequiredReflectApply = 1; reflectApply = typeof Reflect !== "undefined" && Reflect && Reflect.apply; return reflectApply; } var actualApply; var hasRequiredActualApply; function requireActualApply() { if (hasRequiredActualApply) return actualApply; hasRequiredActualApply = 1; var bind = requireFunctionBind(); var $apply = requireFunctionApply(); var $call = requireFunctionCall(); var $reflectApply = requireReflectApply(); actualApply = $reflectApply || bind.call($call, $apply); return actualApply; } var callBindApplyHelpers; var hasRequiredCallBindApplyHelpers; function requireCallBindApplyHelpers() { if (hasRequiredCallBindApplyHelpers) return callBindApplyHelpers; hasRequiredCallBindApplyHelpers = 1; var bind = requireFunctionBind(); var $TypeError = /* @__PURE__ */ requireType(); var $call = requireFunctionCall(); var $actualApply = requireActualApply(); callBindApplyHelpers = function callBindBasic(args) { if (args.length < 1 || typeof args[0] !== "function") { throw new $TypeError("a function is required"); } return $actualApply(bind, $call, args); }; return callBindApplyHelpers; } var get$1; var hasRequiredGet; function requireGet() { if (hasRequiredGet) return get$1; hasRequiredGet = 1; var callBind2 = requireCallBindApplyHelpers(); var gOPD2 = /* @__PURE__ */ requireGopd(); var hasProtoAccessor; try { hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ [].__proto__ === Array.prototype; } catch (e) { if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") { throw e; } } var desc = !!hasProtoAccessor && gOPD2 && gOPD2( Object.prototype, /** @type {keyof typeof Object.prototype} */ "__proto__" ); var $Object = Object; var $getPrototypeOf = $Object.getPrototypeOf; get$1 = desc && typeof desc.get === "function" ? callBind2([desc.get]) : typeof $getPrototypeOf === "function" ? ( /** @type {import('./get')} */ function getDunder(value) { return $getPrototypeOf(value == null ? value : $Object(value)); } ) : false; return get$1; } var getProto; var hasRequiredGetProto; function requireGetProto() { if (hasRequiredGetProto) return getProto; hasRequiredGetProto = 1; var reflectGetProto = requireReflect_getPrototypeOf(); var originalGetProto = requireObject_getPrototypeOf(); var getDunderProto = /* @__PURE__ */ requireGet(); getProto = reflectGetProto ? function getProto2(O) { return reflectGetProto(O); } : originalGetProto ? function getProto2(O) { if (!O || typeof O !== "object" && typeof O !== "function") { throw new TypeError("getProto: not an object"); } return originalGetProto(O); } : getDunderProto ? function getProto2(O) { return getDunderProto(O); } : null; return getProto; } var hasown; var hasRequiredHasown; function requireHasown() { if (hasRequiredHasown) return hasown; hasRequiredHasown = 1; var call = Function.prototype.call; var $hasOwn = Object.prototype.hasOwnProperty; var bind = requireFunctionBind(); hasown = bind.call(call, $hasOwn); return hasown; } var getIntrinsic; var hasRequiredGetIntrinsic; function requireGetIntrinsic() { if (hasRequiredGetIntrinsic) return getIntrinsic; hasRequiredGetIntrinsic = 1; var undefined$1; var $Object = /* @__PURE__ */ requireEsObjectAtoms(); var $Error = /* @__PURE__ */ requireEsErrors(); var $EvalError = /* @__PURE__ */ require_eval(); var $RangeError = /* @__PURE__ */ requireRange(); var $ReferenceError = /* @__PURE__ */ requireRef(); var $SyntaxError = /* @__PURE__ */ requireSyntax(); var $TypeError = /* @__PURE__ */ requireType(); var $URIError = /* @__PURE__ */ requireUri(); var abs2 = /* @__PURE__ */ requireAbs(); var floor2 = /* @__PURE__ */ requireFloor(); var max2 = /* @__PURE__ */ requireMax(); var min2 = /* @__PURE__ */ requireMin(); var pow2 = /* @__PURE__ */ requirePow(); var round2 = /* @__PURE__ */ requireRound(); var sign2 = /* @__PURE__ */ requireSign$1(); var $Function = Function; var getEvalledConstructor = function(expressionSyntax) { try { return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")(); } catch (e) { } }; var $gOPD = /* @__PURE__ */ requireGopd(); var $defineProperty = /* @__PURE__ */ requireEsDefineProperty(); var throwTypeError = function() { throw new $TypeError(); }; var ThrowTypeError = $gOPD ? (function() { try { arguments.callee; return throwTypeError; } catch (calleeThrows) { try { return $gOPD(arguments, "callee").get; } catch (gOPDthrows) { return throwTypeError; } } })() : throwTypeError; var hasSymbols2 = requireHasSymbols()(); var getProto2 = requireGetProto(); var $ObjectGPO = requireObject_getPrototypeOf(); var $ReflectGPO = requireReflect_getPrototypeOf(); var $apply = requireFunctionApply(); var $call = requireFunctionCall(); var needsEval = {}; var TypedArray = typeof Uint8Array === "undefined" || !getProto2 ? undefined$1 : getProto2(Uint8Array); var INTRINSICS = { __proto__: null, "%AggregateError%": typeof AggregateError === "undefined" ? undefined$1 : AggregateError, "%Array%": Array, "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined$1 : ArrayBuffer, "%ArrayIteratorPrototype%": hasSymbols2 && getProto2 ? getProto2([][Symbol.iterator]()) : undefined$1, "%AsyncFromSyncIteratorPrototype%": undefined$1, "%AsyncFunction%": needsEval, "%AsyncGenerator%": needsEval, "%AsyncGeneratorFunction%": needsEval, "%AsyncIteratorPrototype%": needsEval, "%Atomics%": typeof Atomics === "undefined" ? undefined$1 : Atomics, "%BigInt%": typeof BigInt === "undefined" ? undefined$1 : BigInt, "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined$1 : BigInt64Array, "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined$1 : BigUint64Array, "%Boolean%": Boolean, "%DataView%": typeof DataView === "undefined" ? undefined$1 : DataView, "%Date%": Date, "%decodeURI%": decodeURI, "%decodeURIComponent%": decodeURIComponent, "%encodeURI%": encodeURI, "%encodeURIComponent%": encodeURIComponent, "%Error%": $Error, "%eval%": eval, // eslint-disable-line no-eval "%EvalError%": $EvalError, "%Float16Array%": typeof Float16Array === "undefined" ? undefined$1 : Float16Array, "%Float32Array%": typeof Float32Array === "undefined" ? undefined$1 : Float32Array, "%Float64Array%": typeof Float64Array === "undefined" ? undefined$1 : Float64Array, "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined$1 : FinalizationRegistry, "%Function%": $Function, "%GeneratorFunction%": needsEval, "%Int8Array%": typeof Int8Array === "undefined" ? undefined$1 : Int8Array, "%Int16Array%": typeof Int16Array === "undefined" ? undefined$1 : Int16Array, "%Int32Array%": typeof Int32Array === "undefined" ? undefined$1 : Int32Array, "%isFinite%": isFinite, "%isNaN%": isNaN, "%IteratorPrototype%": hasSymbols2 && getProto2 ? getProto2(getProto2([][Symbol.iterator]())) : undefined$1, "%JSON%": typeof JSON === "object" ? JSON : undefined$1, "%Map%": typeof Map === "undefined" ? undefined$1 : Map, "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols2 || !getProto2 ? undefined$1 : getProto2((/* @__PURE__ */ new Map())[Symbol.iterator]()), "%Math%": Math, "%Number%": Number, "%Object%": $Object, "%Object.getOwnPropertyDescriptor%": $gOPD, "%parseFloat%": parseFloat, "%parseInt%": parseInt, "%Promise%": typeof Promise === "undefined" ? undefined$1 : Promise, "%Proxy%": typeof Proxy === "undefined" ? undefined$1 : Proxy, "%RangeError%": $RangeError, "%ReferenceError%": $ReferenceError, "%Reflect%": typeof Reflect === "undefined" ? undefined$1 : Reflect, "%RegExp%": RegExp, "%Set%": typeof Set === "undefined" ? undefined$1 : Set, "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols2 || !getProto2 ? undefined$1 : getProto2((/* @__PURE__ */ new Set())[Symbol.iterator]()), "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined$1 : SharedArrayBuffer, "%String%": String, "%StringIteratorPrototype%": hasSymbols2 && getProto2 ? getProto2(""[Symbol.iterator]()) : undefined$1, "%Symbol%": hasSymbols2 ? Symbol : undefined$1, "%SyntaxError%": $SyntaxError, "%ThrowTypeError%": ThrowTypeError, "%TypedArray%": TypedArray, "%TypeError%": $TypeError, "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined$1 : Uint8Array, "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined$1 : Uint8ClampedArray, "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined$1 : Uint16Array, "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined$1 : Uint32Array, "%URIError%": $URIError, "%WeakMap%": typeof WeakMap === "undefined" ? undefined$1 : WeakMap, "%WeakRef%": typeof WeakRef === "undefined" ? undefined$1 : WeakRef, "%WeakSet%": typeof WeakSet === "undefined" ? undefined$1 : WeakSet, "%Function.prototype.call%": $call, "%Function.prototype.apply%": $apply, "%Object.defineProperty%": $defineProperty, "%Object.getPrototypeOf%": $ObjectGPO, "%Math.abs%": abs2, "%Math.floor%": floor2, "%Math.max%": max2, "%Math.min%": min2, "%Math.pow%": pow2, "%Math.round%": round2, "%Math.sign%": sign2, "%Reflect.getPrototypeOf%": $ReflectGPO }; if (getProto2) { try { null.error; } catch (e) { var errorProto = getProto2(getProto2(e)); INTRINSICS["%Error.prototype%"] = errorProto; } } var doEval = function doEval2(name) { var value; if (name === "%AsyncFunction%") { value = getEvalledConstructor("async function () {}"); } else if (name === "%GeneratorFunction%") { value = getEvalledConstructor("function* () {}"); } else if (name === "%AsyncGeneratorFunction%") { value = getEvalledConstructor("async function* () {}"); } else if (name === "%AsyncGenerator%") { var fn = doEval2("%AsyncGeneratorFunction%"); if (fn) { value = fn.prototype; } } else if (name === "%AsyncIteratorPrototype%") { var gen = doEval2("%AsyncGenerator%"); if (gen && getProto2) { value = getProto2(gen.prototype); } } INTRINSICS[name] = value; return value; }; var LEGACY_ALIASES = { __proto__: null, "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], "%ArrayPrototype%": ["Array", "prototype"], "%ArrayProto_entries%": ["Array", "prototype", "entries"], "%ArrayProto_forEach%": ["Array", "prototype", "forEach"], "%ArrayProto_keys%": ["Array", "prototype", "keys"], "%ArrayProto_values%": ["Array", "prototype", "values"], "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], "%BooleanPrototype%": ["Boolean", "prototype"], "%DataViewPrototype%": ["DataView", "prototype"], "%DatePrototype%": ["Date", "prototype"], "%ErrorPrototype%": ["Error", "prototype"], "%EvalErrorPrototype%": ["EvalError", "prototype"], "%Float32ArrayPrototype%": ["Float32Array", "prototype"], "%Float64ArrayPrototype%": ["Float64Array", "prototype"], "%FunctionPrototype%": ["Function", "prototype"], "%Generator%": ["GeneratorFunction", "prototype"], "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], "%Int8ArrayPrototype%": ["Int8Array", "prototype"], "%Int16ArrayPrototype%": ["Int16Array", "prototype"], "%Int32ArrayPrototype%": ["Int32Array", "prototype"], "%JSONParse%": ["JSON", "parse"], "%JSONStringify%": ["JSON", "stringify"], "%MapPrototype%": ["Map", "prototype"], "%NumberPrototype%": ["Number", "prototype"], "%ObjectPrototype%": ["Object", "prototype"], "%ObjProto_toString%": ["Object", "prototype", "toString"], "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], "%PromisePrototype%": ["Promise", "prototype"], "%PromiseProto_then%": ["Promise", "prototype", "then"], "%Promise_all%": ["Promise", "all"], "%Promise_reject%": ["Promise", "reject"], "%Promise_resolve%": ["Promise", "resolve"], "%RangeErrorPrototype%": ["RangeError", "prototype"], "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], "%RegExpPrototype%": ["RegExp", "prototype"], "%SetPrototype%": ["Set", "prototype"], "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], "%StringPrototype%": ["String", "prototype"], "%SymbolPrototype%": ["Symbol", "prototype"], "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], "%TypedArrayPrototype%": ["TypedArray", "prototype"], "%TypeErrorPrototype%": ["TypeError", "prototype"], "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], "%URIErrorPrototype%": ["URIError", "prototype"], "%WeakMapPrototype%": ["WeakMap", "prototype"], "%WeakSetPrototype%": ["WeakSet", "prototype"] }; var bind = requireFunctionBind(); var hasOwn = /* @__PURE__ */ requireHasown(); var $concat = bind.call($call, Array.prototype.concat); var $spliceApply = bind.call($apply, Array.prototype.splice); var $replace = bind.call($call, String.prototype.replace); var $strSlice = bind.call($call, String.prototype.slice); var $exec = bind.call($call, RegExp.prototype.exec); var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; var reEscapeChar = /\\(\\)?/g; var stringToPath = function stringToPath2(string) { var first = $strSlice(string, 0, 1); var last = $strSlice(string, -1); if (first === "%" && last !== "%") { throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`"); } else if (last === "%" && first !== "%") { throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`"); } var result = []; $replace(string, rePropName, function(match, number, quote2, subString) { result[result.length] = quote2 ? $replace(subString, reEscapeChar, "$1") : number || match; }); return result; }; var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) { var intrinsicName = name; var alias; if (hasOwn(LEGACY_ALIASES, intrinsicName)) { alias = LEGACY_ALIASES[intrinsicName]; intrinsicName = "%" + alias[0] + "%"; } if (hasOwn(INTRINSICS, intrinsicName)) { var value = INTRINSICS[intrinsicName]; if (value === needsEval) { value = doEval(intrinsicName); } if (typeof value === "undefined" && !allowMissing) { throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!"); } return { alias, name: intrinsicName, value }; } throw new $SyntaxError("intrinsic " + name + " does not exist!"); }; getIntrinsic = function GetIntrinsic(name, allowMissing) { if (typeof name !== "string" || name.length === 0) { throw new $TypeError("intrinsic name must be a non-empty string"); } if (arguments.length > 1 && typeof allowMissing !== "boolean") { throw new $TypeError('"allowMissing" argument must be a boolean'); } if ($exec(/^%?[^%]*%?$/, name) === null) { throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); } var parts = stringToPath(name); var intrinsicBaseName = parts.length > 0 ? parts[0] : ""; var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing); var intrinsicRealName = intrinsic.name; var value = intrinsic.value; var skipFurtherCaching = false; var alias = intrinsic.alias; if (alias) { intrinsicBaseName = alias[0]; $spliceApply(parts, $concat([0, 1], alias)); } for (var i2 = 1, isOwn = true; i2 < parts.length; i2 += 1) { var part = parts[i2]; var first = $strSlice(part, 0, 1); var last = $strSlice(part, -1); if ((first === '"' || first === "'" || first === "`" || (last === '"' || last === "'" || last === "`")) && first !== last) { throw new $SyntaxError("property names with quotes must have matching quotes"); } if (part === "constructor" || !isOwn) { skipFurtherCaching = true; } intrinsicBaseName += "." + part; intrinsicRealName = "%" + intrinsicBaseName + "%"; if (hasOwn(INTRINSICS, intrinsicRealName)) { value = INTRINSICS[intrinsicRealName]; } else if (value != null) { if (!(part in value)) { if (!allowMissing) { throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available."); } return void undefined$1; } if ($gOPD && i2 + 1 >= parts.length) { var desc = $gOPD(value, part); isOwn = !!desc; if (isOwn && "get" in desc && !("originalValue" in desc.get)) { value = desc.get; } else { value = value[part]; } } else { isOwn = hasOwn(value, part); value = value[part]; } if (isOwn && !skipFurtherCaching) { INTRINSICS[intrinsicRealName] = value; } } } return value; }; return getIntrinsic; } var callBound; var hasRequiredCallBound; function requireCallBound() { if (hasRequiredCallBound) return callBound; hasRequiredCallBound = 1; var GetIntrinsic = /* @__PURE__ */ requireGetIntrinsic(); var callBindBasic = requireCallBindApplyHelpers(); var $indexOf = callBindBasic([GetIntrinsic("%String.prototype.indexOf%")]); callBound = function callBoundIntrinsic(name, allowMissing) { var intrinsic = ( /** @type {(this: unknown, ...args: unknown[]) => unknown} */ GetIntrinsic(name, !!allowMissing) ); if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) { return callBindBasic( /** @type {const} */ [intrinsic] ); } return intrinsic; }; return callBound; } var isArguments; var hasRequiredIsArguments; function requireIsArguments() { if (hasRequiredIsArguments) return isArguments; hasRequiredIsArguments = 1; var hasToStringTag = requireShams()(); var callBound2 = /* @__PURE__ */ requireCallBound(); var $toString = callBound2("Object.prototype.toString"); var isStandardArguments = function isArguments2(value) { if (hasToStringTag && value && typeof value === "object" && Symbol.toStringTag in value) { return false; } return $toString(value) === "[object Arguments]"; }; var isLegacyArguments = function isArguments2(value) { if (isStandardArguments(value)) { return true; } return value !== null && typeof value === "object" && "length" in value && typeof value.length === "number" && value.length >= 0 && $toString(value) !== "[object Array]" && "callee" in value && $toString(value.callee) === "[object Function]"; }; var supportsStandardArguments = (function() { return isStandardArguments(arguments); })(); isStandardArguments.isLegacyArguments = isLegacyArguments; isArguments = supportsStandardArguments ? isStandardArguments : isLegacyArguments; return isArguments; } var isRegex; var hasRequiredIsRegex; function requireIsRegex() { if (hasRequiredIsRegex) return isRegex; hasRequiredIsRegex = 1; var callBound2 = /* @__PURE__ */ requireCallBound(); var hasToStringTag = requireShams()(); var hasOwn = /* @__PURE__ */ requireHasown(); var gOPD2 = /* @__PURE__ */ requireGopd(); var fn; if (hasToStringTag) { var $exec = callBound2("RegExp.prototype.exec"); var isRegexMarker = {}; var throwRegexMarker = function() { throw isRegexMarker; }; var badStringifier = { toString: throwRegexMarker, valueOf: throwRegexMarker }; if (typeof Symbol.toPrimitive === "symbol") { badStringifier[Symbol.toPrimitive] = throwRegexMarker; } fn = function isRegex2(value) { if (!value || typeof value !== "object") { return false; } var descriptor = ( /** @type {NonNullable} */ gOPD2( /** @type {{ lastIndex?: unknown }} */ value, "lastIndex" ) ); var hasLastIndexDataProperty = descriptor && hasOwn(descriptor, "value"); if (!hasLastIndexDataProperty) { return false; } try { $exec( value, /** @type {string} */ /** @type {unknown} */ badStringifier ); } catch (e) { return e === isRegexMarker; } }; } else { var $toString = callBound2("Object.prototype.toString"); var regexClass = "[object RegExp]"; fn = function isRegex2(value) { if (!value || typeof value !== "object" && typeof value !== "function") { return false; } return $toString(value) === regexClass; }; } isRegex = fn; return isRegex; } var safeRegexTest; var hasRequiredSafeRegexTest; function requireSafeRegexTest() { if (hasRequiredSafeRegexTest) return safeRegexTest; hasRequiredSafeRegexTest = 1; var callBound2 = /* @__PURE__ */ requireCallBound(); var isRegex2 = requireIsRegex(); var $exec = callBound2("RegExp.prototype.exec"); var $TypeError = /* @__PURE__ */ requireType(); safeRegexTest = function regexTester(regex) { if (!isRegex2(regex)) { throw new $TypeError("`regex` must be a RegExp"); } return function test(s) { return $exec(regex, s) !== null; }; }; return safeRegexTest; } var isGeneratorFunction; var hasRequiredIsGeneratorFunction; function requireIsGeneratorFunction() { if (hasRequiredIsGeneratorFunction) return isGeneratorFunction; hasRequiredIsGeneratorFunction = 1; var callBound2 = /* @__PURE__ */ requireCallBound(); var safeRegexTest2 = /* @__PURE__ */ requireSafeRegexTest(); var isFnRegex = safeRegexTest2(/^\s*(?:function)?\*/); var hasToStringTag = requireShams()(); var getProto2 = requireGetProto(); var toStr = callBound2("Object.prototype.toString"); var fnToStr = callBound2("Function.prototype.toString"); var getGeneratorFunc = function() { if (!hasToStringTag) { return false; } try { return Function("return function*() {}")(); } catch (e) { } }; var GeneratorFunction; isGeneratorFunction = function isGeneratorFunction2(fn) { if (typeof fn !== "function") { return false; } if (isFnRegex(fnToStr(fn))) { return true; } if (!hasToStringTag) { var str = toStr(fn); return str === "[object GeneratorFunction]"; } if (!getProto2) { return false; } if (typeof GeneratorFunction === "undefined") { var generatorFunc = getGeneratorFunc(); GeneratorFunction = generatorFunc ? ( /** @type {GeneratorFunctionConstructor} */ getProto2(generatorFunc) ) : false; } return getProto2(fn) === GeneratorFunction; }; return isGeneratorFunction; } var isCallable; var hasRequiredIsCallable; function requireIsCallable() { if (hasRequiredIsCallable) return isCallable; hasRequiredIsCallable = 1; var fnToStr = Function.prototype.toString; var reflectApply2 = typeof Reflect === "object" && Reflect !== null && Reflect.apply; var badArrayLike; var isCallableMarker; if (typeof reflectApply2 === "function" && typeof Object.defineProperty === "function") { try { badArrayLike = Object.defineProperty({}, "length", { get: function() { throw isCallableMarker; } }); isCallableMarker = {}; reflectApply2(function() { throw 42; }, null, badArrayLike); } catch (_) { if (_ !== isCallableMarker) { reflectApply2 = null; } } } else { reflectApply2 = null; } var constructorRegex = /^\s*class\b/; var isES6ClassFn = function isES6ClassFunction(value) { try { var fnStr = fnToStr.call(value); return constructorRegex.test(fnStr); } catch (e) { return false; } }; var tryFunctionObject = function tryFunctionToStr(value) { try { if (isES6ClassFn(value)) { return false; } fnToStr.call(value); return true; } catch (e) { return false; } }; var toStr = Object.prototype.toString; var objectClass = "[object Object]"; var fnClass = "[object Function]"; var genClass = "[object GeneratorFunction]"; var ddaClass = "[object HTMLAllCollection]"; var ddaClass2 = "[object HTML document.all class]"; var ddaClass3 = "[object HTMLCollection]"; var hasToStringTag = typeof Symbol === "function" && !!Symbol.toStringTag; var isIE68 = !(0 in [,]); var isDDA = function isDocumentDotAll() { return false; }; if (typeof document === "object") { var all = document.all; if (toStr.call(all) === toStr.call(document.all)) { isDDA = function isDocumentDotAll(value) { if ((isIE68 || !value) && (typeof value === "undefined" || typeof value === "object")) { try { var str = toStr.call(value); return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value("") == null; } catch (e) { } } return false; }; } } isCallable = reflectApply2 ? function isCallable2(value) { if (isDDA(value)) { return true; } if (!value) { return false; } if (typeof value !== "function" && typeof value !== "object") { return false; } try { reflectApply2(value, null, badArrayLike); } catch (e) { if (e !== isCallableMarker) { return false; } } return !isES6ClassFn(value) && tryFunctionObject(value); } : function isCallable2(value) { if (isDDA(value)) { return true; } if (!value) { return false; } if (typeof value !== "function" && typeof value !== "object") { return false; } if (hasToStringTag) { return tryFunctionObject(value); } if (isES6ClassFn(value)) { return false; } var strClass = toStr.call(value); if (strClass !== fnClass && strClass !== genClass && !/^\[object HTML/.test(strClass)) { return false; } return tryFunctionObject(value); }; return isCallable; } var forEach; var hasRequiredForEach; function requireForEach() { if (hasRequiredForEach) return forEach; hasRequiredForEach = 1; var isCallable2 = requireIsCallable(); var toStr = Object.prototype.toString; var hasOwnProperty = Object.prototype.hasOwnProperty; var forEachArray = function forEachArray2(array, iterator, receiver) { for (var i2 = 0, len2 = array.length; i2 < len2; i2++) { if (hasOwnProperty.call(array, i2)) { if (receiver == null) { iterator(array[i2], i2, array); } else { iterator.call(receiver, array[i2], i2, array); } } } }; var forEachString = function forEachString2(string, iterator, receiver) { for (var i2 = 0, len2 = string.length; i2 < len2; i2++) { if (receiver == null) { iterator(string.charAt(i2), i2, string); } else { iterator.call(receiver, string.charAt(i2), i2, string); } } }; var forEachObject = function forEachObject2(object, iterator, receiver) { for (var k in object) { if (hasOwnProperty.call(object, k)) { if (receiver == null) { iterator(object[k], k, object); } else { iterator.call(receiver, object[k], k, object); } } } }; function isArray(x) { return toStr.call(x) === "[object Array]"; } forEach = function forEach2(list, iterator, thisArg) { if (!isCallable2(iterator)) { throw new TypeError("iterator must be a function"); } var receiver; if (arguments.length >= 3) { receiver = thisArg; } if (isArray(list)) { forEachArray(list, iterator, receiver); } else if (typeof list === "string") { forEachString(list, iterator, receiver); } else { forEachObject(list, iterator, receiver); } }; return forEach; } var possibleTypedArrayNames; var hasRequiredPossibleTypedArrayNames; function requirePossibleTypedArrayNames() { if (hasRequiredPossibleTypedArrayNames) return possibleTypedArrayNames; hasRequiredPossibleTypedArrayNames = 1; possibleTypedArrayNames = [ "Float16Array", "Float32Array", "Float64Array", "Int8Array", "Int16Array", "Int32Array", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "BigInt64Array", "BigUint64Array" ]; return possibleTypedArrayNames; } var availableTypedArrays; var hasRequiredAvailableTypedArrays; function requireAvailableTypedArrays() { if (hasRequiredAvailableTypedArrays) return availableTypedArrays; hasRequiredAvailableTypedArrays = 1; var possibleNames = /* @__PURE__ */ requirePossibleTypedArrayNames(); var g = typeof globalThis === "undefined" ? commonjsGlobal : globalThis; availableTypedArrays = function availableTypedArrays2() { var out = []; for (var i2 = 0; i2 < possibleNames.length; i2++) { if (typeof g[possibleNames[i2]] === "function") { out[out.length] = possibleNames[i2]; } } return out; }; return availableTypedArrays; } var callBind = { exports: {} }; var defineDataProperty; var hasRequiredDefineDataProperty; function requireDefineDataProperty() { if (hasRequiredDefineDataProperty) return defineDataProperty; hasRequiredDefineDataProperty = 1; var $defineProperty = /* @__PURE__ */ requireEsDefineProperty(); var $SyntaxError = /* @__PURE__ */ requireSyntax(); var $TypeError = /* @__PURE__ */ requireType(); var gopd2 = /* @__PURE__ */ requireGopd(); defineDataProperty = function defineDataProperty2(obj, property, value) { if (!obj || typeof obj !== "object" && typeof obj !== "function") { throw new $TypeError("`obj` must be an object or a function`"); } if (typeof property !== "string" && typeof property !== "symbol") { throw new $TypeError("`property` must be a string or a symbol`"); } if (arguments.length > 3 && typeof arguments[3] !== "boolean" && arguments[3] !== null) { throw new $TypeError("`nonEnumerable`, if provided, must be a boolean or null"); } if (arguments.length > 4 && typeof arguments[4] !== "boolean" && arguments[4] !== null) { throw new $TypeError("`nonWritable`, if provided, must be a boolean or null"); } if (arguments.length > 5 && typeof arguments[5] !== "boolean" && arguments[5] !== null) { throw new $TypeError("`nonConfigurable`, if provided, must be a boolean or null"); } if (arguments.length > 6 && typeof arguments[6] !== "boolean") { throw new $TypeError("`loose`, if provided, must be a boolean"); } var nonEnumerable = arguments.length > 3 ? arguments[3] : null; var nonWritable = arguments.length > 4 ? arguments[4] : null; var nonConfigurable = arguments.length > 5 ? arguments[5] : null; var loose = arguments.length > 6 ? arguments[6] : false; var desc = !!gopd2 && gopd2(obj, property); if ($defineProperty) { $defineProperty(obj, property, { configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, value, writable: nonWritable === null && desc ? desc.writable : !nonWritable }); } else if (loose || !nonEnumerable && !nonWritable && !nonConfigurable) { obj[property] = value; } else { throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable."); } }; return defineDataProperty; } var hasPropertyDescriptors_1; var hasRequiredHasPropertyDescriptors; function requireHasPropertyDescriptors() { if (hasRequiredHasPropertyDescriptors) return hasPropertyDescriptors_1; hasRequiredHasPropertyDescriptors = 1; var $defineProperty = /* @__PURE__ */ requireEsDefineProperty(); var hasPropertyDescriptors = function hasPropertyDescriptors2() { return !!$defineProperty; }; hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { if (!$defineProperty) { return null; } try { return $defineProperty([], "length", { value: 1 }).length !== 1; } catch (e) { return true; } }; hasPropertyDescriptors_1 = hasPropertyDescriptors; return hasPropertyDescriptors_1; } var setFunctionLength; var hasRequiredSetFunctionLength; function requireSetFunctionLength() { if (hasRequiredSetFunctionLength) return setFunctionLength; hasRequiredSetFunctionLength = 1; var GetIntrinsic = /* @__PURE__ */ requireGetIntrinsic(); var define2 = /* @__PURE__ */ requireDefineDataProperty(); var hasDescriptors = /* @__PURE__ */ requireHasPropertyDescriptors()(); var gOPD2 = /* @__PURE__ */ requireGopd(); var $TypeError = /* @__PURE__ */ requireType(); var $floor = GetIntrinsic("%Math.floor%"); setFunctionLength = function setFunctionLength2(fn, length) { if (typeof fn !== "function") { throw new $TypeError("`fn` is not a function"); } if (typeof length !== "number" || length < 0 || length > 4294967295 || $floor(length) !== length) { throw new $TypeError("`length` must be a positive 32-bit integer"); } var loose = arguments.length > 2 && !!arguments[2]; var functionLengthIsConfigurable = true; var functionLengthIsWritable = true; if ("length" in fn && gOPD2) { var desc = gOPD2(fn, "length"); if (desc && !desc.configurable) { functionLengthIsConfigurable = false; } if (desc && !desc.writable) { functionLengthIsWritable = false; } } if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { if (hasDescriptors) { define2( /** @type {Parameters[0]} */ fn, "length", length, true, true ); } else { define2( /** @type {Parameters[0]} */ fn, "length", length ); } } return fn; }; return setFunctionLength; } var applyBind; var hasRequiredApplyBind; function requireApplyBind() { if (hasRequiredApplyBind) return applyBind; hasRequiredApplyBind = 1; var bind = requireFunctionBind(); var $apply = requireFunctionApply(); var actualApply2 = requireActualApply(); applyBind = function applyBind2() { return actualApply2(bind, $apply, arguments); }; return applyBind; } var hasRequiredCallBind; function requireCallBind() { if (hasRequiredCallBind) return callBind.exports; hasRequiredCallBind = 1; (function(module) { var setFunctionLength2 = /* @__PURE__ */ requireSetFunctionLength(); var $defineProperty = /* @__PURE__ */ requireEsDefineProperty(); var callBindBasic = requireCallBindApplyHelpers(); var applyBind2 = requireApplyBind(); module.exports = function callBind2(originalFunction) { var func = callBindBasic(arguments); var adjustedLength = originalFunction.length - (arguments.length - 1); return setFunctionLength2( func, 1 + (adjustedLength > 0 ? adjustedLength : 0), true ); }; if ($defineProperty) { $defineProperty(module.exports, "apply", { value: applyBind2 }); } else { module.exports.apply = applyBind2; } })(callBind); return callBind.exports; } var whichTypedArray; var hasRequiredWhichTypedArray; function requireWhichTypedArray() { if (hasRequiredWhichTypedArray) return whichTypedArray; hasRequiredWhichTypedArray = 1; var forEach2 = requireForEach(); var availableTypedArrays2 = /* @__PURE__ */ requireAvailableTypedArrays(); var callBind2 = requireCallBind(); var callBound2 = /* @__PURE__ */ requireCallBound(); var gOPD2 = /* @__PURE__ */ requireGopd(); var getProto2 = requireGetProto(); var $toString = callBound2("Object.prototype.toString"); var hasToStringTag = requireShams()(); var g = typeof globalThis === "undefined" ? commonjsGlobal : globalThis; var typedArrays = availableTypedArrays2(); var $slice = callBound2("String.prototype.slice"); var $indexOf = callBound2("Array.prototype.indexOf", true) || function indexOf2(array, value) { for (var i2 = 0; i2 < array.length; i2 += 1) { if (array[i2] === value) { return i2; } } return -1; }; var cache = { __proto__: null }; if (hasToStringTag && gOPD2 && getProto2) { forEach2(typedArrays, function(typedArray) { var arr = new g[typedArray](); if (Symbol.toStringTag in arr && getProto2) { var proto = getProto2(arr); var descriptor = gOPD2(proto, Symbol.toStringTag); if (!descriptor && proto) { var superProto = getProto2(proto); descriptor = gOPD2(superProto, Symbol.toStringTag); } cache["$" + typedArray] = callBind2(descriptor.get); } }); } else { forEach2(typedArrays, function(typedArray) { var arr = new g[typedArray](); var fn = arr.slice || arr.set; if (fn) { cache[ /** @type {`$${import('.').TypedArrayName}`} */ "$" + typedArray ] = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ // @ts-expect-error TODO FIXME callBind2(fn); } }); } var tryTypedArrays = function tryAllTypedArrays(value) { var found = false; forEach2( /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */ cache, /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ function(getter, typedArray) { if (!found) { try { if ("$" + getter(value) === typedArray) { found = /** @type {import('.').TypedArrayName} */ $slice(typedArray, 1); } } catch (e) { } } } ); return found; }; var trySlices = function tryAllSlices(value) { var found = false; forEach2( /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */ cache, /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ function(getter, name) { if (!found) { try { getter(value); found = /** @type {import('.').TypedArrayName} */ $slice(name, 1); } catch (e) { } } } ); return found; }; whichTypedArray = function whichTypedArray2(value) { if (!value || typeof value !== "object") { return false; } if (!hasToStringTag) { var tag = $slice($toString(value), 8, -1); if ($indexOf(typedArrays, tag) > -1) { return tag; } if (tag !== "Object") { return false; } return trySlices(value); } if (!gOPD2) { return null; } return tryTypedArrays(value); }; return whichTypedArray; } var isTypedArray; var hasRequiredIsTypedArray; function requireIsTypedArray() { if (hasRequiredIsTypedArray) return isTypedArray; hasRequiredIsTypedArray = 1; var whichTypedArray2 = /* @__PURE__ */ requireWhichTypedArray(); isTypedArray = function isTypedArray2(value) { return !!whichTypedArray2(value); }; return isTypedArray; } var hasRequiredTypes; function requireTypes() { if (hasRequiredTypes) return types; hasRequiredTypes = 1; (function(exports$12) { var isArgumentsObject = /* @__PURE__ */ requireIsArguments(); var isGeneratorFunction2 = requireIsGeneratorFunction(); var whichTypedArray2 = /* @__PURE__ */ requireWhichTypedArray(); var isTypedArray2 = /* @__PURE__ */ requireIsTypedArray(); function uncurryThis(f) { return f.call.bind(f); } var BigIntSupported = typeof BigInt !== "undefined"; var SymbolSupported = typeof Symbol !== "undefined"; var ObjectToString = uncurryThis(Object.prototype.toString); var numberValue = uncurryThis(Number.prototype.valueOf); var stringValue = uncurryThis(String.prototype.valueOf); var booleanValue = uncurryThis(Boolean.prototype.valueOf); if (BigIntSupported) { var bigIntValue = uncurryThis(BigInt.prototype.valueOf); } if (SymbolSupported) { var symbolValue = uncurryThis(Symbol.prototype.valueOf); } function checkBoxedPrimitive(value, prototypeValueOf) { if (typeof value !== "object") { return false; } try { prototypeValueOf(value); return true; } catch (e) { return false; } } exports$12.isArgumentsObject = isArgumentsObject; exports$12.isGeneratorFunction = isGeneratorFunction2; exports$12.isTypedArray = isTypedArray2; function isPromise(input) { return typeof Promise !== "undefined" && input instanceof Promise || input !== null && typeof input === "object" && typeof input.then === "function" && typeof input.catch === "function"; } exports$12.isPromise = isPromise; function isArrayBufferView(value) { if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { return ArrayBuffer.isView(value); } return isTypedArray2(value) || isDataView(value); } exports$12.isArrayBufferView = isArrayBufferView; function isUint8Array(value) { return whichTypedArray2(value) === "Uint8Array"; } exports$12.isUint8Array = isUint8Array; function isUint8ClampedArray(value) { return whichTypedArray2(value) === "Uint8ClampedArray"; } exports$12.isUint8ClampedArray = isUint8ClampedArray; function isUint16Array(value) { return whichTypedArray2(value) === "Uint16Array"; } exports$12.isUint16Array = isUint16Array; function isUint32Array(value) { return whichTypedArray2(value) === "Uint32Array"; } exports$12.isUint32Array = isUint32Array; function isInt8Array(value) { return whichTypedArray2(value) === "Int8Array"; } exports$12.isInt8Array = isInt8Array; function isInt16Array(value) { return whichTypedArray2(value) === "Int16Array"; } exports$12.isInt16Array = isInt16Array; function isInt32Array(value) { return whichTypedArray2(value) === "Int32Array"; } exports$12.isInt32Array = isInt32Array; function isFloat32Array(value) { return whichTypedArray2(value) === "Float32Array"; } exports$12.isFloat32Array = isFloat32Array; function isFloat64Array(value) { return whichTypedArray2(value) === "Float64Array"; } exports$12.isFloat64Array = isFloat64Array; function isBigInt64Array(value) { return whichTypedArray2(value) === "BigInt64Array"; } exports$12.isBigInt64Array = isBigInt64Array; function isBigUint64Array(value) { return whichTypedArray2(value) === "BigUint64Array"; } exports$12.isBigUint64Array = isBigUint64Array; function isMapToString(value) { return ObjectToString(value) === "[object Map]"; } isMapToString.working = typeof Map !== "undefined" && isMapToString(/* @__PURE__ */ new Map()); function isMap(value) { if (typeof Map === "undefined") { return false; } return isMapToString.working ? isMapToString(value) : value instanceof Map; } exports$12.isMap = isMap; function isSetToString(value) { return ObjectToString(value) === "[object Set]"; } isSetToString.working = typeof Set !== "undefined" && isSetToString(/* @__PURE__ */ new Set()); function isSet(value) { if (typeof Set === "undefined") { return false; } return isSetToString.working ? isSetToString(value) : value instanceof Set; } exports$12.isSet = isSet; function isWeakMapToString(value) { return ObjectToString(value) === "[object WeakMap]"; } isWeakMapToString.working = typeof WeakMap !== "undefined" && isWeakMapToString(/* @__PURE__ */ new WeakMap()); function isWeakMap(value) { if (typeof WeakMap === "undefined") { return false; } return isWeakMapToString.working ? isWeakMapToString(value) : value instanceof WeakMap; } exports$12.isWeakMap = isWeakMap; function isWeakSetToString(value) { return ObjectToString(value) === "[object WeakSet]"; } isWeakSetToString.working = typeof WeakSet !== "undefined" && isWeakSetToString(/* @__PURE__ */ new WeakSet()); function isWeakSet(value) { return isWeakSetToString(value); } exports$12.isWeakSet = isWeakSet; function isArrayBufferToString(value) { return ObjectToString(value) === "[object ArrayBuffer]"; } isArrayBufferToString.working = typeof ArrayBuffer !== "undefined" && isArrayBufferToString(new ArrayBuffer()); function isArrayBuffer(value) { if (typeof ArrayBuffer === "undefined") { return false; } return isArrayBufferToString.working ? isArrayBufferToString(value) : value instanceof ArrayBuffer; } exports$12.isArrayBuffer = isArrayBuffer; function isDataViewToString(value) { return ObjectToString(value) === "[object DataView]"; } isDataViewToString.working = typeof ArrayBuffer !== "undefined" && typeof DataView !== "undefined" && isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1)); function isDataView(value) { if (typeof DataView === "undefined") { return false; } return isDataViewToString.working ? isDataViewToString(value) : value instanceof DataView; } exports$12.isDataView = isDataView; var SharedArrayBufferCopy = typeof SharedArrayBuffer !== "undefined" ? SharedArrayBuffer : void 0; function isSharedArrayBufferToString(value) { return ObjectToString(value) === "[object SharedArrayBuffer]"; } function isSharedArrayBuffer(value) { if (typeof SharedArrayBufferCopy === "undefined") { return false; } if (typeof isSharedArrayBufferToString.working === "undefined") { isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy()); } return isSharedArrayBufferToString.working ? isSharedArrayBufferToString(value) : value instanceof SharedArrayBufferCopy; } exports$12.isSharedArrayBuffer = isSharedArrayBuffer; function isAsyncFunction(value) { return ObjectToString(value) === "[object AsyncFunction]"; } exports$12.isAsyncFunction = isAsyncFunction; function isMapIterator(value) { return ObjectToString(value) === "[object Map Iterator]"; } exports$12.isMapIterator = isMapIterator; function isSetIterator(value) { return ObjectToString(value) === "[object Set Iterator]"; } exports$12.isSetIterator = isSetIterator; function isGeneratorObject(value) { return ObjectToString(value) === "[object Generator]"; } exports$12.isGeneratorObject = isGeneratorObject; function isWebAssemblyCompiledModule(value) { return ObjectToString(value) === "[object WebAssembly.Module]"; } exports$12.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule; function isNumberObject(value) { return checkBoxedPrimitive(value, numberValue); } exports$12.isNumberObject = isNumberObject; function isStringObject(value) { return checkBoxedPrimitive(value, stringValue); } exports$12.isStringObject = isStringObject; function isBooleanObject(value) { return checkBoxedPrimitive(value, booleanValue); } exports$12.isBooleanObject = isBooleanObject; function isBigIntObject(value) { return BigIntSupported && checkBoxedPrimitive(value, bigIntValue); } exports$12.isBigIntObject = isBigIntObject; function isSymbolObject(value) { return SymbolSupported && checkBoxedPrimitive(value, symbolValue); } exports$12.isSymbolObject = isSymbolObject; function isBoxedPrimitive(value) { return isNumberObject(value) || isStringObject(value) || isBooleanObject(value) || isBigIntObject(value) || isSymbolObject(value); } exports$12.isBoxedPrimitive = isBoxedPrimitive; function isAnyArrayBuffer(value) { return typeof Uint8Array !== "undefined" && (isArrayBuffer(value) || isSharedArrayBuffer(value)); } exports$12.isAnyArrayBuffer = isAnyArrayBuffer; ["isProxy", "isExternal", "isModuleNamespaceObject"].forEach(function(method) { Object.defineProperty(exports$12, method, { enumerable: false, value: function() { throw new Error(method + " is not supported in userland"); } }); }); })(types); return types; } var isBufferBrowser; var hasRequiredIsBufferBrowser; function requireIsBufferBrowser() { if (hasRequiredIsBufferBrowser) return isBufferBrowser; hasRequiredIsBufferBrowser = 1; isBufferBrowser = function isBuffer(arg) { return arg && typeof arg === "object" && typeof arg.copy === "function" && typeof arg.fill === "function" && typeof arg.readUInt8 === "function"; }; return isBufferBrowser; } var hasRequiredUtil$1; function requireUtil$1() { if (hasRequiredUtil$1) return util$1; hasRequiredUtil$1 = 1; (function(exports$12) { var define_process_env_default2 = {}; var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors2(obj) { var keys2 = Object.keys(obj); var descriptors = {}; for (var i2 = 0; i2 < keys2.length; i2++) { descriptors[keys2[i2]] = Object.getOwnPropertyDescriptor(obj, keys2[i2]); } return descriptors; }; var formatRegExp = /%[sdj%]/g; exports$12.format = function(f) { if (!isString(f)) { var objects = []; for (var i2 = 0; i2 < arguments.length; i2++) { objects.push(inspect(arguments[i2])); } return objects.join(" "); } var i2 = 1; var args = arguments; var len2 = args.length; var str = String(f).replace(formatRegExp, function(x2) { if (x2 === "%%") return "%"; if (i2 >= len2) return x2; switch (x2) { case "%s": return String(args[i2++]); case "%d": return Number(args[i2++]); case "%j": try { return JSON.stringify(args[i2++]); } catch (_) { return "[Circular]"; } default: return x2; } }); for (var x = args[i2]; i2 < len2; x = args[++i2]) { if (isNull(x) || !isObject(x)) { str += " " + x; } else { str += " " + inspect(x); } } return str; }; exports$12.deprecate = function(fn, msg) { if (typeof process$1 !== "undefined" && process$1.noDeprecation === true) { return fn; } if (typeof process$1 === "undefined") { return function() { return exports$12.deprecate(fn, msg).apply(this, arguments); }; } var warned = false; function deprecated() { if (!warned) { if (process$1.throwDeprecation) { throw new Error(msg); } else if (process$1.traceDeprecation) { console.trace(msg); } else { console.error(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; }; var debugs = {}; var debugEnvRegex = /^$/; if (define_process_env_default2.NODE_DEBUG) { var debugEnv = define_process_env_default2.NODE_DEBUG; debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, "\\$&").replace(/\*/g, ".*").replace(/,/g, "$|^").toUpperCase(); debugEnvRegex = new RegExp("^" + debugEnv + "$", "i"); } exports$12.debuglog = function(set2) { set2 = set2.toUpperCase(); if (!debugs[set2]) { if (debugEnvRegex.test(set2)) { var pid = process$1.pid; debugs[set2] = function() { var msg = exports$12.format.apply(exports$12, arguments); console.error("%s %d: %s", set2, pid, msg); }; } else { debugs[set2] = function() { }; } } return debugs[set2]; }; function inspect(obj, opts) { var ctx = { seen: [], stylize: stylizeNoColor }; if (arguments.length >= 3) ctx.depth = arguments[2]; if (arguments.length >= 4) ctx.colors = arguments[3]; if (isBoolean(opts)) { ctx.showHidden = opts; } else if (opts) { exports$12._extend(ctx, opts); } if (isUndefined(ctx.showHidden)) ctx.showHidden = false; if (isUndefined(ctx.depth)) ctx.depth = 2; if (isUndefined(ctx.colors)) ctx.colors = false; if (isUndefined(ctx.customInspect)) ctx.customInspect = true; if (ctx.colors) ctx.stylize = stylizeWithColor; return formatValue(ctx, obj, ctx.depth); } exports$12.inspect = inspect; inspect.colors = { "bold": [1, 22], "italic": [3, 23], "underline": [4, 24], "inverse": [7, 27], "white": [37, 39], "grey": [90, 39], "black": [30, 39], "blue": [34, 39], "cyan": [36, 39], "green": [32, 39], "magenta": [35, 39], "red": [31, 39], "yellow": [33, 39] }; inspect.styles = { "special": "cyan", "number": "yellow", "boolean": "yellow", "undefined": "grey", "null": "bold", "string": "green", "date": "magenta", // "name": intentionally not styling "regexp": "red" }; function stylizeWithColor(str, styleType) { var style = inspect.styles[styleType]; if (style) { return "\x1B[" + inspect.colors[style][0] + "m" + str + "\x1B[" + inspect.colors[style][1] + "m"; } else { return str; } } function stylizeNoColor(str, styleType) { return str; } function arrayToHash(array) { var hash2 = {}; array.forEach(function(val, idx) { hash2[val] = true; }); return hash2; } function formatValue(ctx, value, recurseTimes) { if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special value.inspect !== exports$12.inspect && // Also filter out any prototype objects using the circular check. !(value.constructor && value.constructor.prototype === value)) { var ret = value.inspect(recurseTimes, ctx); if (!isString(ret)) { ret = formatValue(ctx, ret, recurseTimes); } return ret; } var primitive = formatPrimitive(ctx, value); if (primitive) { return primitive; } var keys2 = Object.keys(value); var visibleKeys = arrayToHash(keys2); if (ctx.showHidden) { keys2 = Object.getOwnPropertyNames(value); } if (isError(value) && (keys2.indexOf("message") >= 0 || keys2.indexOf("description") >= 0)) { return formatError(value); } if (keys2.length === 0) { if (isFunction(value)) { var name = value.name ? ": " + value.name : ""; return ctx.stylize("[Function" + name + "]", "special"); } if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), "regexp"); } if (isDate(value)) { return ctx.stylize(Date.prototype.toString.call(value), "date"); } if (isError(value)) { return formatError(value); } } var base2 = "", array = false, braces = ["{", "}"]; if (isArray(value)) { array = true; braces = ["[", "]"]; } if (isFunction(value)) { var n = value.name ? ": " + value.name : ""; base2 = " [Function" + n + "]"; } if (isRegExp(value)) { base2 = " " + RegExp.prototype.toString.call(value); } if (isDate(value)) { base2 = " " + Date.prototype.toUTCString.call(value); } if (isError(value)) { base2 = " " + formatError(value); } if (keys2.length === 0 && (!array || value.length == 0)) { return braces[0] + base2 + braces[1]; } if (recurseTimes < 0) { if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), "regexp"); } else { return ctx.stylize("[Object]", "special"); } } ctx.seen.push(value); var output; if (array) { output = formatArray(ctx, value, recurseTimes, visibleKeys, keys2); } else { output = keys2.map(function(key2) { return formatProperty(ctx, value, recurseTimes, visibleKeys, key2, array); }); } ctx.seen.pop(); return reduceToSingleString(output, base2, braces); } function formatPrimitive(ctx, value) { if (isUndefined(value)) return ctx.stylize("undefined", "undefined"); if (isString(value)) { var simple = "'" + JSON.stringify(value).replace(/^"|"$/g, "").replace(/'/g, "\\'").replace(/\\"/g, '"') + "'"; return ctx.stylize(simple, "string"); } if (isNumber(value)) return ctx.stylize("" + value, "number"); if (isBoolean(value)) return ctx.stylize("" + value, "boolean"); if (isNull(value)) return ctx.stylize("null", "null"); } function formatError(value) { return "[" + Error.prototype.toString.call(value) + "]"; } function formatArray(ctx, value, recurseTimes, visibleKeys, keys2) { var output = []; for (var i2 = 0, l = value.length; i2 < l; ++i2) { if (hasOwnProperty(value, String(i2))) { output.push(formatProperty( ctx, value, recurseTimes, visibleKeys, String(i2), true )); } else { output.push(""); } } keys2.forEach(function(key2) { if (!key2.match(/^\d+$/)) { output.push(formatProperty( ctx, value, recurseTimes, visibleKeys, key2, true )); } }); return output; } function formatProperty(ctx, value, recurseTimes, visibleKeys, key2, array) { var name, str, desc; desc = Object.getOwnPropertyDescriptor(value, key2) || { value: value[key2] }; if (desc.get) { if (desc.set) { str = ctx.stylize("[Getter/Setter]", "special"); } else { str = ctx.stylize("[Getter]", "special"); } } else { if (desc.set) { str = ctx.stylize("[Setter]", "special"); } } if (!hasOwnProperty(visibleKeys, key2)) { name = "[" + key2 + "]"; } if (!str) { if (ctx.seen.indexOf(desc.value) < 0) { if (isNull(recurseTimes)) { str = formatValue(ctx, desc.value, null); } else { str = formatValue(ctx, desc.value, recurseTimes - 1); } if (str.indexOf("\n") > -1) { if (array) { str = str.split("\n").map(function(line) { return " " + line; }).join("\n").slice(2); } else { str = "\n" + str.split("\n").map(function(line) { return " " + line; }).join("\n"); } } } else { str = ctx.stylize("[Circular]", "special"); } } if (isUndefined(name)) { if (array && key2.match(/^\d+$/)) { return str; } name = JSON.stringify("" + key2); if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { name = name.slice(1, -1); name = ctx.stylize(name, "name"); } else { name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); name = ctx.stylize(name, "string"); } } return name + ": " + str; } function reduceToSingleString(output, base2, braces) { var length = output.reduce(function(prev, cur) { if (cur.indexOf("\n") >= 0) ; return prev + cur.replace(/\u001b\[\d\d?m/g, "").length + 1; }, 0); if (length > 60) { return braces[0] + (base2 === "" ? "" : base2 + "\n ") + " " + output.join(",\n ") + " " + braces[1]; } return braces[0] + base2 + " " + output.join(", ") + " " + braces[1]; } exports$12.types = requireTypes(); function isArray(ar) { return Array.isArray(ar); } exports$12.isArray = isArray; function isBoolean(arg) { return typeof arg === "boolean"; } exports$12.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports$12.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports$12.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === "number"; } exports$12.isNumber = isNumber; function isString(arg) { return typeof arg === "string"; } exports$12.isString = isString; function isSymbol(arg) { return typeof arg === "symbol"; } exports$12.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports$12.isUndefined = isUndefined; function isRegExp(re) { return isObject(re) && objectToString(re) === "[object RegExp]"; } exports$12.isRegExp = isRegExp; exports$12.types.isRegExp = isRegExp; function isObject(arg) { return typeof arg === "object" && arg !== null; } exports$12.isObject = isObject; function isDate(d) { return isObject(d) && objectToString(d) === "[object Date]"; } exports$12.isDate = isDate; exports$12.types.isDate = isDate; function isError(e) { return isObject(e) && (objectToString(e) === "[object Error]" || e instanceof Error); } exports$12.isError = isError; exports$12.types.isNativeError = isError; function isFunction(arg) { return typeof arg === "function"; } exports$12.isFunction = isFunction; function isPrimitive(arg) { return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || // ES6 symbol typeof arg === "undefined"; } exports$12.isPrimitive = isPrimitive; exports$12.isBuffer = requireIsBufferBrowser(); function objectToString(o) { return Object.prototype.toString.call(o); } function pad(n) { return n < 10 ? "0" + n.toString(10) : n.toString(10); } var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; function timestamp() { var d = /* @__PURE__ */ new Date(); var time = [ pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds()) ].join(":"); return [d.getDate(), months[d.getMonth()], time].join(" "); } exports$12.log = function() { console.log("%s - %s", timestamp(), exports$12.format.apply(exports$12, arguments)); }; exports$12.inherits = requireInherits_browser(); exports$12._extend = function(origin, add) { if (!add || !isObject(add)) return origin; var keys2 = Object.keys(add); var i2 = keys2.length; while (i2--) { origin[keys2[i2]] = add[keys2[i2]]; } return origin; }; function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } var kCustomPromisifiedSymbol = typeof Symbol !== "undefined" ? /* @__PURE__ */ Symbol("util.promisify.custom") : void 0; exports$12.promisify = function promisify(original) { if (typeof original !== "function") throw new TypeError('The "original" argument must be of type Function'); if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) { var fn = original[kCustomPromisifiedSymbol]; if (typeof fn !== "function") { throw new TypeError('The "util.promisify.custom" argument must be of type Function'); } Object.defineProperty(fn, kCustomPromisifiedSymbol, { value: fn, enumerable: false, writable: false, configurable: true }); return fn; } function fn() { var promiseResolve, promiseReject; var promise = new Promise(function(resolve, reject) { promiseResolve = resolve; promiseReject = reject; }); var args = []; for (var i2 = 0; i2 < arguments.length; i2++) { args.push(arguments[i2]); } args.push(function(err, value) { if (err) { promiseReject(err); } else { promiseResolve(value); } }); try { original.apply(this, args); } catch (err) { promiseReject(err); } return promise; } Object.setPrototypeOf(fn, Object.getPrototypeOf(original)); if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, { value: fn, enumerable: false, writable: false, configurable: true }); return Object.defineProperties( fn, getOwnPropertyDescriptors(original) ); }; exports$12.promisify.custom = kCustomPromisifiedSymbol; function callbackifyOnRejected(reason, cb) { if (!reason) { var newReason = new Error("Promise was rejected with a falsy value"); newReason.reason = reason; reason = newReason; } return cb(reason); } function callbackify(original) { if (typeof original !== "function") { throw new TypeError('The "original" argument must be of type Function'); } function callbackified() { var args = []; for (var i2 = 0; i2 < arguments.length; i2++) { args.push(arguments[i2]); } var maybeCb = args.pop(); if (typeof maybeCb !== "function") { throw new TypeError("The last argument must be of type Function"); } var self2 = this; var cb = function() { return maybeCb.apply(self2, arguments); }; original.apply(this, args).then( function(ret) { process$1.nextTick(cb.bind(null, null, ret)); }, function(rej) { process$1.nextTick(callbackifyOnRejected.bind(null, rej, cb)); } ); } Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)); Object.defineProperties( callbackified, getOwnPropertyDescriptors(original) ); return callbackified; } exports$12.callbackify = callbackify; })(util$1); return util$1; } var buffer_list; var hasRequiredBuffer_list; function requireBuffer_list() { if (hasRequiredBuffer_list) return buffer_list; hasRequiredBuffer_list = 1; function ownKeys(object, enumerableOnly) { var keys2 = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys2.push.apply(keys2, symbols); } return keys2; } function _objectSpread(target) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = null != arguments[i2] ? arguments[i2] : {}; i2 % 2 ? ownKeys(Object(source), true).forEach(function(key2) { _defineProperty(target, key2, source[key2]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key2) { Object.defineProperty(target, key2, Object.getOwnPropertyDescriptor(source, key2)); }); } return target; } function _defineProperty(obj, key2, value) { key2 = _toPropertyKey(key2); if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(arg) { var key2 = _toPrimitive(arg, "string"); return typeof key2 === "symbol" ? key2 : String(key2); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== void 0) { var res = prim.call(input, hint); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return String(input); } var _require = requireDist(), Buffer2 = _require.Buffer; var _require2 = requireUtil$1(), inspect = _require2.inspect; var custom = inspect && inspect.custom || "inspect"; function copyBuffer(src, target, offset) { Buffer2.prototype.copy.call(src, target, offset); } buffer_list = /* @__PURE__ */ (function() { function BufferList2() { _classCallCheck(this, BufferList2); this.head = null; this.tail = null; this.length = 0; } _createClass(BufferList2, [{ key: "push", value: function push(v) { var entry = { data: v, next: null }; if (this.length > 0) this.tail.next = entry; else this.head = entry; this.tail = entry; ++this.length; } }, { key: "unshift", value: function unshift(v) { var entry = { data: v, next: this.head }; if (this.length === 0) this.tail = entry; this.head = entry; ++this.length; } }, { key: "shift", value: function shift() { if (this.length === 0) return; var ret = this.head.data; if (this.length === 1) this.head = this.tail = null; else this.head = this.head.next; --this.length; return ret; } }, { key: "clear", value: function clear2() { this.head = this.tail = null; this.length = 0; } }, { key: "join", value: function join(s) { if (this.length === 0) return ""; var p = this.head; var ret = "" + p.data; while (p = p.next) ret += s + p.data; return ret; } }, { key: "concat", value: function concat(n) { if (this.length === 0) return Buffer2.alloc(0); var ret = Buffer2.allocUnsafe(n >>> 0); var p = this.head; var i2 = 0; while (p) { copyBuffer(p.data, ret, i2); i2 += p.data.length; p = p.next; } return ret; } // Consumes a specified amount of bytes or characters from the buffered data. }, { key: "consume", value: function consume(n, hasStrings) { var ret; if (n < this.head.data.length) { ret = this.head.data.slice(0, n); this.head.data = this.head.data.slice(n); } else if (n === this.head.data.length) { ret = this.shift(); } else { ret = hasStrings ? this._getString(n) : this._getBuffer(n); } return ret; } }, { key: "first", value: function first() { return this.head.data; } // Consumes a specified amount of characters from the buffered data. }, { key: "_getString", value: function _getString(n) { var p = this.head; var c = 1; var ret = p.data; n -= ret.length; while (p = p.next) { var str = p.data; var nb = n > str.length ? str.length : n; if (nb === str.length) ret += str; else ret += str.slice(0, n); n -= nb; if (n === 0) { if (nb === str.length) { ++c; if (p.next) this.head = p.next; else this.head = this.tail = null; } else { this.head = p; p.data = str.slice(nb); } break; } ++c; } this.length -= c; return ret; } // Consumes a specified amount of bytes from the buffered data. }, { key: "_getBuffer", value: function _getBuffer(n) { var ret = Buffer2.allocUnsafe(n); var p = this.head; var c = 1; p.data.copy(ret); n -= p.data.length; while (p = p.next) { var buf = p.data; var nb = n > buf.length ? buf.length : n; buf.copy(ret, ret.length - n, 0, nb); n -= nb; if (n === 0) { if (nb === buf.length) { ++c; if (p.next) this.head = p.next; else this.head = this.tail = null; } else { this.head = p; p.data = buf.slice(nb); } break; } ++c; } this.length -= c; return ret; } // Make sure the linked list only shows the minimal necessary information. }, { key: custom, value: function value(_, options) { return inspect(this, _objectSpread(_objectSpread({}, options), {}, { // Only inspect one level. depth: 0, // It should not recurse. customInspect: false })); } }]); return BufferList2; })(); return buffer_list; } var destroy_1$1; var hasRequiredDestroy$1; function requireDestroy$1() { if (hasRequiredDestroy$1) return destroy_1$1; hasRequiredDestroy$1 = 1; function destroy(err, cb) { var _this = this; var readableDestroyed = this._readableState && this._readableState.destroyed; var writableDestroyed = this._writableState && this._writableState.destroyed; if (readableDestroyed || writableDestroyed) { if (cb) { cb(err); } else if (err) { if (!this._writableState) { process$1.nextTick(emitErrorNT, this, err); } else if (!this._writableState.errorEmitted) { this._writableState.errorEmitted = true; process$1.nextTick(emitErrorNT, this, err); } } return this; } if (this._readableState) { this._readableState.destroyed = true; } if (this._writableState) { this._writableState.destroyed = true; } this._destroy(err || null, function(err2) { if (!cb && err2) { if (!_this._writableState) { process$1.nextTick(emitErrorAndCloseNT, _this, err2); } else if (!_this._writableState.errorEmitted) { _this._writableState.errorEmitted = true; process$1.nextTick(emitErrorAndCloseNT, _this, err2); } else { process$1.nextTick(emitCloseNT, _this); } } else if (cb) { process$1.nextTick(emitCloseNT, _this); cb(err2); } else { process$1.nextTick(emitCloseNT, _this); } }); return this; } function emitErrorAndCloseNT(self2, err) { emitErrorNT(self2, err); emitCloseNT(self2); } function emitCloseNT(self2) { if (self2._writableState && !self2._writableState.emitClose) return; if (self2._readableState && !self2._readableState.emitClose) return; self2.emit("close"); } function undestroy() { if (this._readableState) { this._readableState.destroyed = false; this._readableState.reading = false; this._readableState.ended = false; this._readableState.endEmitted = false; } if (this._writableState) { this._writableState.destroyed = false; this._writableState.ended = false; this._writableState.ending = false; this._writableState.finalCalled = false; this._writableState.prefinished = false; this._writableState.finished = false; this._writableState.errorEmitted = false; } } function emitErrorNT(self2, err) { self2.emit("error", err); } function errorOrDestroy(stream, err) { var rState = stream._readableState; var wState = stream._writableState; if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err); else stream.emit("error", err); } destroy_1$1 = { destroy, undestroy, errorOrDestroy }; return destroy_1$1; } var errorsBrowser = {}; var hasRequiredErrorsBrowser; function requireErrorsBrowser() { if (hasRequiredErrorsBrowser) return errorsBrowser; hasRequiredErrorsBrowser = 1; function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var codes = {}; function createErrorType(code2, message, Base) { if (!Base) { Base = Error; } function getMessage(arg1, arg2, arg3) { if (typeof message === "string") { return message; } else { return message(arg1, arg2, arg3); } } var NodeError = /* @__PURE__ */ (function(_Base) { _inheritsLoose(NodeError2, _Base); function NodeError2(arg1, arg2, arg3) { return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; } return NodeError2; })(Base); NodeError.prototype.name = Base.name; NodeError.prototype.code = code2; codes[code2] = NodeError; } function oneOf(expected, thing) { if (Array.isArray(expected)) { var len2 = expected.length; expected = expected.map(function(i2) { return String(i2); }); if (len2 > 2) { return "one of ".concat(thing, " ").concat(expected.slice(0, len2 - 1).join(", "), ", or ") + expected[len2 - 1]; } else if (len2 === 2) { return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); } else { return "of ".concat(thing, " ").concat(expected[0]); } } else { return "of ".concat(thing, " ").concat(String(expected)); } } function startsWith(str, search, pos) { return str.substr(0, search.length) === search; } function endsWith(str, search, this_len) { if (this_len === void 0 || this_len > str.length) { this_len = str.length; } return str.substring(this_len - search.length, this_len) === search; } function includes(str, search, start) { if (typeof start !== "number") { start = 0; } if (start + search.length > str.length) { return false; } else { return str.indexOf(search, start) !== -1; } } createErrorType("ERR_INVALID_OPT_VALUE", function(name, value) { return 'The value "' + value + '" is invalid for option "' + name + '"'; }, TypeError); createErrorType("ERR_INVALID_ARG_TYPE", function(name, expected, actual) { var determiner; if (typeof expected === "string" && startsWith(expected, "not ")) { determiner = "must not be"; expected = expected.replace(/^not /, ""); } else { determiner = "must be"; } var msg; if (endsWith(name, " argument")) { msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, "type")); } else { var type2 = includes(name, ".") ? "property" : "argument"; msg = 'The "'.concat(name, '" ').concat(type2, " ").concat(determiner, " ").concat(oneOf(expected, "type")); } msg += ". Received type ".concat(typeof actual); return msg; }, TypeError); createErrorType("ERR_STREAM_PUSH_AFTER_EOF", "stream.push() after EOF"); createErrorType("ERR_METHOD_NOT_IMPLEMENTED", function(name) { return "The " + name + " method is not implemented"; }); createErrorType("ERR_STREAM_PREMATURE_CLOSE", "Premature close"); createErrorType("ERR_STREAM_DESTROYED", function(name) { return "Cannot call " + name + " after a stream was destroyed"; }); createErrorType("ERR_MULTIPLE_CALLBACK", "Callback called multiple times"); createErrorType("ERR_STREAM_CANNOT_PIPE", "Cannot pipe, not readable"); createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end"); createErrorType("ERR_STREAM_NULL_VALUES", "May not write null values to stream", TypeError); createErrorType("ERR_UNKNOWN_ENCODING", function(arg) { return "Unknown encoding: " + arg; }, TypeError); createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "stream.unshift() after end event"); errorsBrowser.codes = codes; return errorsBrowser; } var state; var hasRequiredState; function requireState() { if (hasRequiredState) return state; hasRequiredState = 1; var ERR_INVALID_OPT_VALUE = requireErrorsBrowser().codes.ERR_INVALID_OPT_VALUE; function highWaterMarkFrom(options, isDuplex, duplexKey) { return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; } function getHighWaterMark(state2, options, duplexKey, isDuplex) { var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); if (hwm != null) { if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { var name = isDuplex ? duplexKey : "highWaterMark"; throw new ERR_INVALID_OPT_VALUE(name, hwm); } return Math.floor(hwm); } return state2.objectMode ? 16 : 16 * 1024; } state = { getHighWaterMark }; return state; } var browser$d; var hasRequiredBrowser$c; function requireBrowser$c() { if (hasRequiredBrowser$c) return browser$d; hasRequiredBrowser$c = 1; browser$d = deprecate; function deprecate(fn, msg) { if (config2("noDeprecation")) { return fn; } var warned = false; function deprecated() { if (!warned) { if (config2("throwDeprecation")) { throw new Error(msg); } else if (config2("traceDeprecation")) { console.trace(msg); } else { console.warn(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; } function config2(name) { try { if (!commonjsGlobal.localStorage) return false; } catch (_) { return false; } var val = commonjsGlobal.localStorage[name]; if (null == val) return false; return String(val).toLowerCase() === "true"; } return browser$d; } var _stream_writable$1; var hasRequired_stream_writable$1; function require_stream_writable$1() { if (hasRequired_stream_writable$1) return _stream_writable$1; hasRequired_stream_writable$1 = 1; _stream_writable$1 = Writable; function CorkedRequest(state2) { var _this = this; this.next = null; this.entry = null; this.finish = function() { onCorkedFinish(_this, state2); }; } var Duplex; Writable.WritableState = WritableState; var internalUtil = { deprecate: requireBrowser$c() }; var Stream = requireStreamBrowser$1(); var Buffer2 = requireDist().Buffer; var OurUint8Array = (typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() { }; function _uint8ArrayToBuffer(chunk) { return Buffer2.from(chunk); } function _isUint8Array(obj) { return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array; } var destroyImpl = requireDestroy$1(); var _require = requireState(), getHighWaterMark = _require.getHighWaterMark; var _require$codes = requireErrorsBrowser().codes, ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; var errorOrDestroy = destroyImpl.errorOrDestroy; requireInherits_browser()(Writable, Stream); function nop() { } function WritableState(options, stream, isDuplex) { Duplex = Duplex || require_stream_duplex$1(); options = options || {}; if (typeof isDuplex !== "boolean") isDuplex = stream instanceof Duplex; this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; this.highWaterMark = getHighWaterMark(this, options, "writableHighWaterMark", isDuplex); this.finalCalled = false; this.needDrain = false; this.ending = false; this.ended = false; this.finished = false; this.destroyed = false; var noDecode = options.decodeStrings === false; this.decodeStrings = !noDecode; this.defaultEncoding = options.defaultEncoding || "utf8"; this.length = 0; this.writing = false; this.corked = 0; this.sync = true; this.bufferProcessing = false; this.onwrite = function(er) { onwrite(stream, er); }; this.writecb = null; this.writelen = 0; this.bufferedRequest = null; this.lastBufferedRequest = null; this.pendingcb = 0; this.prefinished = false; this.errorEmitted = false; this.emitClose = options.emitClose !== false; this.autoDestroy = !!options.autoDestroy; this.bufferedRequestCount = 0; this.corkedRequestsFree = new CorkedRequest(this); } WritableState.prototype.getBuffer = function getBuffer() { var current = this.bufferedRequest; var out = []; while (current) { out.push(current); current = current.next; } return out; }; (function() { try { Object.defineProperty(WritableState.prototype, "buffer", { get: internalUtil.deprecate(function writableStateBufferGetter() { return this.getBuffer(); }, "_writableState.buffer is deprecated. Use _writableState.getBuffer instead.", "DEP0003") }); } catch (_) { } })(); var realHasInstance; if (typeof Symbol === "function" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === "function") { realHasInstance = Function.prototype[Symbol.hasInstance]; Object.defineProperty(Writable, Symbol.hasInstance, { value: function value(object) { if (realHasInstance.call(this, object)) return true; if (this !== Writable) return false; return object && object._writableState instanceof WritableState; } }); } else { realHasInstance = function realHasInstance2(object) { return object instanceof this; }; } function Writable(options) { Duplex = Duplex || require_stream_duplex$1(); var isDuplex = this instanceof Duplex; if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); this._writableState = new WritableState(options, this, isDuplex); this.writable = true; if (options) { if (typeof options.write === "function") this._write = options.write; if (typeof options.writev === "function") this._writev = options.writev; if (typeof options.destroy === "function") this._destroy = options.destroy; if (typeof options.final === "function") this._final = options.final; } Stream.call(this); } Writable.prototype.pipe = function() { errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); }; function writeAfterEnd(stream, cb) { var er = new ERR_STREAM_WRITE_AFTER_END(); errorOrDestroy(stream, er); process$1.nextTick(cb, er); } function validChunk(stream, state2, chunk, cb) { var er; if (chunk === null) { er = new ERR_STREAM_NULL_VALUES(); } else if (typeof chunk !== "string" && !state2.objectMode) { er = new ERR_INVALID_ARG_TYPE("chunk", ["string", "Buffer"], chunk); } if (er) { errorOrDestroy(stream, er); process$1.nextTick(cb, er); return false; } return true; } Writable.prototype.write = function(chunk, encoding, cb) { var state2 = this._writableState; var ret = false; var isBuf = !state2.objectMode && _isUint8Array(chunk); if (isBuf && !Buffer2.isBuffer(chunk)) { chunk = _uint8ArrayToBuffer(chunk); } if (typeof encoding === "function") { cb = encoding; encoding = null; } if (isBuf) encoding = "buffer"; else if (!encoding) encoding = state2.defaultEncoding; if (typeof cb !== "function") cb = nop; if (state2.ending) writeAfterEnd(this, cb); else if (isBuf || validChunk(this, state2, chunk, cb)) { state2.pendingcb++; ret = writeOrBuffer(this, state2, isBuf, chunk, encoding, cb); } return ret; }; Writable.prototype.cork = function() { this._writableState.corked++; }; Writable.prototype.uncork = function() { var state2 = this._writableState; if (state2.corked) { state2.corked--; if (!state2.writing && !state2.corked && !state2.bufferProcessing && state2.bufferedRequest) clearBuffer(this, state2); } }; Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { if (typeof encoding === "string") encoding = encoding.toLowerCase(); if (!(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((encoding + "").toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); this._writableState.defaultEncoding = encoding; return this; }; Object.defineProperty(Writable.prototype, "writableBuffer", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._writableState && this._writableState.getBuffer(); } }); function decodeChunk(state2, chunk, encoding) { if (!state2.objectMode && state2.decodeStrings !== false && typeof chunk === "string") { chunk = Buffer2.from(chunk, encoding); } return chunk; } Object.defineProperty(Writable.prototype, "writableHighWaterMark", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._writableState.highWaterMark; } }); function writeOrBuffer(stream, state2, isBuf, chunk, encoding, cb) { if (!isBuf) { var newChunk = decodeChunk(state2, chunk, encoding); if (chunk !== newChunk) { isBuf = true; encoding = "buffer"; chunk = newChunk; } } var len2 = state2.objectMode ? 1 : chunk.length; state2.length += len2; var ret = state2.length < state2.highWaterMark; if (!ret) state2.needDrain = true; if (state2.writing || state2.corked) { var last = state2.lastBufferedRequest; state2.lastBufferedRequest = { chunk, encoding, isBuf, callback: cb, next: null }; if (last) { last.next = state2.lastBufferedRequest; } else { state2.bufferedRequest = state2.lastBufferedRequest; } state2.bufferedRequestCount += 1; } else { doWrite(stream, state2, false, len2, chunk, encoding, cb); } return ret; } function doWrite(stream, state2, writev, len2, chunk, encoding, cb) { state2.writelen = len2; state2.writecb = cb; state2.writing = true; state2.sync = true; if (state2.destroyed) state2.onwrite(new ERR_STREAM_DESTROYED("write")); else if (writev) stream._writev(chunk, state2.onwrite); else stream._write(chunk, encoding, state2.onwrite); state2.sync = false; } function onwriteError(stream, state2, sync, er, cb) { --state2.pendingcb; if (sync) { process$1.nextTick(cb, er); process$1.nextTick(finishMaybe, stream, state2); stream._writableState.errorEmitted = true; errorOrDestroy(stream, er); } else { cb(er); stream._writableState.errorEmitted = true; errorOrDestroy(stream, er); finishMaybe(stream, state2); } } function onwriteStateUpdate(state2) { state2.writing = false; state2.writecb = null; state2.length -= state2.writelen; state2.writelen = 0; } function onwrite(stream, er) { var state2 = stream._writableState; var sync = state2.sync; var cb = state2.writecb; if (typeof cb !== "function") throw new ERR_MULTIPLE_CALLBACK(); onwriteStateUpdate(state2); if (er) onwriteError(stream, state2, sync, er, cb); else { var finished = needFinish(state2) || stream.destroyed; if (!finished && !state2.corked && !state2.bufferProcessing && state2.bufferedRequest) { clearBuffer(stream, state2); } if (sync) { process$1.nextTick(afterWrite, stream, state2, finished, cb); } else { afterWrite(stream, state2, finished, cb); } } } function afterWrite(stream, state2, finished, cb) { if (!finished) onwriteDrain(stream, state2); state2.pendingcb--; cb(); finishMaybe(stream, state2); } function onwriteDrain(stream, state2) { if (state2.length === 0 && state2.needDrain) { state2.needDrain = false; stream.emit("drain"); } } function clearBuffer(stream, state2) { state2.bufferProcessing = true; var entry = state2.bufferedRequest; if (stream._writev && entry && entry.next) { var l = state2.bufferedRequestCount; var buffer2 = new Array(l); var holder = state2.corkedRequestsFree; holder.entry = entry; var count = 0; var allBuffers = true; while (entry) { buffer2[count] = entry; if (!entry.isBuf) allBuffers = false; entry = entry.next; count += 1; } buffer2.allBuffers = allBuffers; doWrite(stream, state2, true, state2.length, buffer2, "", holder.finish); state2.pendingcb++; state2.lastBufferedRequest = null; if (holder.next) { state2.corkedRequestsFree = holder.next; holder.next = null; } else { state2.corkedRequestsFree = new CorkedRequest(state2); } state2.bufferedRequestCount = 0; } else { while (entry) { var chunk = entry.chunk; var encoding = entry.encoding; var cb = entry.callback; var len2 = state2.objectMode ? 1 : chunk.length; doWrite(stream, state2, false, len2, chunk, encoding, cb); entry = entry.next; state2.bufferedRequestCount--; if (state2.writing) { break; } } if (entry === null) state2.lastBufferedRequest = null; } state2.bufferedRequest = entry; state2.bufferProcessing = false; } Writable.prototype._write = function(chunk, encoding, cb) { cb(new ERR_METHOD_NOT_IMPLEMENTED("_write()")); }; Writable.prototype._writev = null; Writable.prototype.end = function(chunk, encoding, cb) { var state2 = this._writableState; if (typeof chunk === "function") { cb = chunk; chunk = null; encoding = null; } else if (typeof encoding === "function") { cb = encoding; encoding = null; } if (chunk !== null && chunk !== void 0) this.write(chunk, encoding); if (state2.corked) { state2.corked = 1; this.uncork(); } if (!state2.ending) endWritable(this, state2, cb); return this; }; Object.defineProperty(Writable.prototype, "writableLength", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._writableState.length; } }); function needFinish(state2) { return state2.ending && state2.length === 0 && state2.bufferedRequest === null && !state2.finished && !state2.writing; } function callFinal(stream, state2) { stream._final(function(err) { state2.pendingcb--; if (err) { errorOrDestroy(stream, err); } state2.prefinished = true; stream.emit("prefinish"); finishMaybe(stream, state2); }); } function prefinish(stream, state2) { if (!state2.prefinished && !state2.finalCalled) { if (typeof stream._final === "function" && !state2.destroyed) { state2.pendingcb++; state2.finalCalled = true; process$1.nextTick(callFinal, stream, state2); } else { state2.prefinished = true; stream.emit("prefinish"); } } } function finishMaybe(stream, state2) { var need = needFinish(state2); if (need) { prefinish(stream, state2); if (state2.pendingcb === 0) { state2.finished = true; stream.emit("finish"); if (state2.autoDestroy) { var rState = stream._readableState; if (!rState || rState.autoDestroy && rState.endEmitted) { stream.destroy(); } } } } return need; } function endWritable(stream, state2, cb) { state2.ending = true; finishMaybe(stream, state2); if (cb) { if (state2.finished) process$1.nextTick(cb); else stream.once("finish", cb); } state2.ended = true; stream.writable = false; } function onCorkedFinish(corkReq, state2, err) { var entry = corkReq.entry; corkReq.entry = null; while (entry) { var cb = entry.callback; state2.pendingcb--; cb(err); entry = entry.next; } state2.corkedRequestsFree.next = corkReq; } Object.defineProperty(Writable.prototype, "destroyed", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { if (this._writableState === void 0) { return false; } return this._writableState.destroyed; }, set: function set2(value) { if (!this._writableState) { return; } this._writableState.destroyed = value; } }); Writable.prototype.destroy = destroyImpl.destroy; Writable.prototype._undestroy = destroyImpl.undestroy; Writable.prototype._destroy = function(err, cb) { cb(err); }; return _stream_writable$1; } var _stream_duplex$1; var hasRequired_stream_duplex$1; function require_stream_duplex$1() { if (hasRequired_stream_duplex$1) return _stream_duplex$1; hasRequired_stream_duplex$1 = 1; var objectKeys = Object.keys || function(obj) { var keys3 = []; for (var key2 in obj) keys3.push(key2); return keys3; }; _stream_duplex$1 = Duplex; var Readable = require_stream_readable$1(); var Writable = require_stream_writable$1(); requireInherits_browser()(Duplex, Readable); { var keys2 = objectKeys(Writable.prototype); for (var v = 0; v < keys2.length; v++) { var method = keys2[v]; if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; } } function Duplex(options) { if (!(this instanceof Duplex)) return new Duplex(options); Readable.call(this, options); Writable.call(this, options); this.allowHalfOpen = true; if (options) { if (options.readable === false) this.readable = false; if (options.writable === false) this.writable = false; if (options.allowHalfOpen === false) { this.allowHalfOpen = false; this.once("end", onend); } } } Object.defineProperty(Duplex.prototype, "writableHighWaterMark", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._writableState.highWaterMark; } }); Object.defineProperty(Duplex.prototype, "writableBuffer", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._writableState && this._writableState.getBuffer(); } }); Object.defineProperty(Duplex.prototype, "writableLength", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._writableState.length; } }); function onend() { if (this._writableState.ended) return; process$1.nextTick(onEndNT, this); } function onEndNT(self2) { self2.end(); } Object.defineProperty(Duplex.prototype, "destroyed", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { if (this._readableState === void 0 || this._writableState === void 0) { return false; } return this._readableState.destroyed && this._writableState.destroyed; }, set: function set2(value) { if (this._readableState === void 0 || this._writableState === void 0) { return; } this._readableState.destroyed = value; this._writableState.destroyed = value; } }); return _stream_duplex$1; } var string_decoder = {}; var safeBuffer$a = { exports: {} }; var hasRequiredSafeBuffer$a; function requireSafeBuffer$a() { if (hasRequiredSafeBuffer$a) return safeBuffer$a.exports; hasRequiredSafeBuffer$a = 1; (function(module, exports$12) { var buffer2 = requireDist(); var Buffer2 = buffer2.Buffer; function copyProps(src, dst) { for (var key2 in src) { dst[key2] = src[key2]; } } if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { module.exports = buffer2; } else { copyProps(buffer2, exports$12); exports$12.Buffer = SafeBuffer; } function SafeBuffer(arg, encodingOrOffset, length) { return Buffer2(arg, encodingOrOffset, length); } SafeBuffer.prototype = Object.create(Buffer2.prototype); copyProps(Buffer2, SafeBuffer); SafeBuffer.from = function(arg, encodingOrOffset, length) { if (typeof arg === "number") { throw new TypeError("Argument must not be a number"); } return Buffer2(arg, encodingOrOffset, length); }; SafeBuffer.alloc = function(size, fill, encoding) { if (typeof size !== "number") { throw new TypeError("Argument must be a number"); } var buf = Buffer2(size); if (fill !== void 0) { if (typeof encoding === "string") { buf.fill(fill, encoding); } else { buf.fill(fill); } } else { buf.fill(0); } return buf; }; SafeBuffer.allocUnsafe = function(size) { if (typeof size !== "number") { throw new TypeError("Argument must be a number"); } return Buffer2(size); }; SafeBuffer.allocUnsafeSlow = function(size) { if (typeof size !== "number") { throw new TypeError("Argument must be a number"); } return buffer2.SlowBuffer(size); }; })(safeBuffer$a, safeBuffer$a.exports); return safeBuffer$a.exports; } var hasRequiredString_decoder; function requireString_decoder() { if (hasRequiredString_decoder) return string_decoder; hasRequiredString_decoder = 1; var Buffer2 = requireSafeBuffer$a().Buffer; var isEncoding = Buffer2.isEncoding || function(encoding) { encoding = "" + encoding; switch (encoding && encoding.toLowerCase()) { case "hex": case "utf8": case "utf-8": case "ascii": case "binary": case "base64": case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": case "raw": return true; default: return false; } }; function _normalizeEncoding(enc) { if (!enc) return "utf8"; var retried; while (true) { switch (enc) { case "utf8": case "utf-8": return "utf8"; case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return "utf16le"; case "latin1": case "binary": return "latin1"; case "base64": case "ascii": case "hex": return enc; default: if (retried) return; enc = ("" + enc).toLowerCase(); retried = true; } } } function normalizeEncoding(enc) { var nenc = _normalizeEncoding(enc); if (typeof nenc !== "string" && (Buffer2.isEncoding === isEncoding || !isEncoding(enc))) throw new Error("Unknown encoding: " + enc); return nenc || enc; } string_decoder.StringDecoder = StringDecoder; function StringDecoder(encoding) { this.encoding = normalizeEncoding(encoding); var nb; switch (this.encoding) { case "utf16le": this.text = utf16Text; this.end = utf16End; nb = 4; break; case "utf8": this.fillLast = utf8FillLast; nb = 4; break; case "base64": this.text = base64Text; this.end = base64End; nb = 3; break; default: this.write = simpleWrite; this.end = simpleEnd; return; } this.lastNeed = 0; this.lastTotal = 0; this.lastChar = Buffer2.allocUnsafe(nb); } StringDecoder.prototype.write = function(buf) { if (buf.length === 0) return ""; var r; var i2; if (this.lastNeed) { r = this.fillLast(buf); if (r === void 0) return ""; i2 = this.lastNeed; this.lastNeed = 0; } else { i2 = 0; } if (i2 < buf.length) return r ? r + this.text(buf, i2) : this.text(buf, i2); return r || ""; }; StringDecoder.prototype.end = utf8End; StringDecoder.prototype.text = utf8Text; StringDecoder.prototype.fillLast = function(buf) { if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); this.lastNeed -= buf.length; }; function utf8CheckByte(byte) { if (byte <= 127) return 0; else if (byte >> 5 === 6) return 2; else if (byte >> 4 === 14) return 3; else if (byte >> 3 === 30) return 4; return byte >> 6 === 2 ? -1 : -2; } function utf8CheckIncomplete(self2, buf, i2) { var j = buf.length - 1; if (j < i2) return 0; var nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self2.lastNeed = nb - 1; return nb; } if (--j < i2 || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self2.lastNeed = nb - 2; return nb; } if (--j < i2 || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) { if (nb === 2) nb = 0; else self2.lastNeed = nb - 3; } return nb; } return 0; } function utf8CheckExtraBytes(self2, buf, p) { if ((buf[0] & 192) !== 128) { self2.lastNeed = 0; return "�"; } if (self2.lastNeed > 1 && buf.length > 1) { if ((buf[1] & 192) !== 128) { self2.lastNeed = 1; return "�"; } if (self2.lastNeed > 2 && buf.length > 2) { if ((buf[2] & 192) !== 128) { self2.lastNeed = 2; return "�"; } } } } function utf8FillLast(buf) { var p = this.lastTotal - this.lastNeed; var r = utf8CheckExtraBytes(this, buf); if (r !== void 0) return r; if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, p, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, p, 0, buf.length); this.lastNeed -= buf.length; } function utf8Text(buf, i2) { var total = utf8CheckIncomplete(this, buf, i2); if (!this.lastNeed) return buf.toString("utf8", i2); this.lastTotal = total; var end = buf.length - (total - this.lastNeed); buf.copy(this.lastChar, 0, end); return buf.toString("utf8", i2, end); } function utf8End(buf) { var r = buf && buf.length ? this.write(buf) : ""; if (this.lastNeed) return r + "�"; return r; } function utf16Text(buf, i2) { if ((buf.length - i2) % 2 === 0) { var r = buf.toString("utf16le", i2); if (r) { var c = r.charCodeAt(r.length - 1); if (c >= 55296 && c <= 56319) { this.lastNeed = 2; this.lastTotal = 4; this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; return r.slice(0, -1); } } return r; } this.lastNeed = 1; this.lastTotal = 2; this.lastChar[0] = buf[buf.length - 1]; return buf.toString("utf16le", i2, buf.length - 1); } function utf16End(buf) { var r = buf && buf.length ? this.write(buf) : ""; if (this.lastNeed) { var end = this.lastTotal - this.lastNeed; return r + this.lastChar.toString("utf16le", 0, end); } return r; } function base64Text(buf, i2) { var n = (buf.length - i2) % 3; if (n === 0) return buf.toString("base64", i2); this.lastNeed = 3 - n; this.lastTotal = 3; if (n === 1) { this.lastChar[0] = buf[buf.length - 1]; } else { this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; } return buf.toString("base64", i2, buf.length - n); } function base64End(buf) { var r = buf && buf.length ? this.write(buf) : ""; if (this.lastNeed) return r + this.lastChar.toString("base64", 0, 3 - this.lastNeed); return r; } function simpleWrite(buf) { return buf.toString(this.encoding); } function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ""; } return string_decoder; } var endOfStream; var hasRequiredEndOfStream; function requireEndOfStream() { if (hasRequiredEndOfStream) return endOfStream; hasRequiredEndOfStream = 1; var ERR_STREAM_PREMATURE_CLOSE = requireErrorsBrowser().codes.ERR_STREAM_PREMATURE_CLOSE; function once(callback) { var called = false; return function() { if (called) return; called = true; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } callback.apply(this, args); }; } function noop2() { } function isRequest(stream) { return stream.setHeader && typeof stream.abort === "function"; } function eos(stream, opts, callback) { if (typeof opts === "function") return eos(stream, null, opts); if (!opts) opts = {}; callback = once(callback || noop2); var readable = opts.readable || opts.readable !== false && stream.readable; var writable = opts.writable || opts.writable !== false && stream.writable; var onlegacyfinish = function onlegacyfinish2() { if (!stream.writable) onfinish(); }; var writableEnded = stream._writableState && stream._writableState.finished; var onfinish = function onfinish2() { writable = false; writableEnded = true; if (!readable) callback.call(stream); }; var readableEnded = stream._readableState && stream._readableState.endEmitted; var onend = function onend2() { readable = false; readableEnded = true; if (!writable) callback.call(stream); }; var onerror = function onerror2(err) { callback.call(stream, err); }; var onclose = function onclose2() { var err; if (readable && !readableEnded) { if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); return callback.call(stream, err); } if (writable && !writableEnded) { if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); return callback.call(stream, err); } }; var onrequest = function onrequest2() { stream.req.on("finish", onfinish); }; if (isRequest(stream)) { stream.on("complete", onfinish); stream.on("abort", onclose); if (stream.req) onrequest(); else stream.on("request", onrequest); } else if (writable && !stream._writableState) { stream.on("end", onlegacyfinish); stream.on("close", onlegacyfinish); } stream.on("end", onend); stream.on("finish", onfinish); if (opts.error !== false) stream.on("error", onerror); stream.on("close", onclose); return function() { stream.removeListener("complete", onfinish); stream.removeListener("abort", onclose); stream.removeListener("request", onrequest); if (stream.req) stream.req.removeListener("finish", onfinish); stream.removeListener("end", onlegacyfinish); stream.removeListener("close", onlegacyfinish); stream.removeListener("finish", onfinish); stream.removeListener("end", onend); stream.removeListener("error", onerror); stream.removeListener("close", onclose); }; } endOfStream = eos; return endOfStream; } var async_iterator; var hasRequiredAsync_iterator; function requireAsync_iterator() { if (hasRequiredAsync_iterator) return async_iterator; hasRequiredAsync_iterator = 1; var _Object$setPrototypeO; function _defineProperty(obj, key2, value) { key2 = _toPropertyKey(key2); if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } function _toPropertyKey(arg) { var key2 = _toPrimitive(arg, "string"); return typeof key2 === "symbol" ? key2 : String(key2); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== void 0) { var res = prim.call(input, hint); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } var finished = requireEndOfStream(); var kLastResolve = /* @__PURE__ */ Symbol("lastResolve"); var kLastReject = /* @__PURE__ */ Symbol("lastReject"); var kError = /* @__PURE__ */ Symbol("error"); var kEnded = /* @__PURE__ */ Symbol("ended"); var kLastPromise = /* @__PURE__ */ Symbol("lastPromise"); var kHandlePromise = /* @__PURE__ */ Symbol("handlePromise"); var kStream = /* @__PURE__ */ Symbol("stream"); function createIterResult(value, done) { return { value, done }; } function readAndResolve(iter) { var resolve = iter[kLastResolve]; if (resolve !== null) { var data = iter[kStream].read(); if (data !== null) { iter[kLastPromise] = null; iter[kLastResolve] = null; iter[kLastReject] = null; resolve(createIterResult(data, false)); } } } function onReadable(iter) { process$1.nextTick(readAndResolve, iter); } function wrapForNext(lastPromise, iter) { return function(resolve, reject) { lastPromise.then(function() { if (iter[kEnded]) { resolve(createIterResult(void 0, true)); return; } iter[kHandlePromise](resolve, reject); }, reject); }; } var AsyncIteratorPrototype = Object.getPrototypeOf(function() { }); var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { get stream() { return this[kStream]; }, next: function next() { var _this = this; var error = this[kError]; if (error !== null) { return Promise.reject(error); } if (this[kEnded]) { return Promise.resolve(createIterResult(void 0, true)); } if (this[kStream].destroyed) { return new Promise(function(resolve, reject) { process$1.nextTick(function() { if (_this[kError]) { reject(_this[kError]); } else { resolve(createIterResult(void 0, true)); } }); }); } var lastPromise = this[kLastPromise]; var promise; if (lastPromise) { promise = new Promise(wrapForNext(lastPromise, this)); } else { var data = this[kStream].read(); if (data !== null) { return Promise.resolve(createIterResult(data, false)); } promise = new Promise(this[kHandlePromise]); } this[kLastPromise] = promise; return promise; } }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function() { return this; }), _defineProperty(_Object$setPrototypeO, "return", function _return() { var _this2 = this; return new Promise(function(resolve, reject) { _this2[kStream].destroy(null, function(err) { if (err) { reject(err); return; } resolve(createIterResult(void 0, true)); }); }); }), _Object$setPrototypeO), AsyncIteratorPrototype); var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator2(stream) { var _Object$create; var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { value: stream, writable: true }), _defineProperty(_Object$create, kLastResolve, { value: null, writable: true }), _defineProperty(_Object$create, kLastReject, { value: null, writable: true }), _defineProperty(_Object$create, kError, { value: null, writable: true }), _defineProperty(_Object$create, kEnded, { value: stream._readableState.endEmitted, writable: true }), _defineProperty(_Object$create, kHandlePromise, { value: function value(resolve, reject) { var data = iterator[kStream].read(); if (data) { iterator[kLastPromise] = null; iterator[kLastResolve] = null; iterator[kLastReject] = null; resolve(createIterResult(data, false)); } else { iterator[kLastResolve] = resolve; iterator[kLastReject] = reject; } }, writable: true }), _Object$create)); iterator[kLastPromise] = null; finished(stream, function(err) { if (err && err.code !== "ERR_STREAM_PREMATURE_CLOSE") { var reject = iterator[kLastReject]; if (reject !== null) { iterator[kLastPromise] = null; iterator[kLastResolve] = null; iterator[kLastReject] = null; reject(err); } iterator[kError] = err; return; } var resolve = iterator[kLastResolve]; if (resolve !== null) { iterator[kLastPromise] = null; iterator[kLastResolve] = null; iterator[kLastReject] = null; resolve(createIterResult(void 0, true)); } iterator[kEnded] = true; }); stream.on("readable", onReadable.bind(null, iterator)); return iterator; }; async_iterator = createReadableStreamAsyncIterator; return async_iterator; } var fromBrowser; var hasRequiredFromBrowser; function requireFromBrowser() { if (hasRequiredFromBrowser) return fromBrowser; hasRequiredFromBrowser = 1; fromBrowser = function() { throw new Error("Readable.from is not available in the browser"); }; return fromBrowser; } var _stream_readable$1; var hasRequired_stream_readable$1; function require_stream_readable$1() { if (hasRequired_stream_readable$1) return _stream_readable$1; hasRequired_stream_readable$1 = 1; _stream_readable$1 = Readable; var Duplex; Readable.ReadableState = ReadableState; requireEvents().EventEmitter; var EElistenerCount = function EElistenerCount2(emitter, type2) { return emitter.listeners(type2).length; }; var Stream = requireStreamBrowser$1(); var Buffer2 = requireDist().Buffer; var OurUint8Array = (typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() { }; function _uint8ArrayToBuffer(chunk) { return Buffer2.from(chunk); } function _isUint8Array(obj) { return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array; } var debugUtil = requireUtil$1(); var debug; if (debugUtil && debugUtil.debuglog) { debug = debugUtil.debuglog("stream"); } else { debug = function debug2() { }; } var BufferList2 = requireBuffer_list(); var destroyImpl = requireDestroy$1(); var _require = requireState(), getHighWaterMark = _require.getHighWaterMark; var _require$codes = requireErrorsBrowser().codes, ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; var StringDecoder; var createReadableStreamAsyncIterator; var from; requireInherits_browser()(Readable, Stream); var errorOrDestroy = destroyImpl.errorOrDestroy; var kProxyEvents = ["error", "close", "destroy", "pause", "resume"]; function prependListener(emitter, event, fn) { if (typeof emitter.prependListener === "function") return emitter.prependListener(event, fn); if (!emitter._events || !emitter._events[event]) emitter.on(event, fn); else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn); else emitter._events[event] = [fn, emitter._events[event]]; } function ReadableState(options, stream, isDuplex) { Duplex = Duplex || require_stream_duplex$1(); options = options || {}; if (typeof isDuplex !== "boolean") isDuplex = stream instanceof Duplex; this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; this.highWaterMark = getHighWaterMark(this, options, "readableHighWaterMark", isDuplex); this.buffer = new BufferList2(); this.length = 0; this.pipes = null; this.pipesCount = 0; this.flowing = null; this.ended = false; this.endEmitted = false; this.reading = false; this.sync = true; this.needReadable = false; this.emittedReadable = false; this.readableListening = false; this.resumeScheduled = false; this.paused = true; this.emitClose = options.emitClose !== false; this.autoDestroy = !!options.autoDestroy; this.destroyed = false; this.defaultEncoding = options.defaultEncoding || "utf8"; this.awaitDrain = 0; this.readingMore = false; this.decoder = null; this.encoding = null; if (options.encoding) { if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder; this.decoder = new StringDecoder(options.encoding); this.encoding = options.encoding; } } function Readable(options) { Duplex = Duplex || require_stream_duplex$1(); if (!(this instanceof Readable)) return new Readable(options); var isDuplex = this instanceof Duplex; this._readableState = new ReadableState(options, this, isDuplex); this.readable = true; if (options) { if (typeof options.read === "function") this._read = options.read; if (typeof options.destroy === "function") this._destroy = options.destroy; } Stream.call(this); } Object.defineProperty(Readable.prototype, "destroyed", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { if (this._readableState === void 0) { return false; } return this._readableState.destroyed; }, set: function set2(value) { if (!this._readableState) { return; } this._readableState.destroyed = value; } }); Readable.prototype.destroy = destroyImpl.destroy; Readable.prototype._undestroy = destroyImpl.undestroy; Readable.prototype._destroy = function(err, cb) { cb(err); }; Readable.prototype.push = function(chunk, encoding) { var state2 = this._readableState; var skipChunkCheck; if (!state2.objectMode) { if (typeof chunk === "string") { encoding = encoding || state2.defaultEncoding; if (encoding !== state2.encoding) { chunk = Buffer2.from(chunk, encoding); encoding = ""; } skipChunkCheck = true; } } else { skipChunkCheck = true; } return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); }; Readable.prototype.unshift = function(chunk) { return readableAddChunk(this, chunk, null, true, false); }; function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { debug("readableAddChunk", chunk); var state2 = stream._readableState; if (chunk === null) { state2.reading = false; onEofChunk(stream, state2); } else { var er; if (!skipChunkCheck) er = chunkInvalid(state2, chunk); if (er) { errorOrDestroy(stream, er); } else if (state2.objectMode || chunk && chunk.length > 0) { if (typeof chunk !== "string" && !state2.objectMode && Object.getPrototypeOf(chunk) !== Buffer2.prototype) { chunk = _uint8ArrayToBuffer(chunk); } if (addToFront) { if (state2.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT()); else addChunk(stream, state2, chunk, true); } else if (state2.ended) { errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); } else if (state2.destroyed) { return false; } else { state2.reading = false; if (state2.decoder && !encoding) { chunk = state2.decoder.write(chunk); if (state2.objectMode || chunk.length !== 0) addChunk(stream, state2, chunk, false); else maybeReadMore(stream, state2); } else { addChunk(stream, state2, chunk, false); } } } else if (!addToFront) { state2.reading = false; maybeReadMore(stream, state2); } } return !state2.ended && (state2.length < state2.highWaterMark || state2.length === 0); } function addChunk(stream, state2, chunk, addToFront) { if (state2.flowing && state2.length === 0 && !state2.sync) { state2.awaitDrain = 0; stream.emit("data", chunk); } else { state2.length += state2.objectMode ? 1 : chunk.length; if (addToFront) state2.buffer.unshift(chunk); else state2.buffer.push(chunk); if (state2.needReadable) emitReadable(stream); } maybeReadMore(stream, state2); } function chunkInvalid(state2, chunk) { var er; if (!_isUint8Array(chunk) && typeof chunk !== "string" && chunk !== void 0 && !state2.objectMode) { er = new ERR_INVALID_ARG_TYPE("chunk", ["string", "Buffer", "Uint8Array"], chunk); } return er; } Readable.prototype.isPaused = function() { return this._readableState.flowing === false; }; Readable.prototype.setEncoding = function(enc) { if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder; var decoder = new StringDecoder(enc); this._readableState.decoder = decoder; this._readableState.encoding = this._readableState.decoder.encoding; var p = this._readableState.buffer.head; var content = ""; while (p !== null) { content += decoder.write(p.data); p = p.next; } this._readableState.buffer.clear(); if (content !== "") this._readableState.buffer.push(content); this._readableState.length = content.length; return this; }; var MAX_HWM = 1073741824; function computeNewHighWaterMark(n) { if (n >= MAX_HWM) { n = MAX_HWM; } else { n--; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; n++; } return n; } function howMuchToRead(n, state2) { if (n <= 0 || state2.length === 0 && state2.ended) return 0; if (state2.objectMode) return 1; if (n !== n) { if (state2.flowing && state2.length) return state2.buffer.head.data.length; else return state2.length; } if (n > state2.highWaterMark) state2.highWaterMark = computeNewHighWaterMark(n); if (n <= state2.length) return n; if (!state2.ended) { state2.needReadable = true; return 0; } return state2.length; } Readable.prototype.read = function(n) { debug("read", n); n = parseInt(n, 10); var state2 = this._readableState; var nOrig = n; if (n !== 0) state2.emittedReadable = false; if (n === 0 && state2.needReadable && ((state2.highWaterMark !== 0 ? state2.length >= state2.highWaterMark : state2.length > 0) || state2.ended)) { debug("read: emitReadable", state2.length, state2.ended); if (state2.length === 0 && state2.ended) endReadable(this); else emitReadable(this); return null; } n = howMuchToRead(n, state2); if (n === 0 && state2.ended) { if (state2.length === 0) endReadable(this); return null; } var doRead = state2.needReadable; debug("need readable", doRead); if (state2.length === 0 || state2.length - n < state2.highWaterMark) { doRead = true; debug("length less than watermark", doRead); } if (state2.ended || state2.reading) { doRead = false; debug("reading or ended", doRead); } else if (doRead) { debug("do read"); state2.reading = true; state2.sync = true; if (state2.length === 0) state2.needReadable = true; this._read(state2.highWaterMark); state2.sync = false; if (!state2.reading) n = howMuchToRead(nOrig, state2); } var ret; if (n > 0) ret = fromList(n, state2); else ret = null; if (ret === null) { state2.needReadable = state2.length <= state2.highWaterMark; n = 0; } else { state2.length -= n; state2.awaitDrain = 0; } if (state2.length === 0) { if (!state2.ended) state2.needReadable = true; if (nOrig !== n && state2.ended) endReadable(this); } if (ret !== null) this.emit("data", ret); return ret; }; function onEofChunk(stream, state2) { debug("onEofChunk"); if (state2.ended) return; if (state2.decoder) { var chunk = state2.decoder.end(); if (chunk && chunk.length) { state2.buffer.push(chunk); state2.length += state2.objectMode ? 1 : chunk.length; } } state2.ended = true; if (state2.sync) { emitReadable(stream); } else { state2.needReadable = false; if (!state2.emittedReadable) { state2.emittedReadable = true; emitReadable_(stream); } } } function emitReadable(stream) { var state2 = stream._readableState; debug("emitReadable", state2.needReadable, state2.emittedReadable); state2.needReadable = false; if (!state2.emittedReadable) { debug("emitReadable", state2.flowing); state2.emittedReadable = true; process$1.nextTick(emitReadable_, stream); } } function emitReadable_(stream) { var state2 = stream._readableState; debug("emitReadable_", state2.destroyed, state2.length, state2.ended); if (!state2.destroyed && (state2.length || state2.ended)) { stream.emit("readable"); state2.emittedReadable = false; } state2.needReadable = !state2.flowing && !state2.ended && state2.length <= state2.highWaterMark; flow(stream); } function maybeReadMore(stream, state2) { if (!state2.readingMore) { state2.readingMore = true; process$1.nextTick(maybeReadMore_, stream, state2); } } function maybeReadMore_(stream, state2) { while (!state2.reading && !state2.ended && (state2.length < state2.highWaterMark || state2.flowing && state2.length === 0)) { var len2 = state2.length; debug("maybeReadMore read 0"); stream.read(0); if (len2 === state2.length) break; } state2.readingMore = false; } Readable.prototype._read = function(n) { errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED("_read()")); }; Readable.prototype.pipe = function(dest, pipeOpts) { var src = this; var state2 = this._readableState; switch (state2.pipesCount) { case 0: state2.pipes = dest; break; case 1: state2.pipes = [state2.pipes, dest]; break; default: state2.pipes.push(dest); break; } state2.pipesCount += 1; debug("pipe count=%d opts=%j", state2.pipesCount, pipeOpts); var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process$1.stdout && dest !== process$1.stderr; var endFn = doEnd ? onend : unpipe; if (state2.endEmitted) process$1.nextTick(endFn); else src.once("end", endFn); dest.on("unpipe", onunpipe); function onunpipe(readable, unpipeInfo) { debug("onunpipe"); if (readable === src) { if (unpipeInfo && unpipeInfo.hasUnpiped === false) { unpipeInfo.hasUnpiped = true; cleanup(); } } } function onend() { debug("onend"); dest.end(); } var ondrain = pipeOnDrain(src); dest.on("drain", ondrain); var cleanedUp = false; function cleanup() { debug("cleanup"); dest.removeListener("close", onclose); dest.removeListener("finish", onfinish); dest.removeListener("drain", ondrain); dest.removeListener("error", onerror); dest.removeListener("unpipe", onunpipe); src.removeListener("end", onend); src.removeListener("end", unpipe); src.removeListener("data", ondata); cleanedUp = true; if (state2.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); } src.on("data", ondata); function ondata(chunk) { debug("ondata"); var ret = dest.write(chunk); debug("dest.write", ret); if (ret === false) { if ((state2.pipesCount === 1 && state2.pipes === dest || state2.pipesCount > 1 && indexOf2(state2.pipes, dest) !== -1) && !cleanedUp) { debug("false write response, pause", state2.awaitDrain); state2.awaitDrain++; } src.pause(); } } function onerror(er) { debug("onerror", er); unpipe(); dest.removeListener("error", onerror); if (EElistenerCount(dest, "error") === 0) errorOrDestroy(dest, er); } prependListener(dest, "error", onerror); function onclose() { dest.removeListener("finish", onfinish); unpipe(); } dest.once("close", onclose); function onfinish() { debug("onfinish"); dest.removeListener("close", onclose); unpipe(); } dest.once("finish", onfinish); function unpipe() { debug("unpipe"); src.unpipe(dest); } dest.emit("pipe", src); if (!state2.flowing) { debug("pipe resume"); src.resume(); } return dest; }; function pipeOnDrain(src) { return function pipeOnDrainFunctionResult() { var state2 = src._readableState; debug("pipeOnDrain", state2.awaitDrain); if (state2.awaitDrain) state2.awaitDrain--; if (state2.awaitDrain === 0 && EElistenerCount(src, "data")) { state2.flowing = true; flow(src); } }; } Readable.prototype.unpipe = function(dest) { var state2 = this._readableState; var unpipeInfo = { hasUnpiped: false }; if (state2.pipesCount === 0) return this; if (state2.pipesCount === 1) { if (dest && dest !== state2.pipes) return this; if (!dest) dest = state2.pipes; state2.pipes = null; state2.pipesCount = 0; state2.flowing = false; if (dest) dest.emit("unpipe", this, unpipeInfo); return this; } if (!dest) { var dests = state2.pipes; var len2 = state2.pipesCount; state2.pipes = null; state2.pipesCount = 0; state2.flowing = false; for (var i2 = 0; i2 < len2; i2++) dests[i2].emit("unpipe", this, { hasUnpiped: false }); return this; } var index = indexOf2(state2.pipes, dest); if (index === -1) return this; state2.pipes.splice(index, 1); state2.pipesCount -= 1; if (state2.pipesCount === 1) state2.pipes = state2.pipes[0]; dest.emit("unpipe", this, unpipeInfo); return this; }; Readable.prototype.on = function(ev, fn) { var res = Stream.prototype.on.call(this, ev, fn); var state2 = this._readableState; if (ev === "data") { state2.readableListening = this.listenerCount("readable") > 0; if (state2.flowing !== false) this.resume(); } else if (ev === "readable") { if (!state2.endEmitted && !state2.readableListening) { state2.readableListening = state2.needReadable = true; state2.flowing = false; state2.emittedReadable = false; debug("on readable", state2.length, state2.reading); if (state2.length) { emitReadable(this); } else if (!state2.reading) { process$1.nextTick(nReadingNextTick, this); } } } return res; }; Readable.prototype.addListener = Readable.prototype.on; Readable.prototype.removeListener = function(ev, fn) { var res = Stream.prototype.removeListener.call(this, ev, fn); if (ev === "readable") { process$1.nextTick(updateReadableListening, this); } return res; }; Readable.prototype.removeAllListeners = function(ev) { var res = Stream.prototype.removeAllListeners.apply(this, arguments); if (ev === "readable" || ev === void 0) { process$1.nextTick(updateReadableListening, this); } return res; }; function updateReadableListening(self2) { var state2 = self2._readableState; state2.readableListening = self2.listenerCount("readable") > 0; if (state2.resumeScheduled && !state2.paused) { state2.flowing = true; } else if (self2.listenerCount("data") > 0) { self2.resume(); } } function nReadingNextTick(self2) { debug("readable nexttick read 0"); self2.read(0); } Readable.prototype.resume = function() { var state2 = this._readableState; if (!state2.flowing) { debug("resume"); state2.flowing = !state2.readableListening; resume(this, state2); } state2.paused = false; return this; }; function resume(stream, state2) { if (!state2.resumeScheduled) { state2.resumeScheduled = true; process$1.nextTick(resume_, stream, state2); } } function resume_(stream, state2) { debug("resume", state2.reading); if (!state2.reading) { stream.read(0); } state2.resumeScheduled = false; stream.emit("resume"); flow(stream); if (state2.flowing && !state2.reading) stream.read(0); } Readable.prototype.pause = function() { debug("call pause flowing=%j", this._readableState.flowing); if (this._readableState.flowing !== false) { debug("pause"); this._readableState.flowing = false; this.emit("pause"); } this._readableState.paused = true; return this; }; function flow(stream) { var state2 = stream._readableState; debug("flow", state2.flowing); while (state2.flowing && stream.read() !== null) ; } Readable.prototype.wrap = function(stream) { var _this = this; var state2 = this._readableState; var paused = false; stream.on("end", function() { debug("wrapped end"); if (state2.decoder && !state2.ended) { var chunk = state2.decoder.end(); if (chunk && chunk.length) _this.push(chunk); } _this.push(null); }); stream.on("data", function(chunk) { debug("wrapped data"); if (state2.decoder) chunk = state2.decoder.write(chunk); if (state2.objectMode && (chunk === null || chunk === void 0)) return; else if (!state2.objectMode && (!chunk || !chunk.length)) return; var ret = _this.push(chunk); if (!ret) { paused = true; stream.pause(); } }); for (var i2 in stream) { if (this[i2] === void 0 && typeof stream[i2] === "function") { this[i2] = /* @__PURE__ */ (function methodWrap(method) { return function methodWrapReturnFunction() { return stream[method].apply(stream, arguments); }; })(i2); } } for (var n = 0; n < kProxyEvents.length; n++) { stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); } this._read = function(n2) { debug("wrapped _read", n2); if (paused) { paused = false; stream.resume(); } }; return this; }; if (typeof Symbol === "function") { Readable.prototype[Symbol.asyncIterator] = function() { if (createReadableStreamAsyncIterator === void 0) { createReadableStreamAsyncIterator = requireAsync_iterator(); } return createReadableStreamAsyncIterator(this); }; } Object.defineProperty(Readable.prototype, "readableHighWaterMark", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._readableState.highWaterMark; } }); Object.defineProperty(Readable.prototype, "readableBuffer", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._readableState && this._readableState.buffer; } }); Object.defineProperty(Readable.prototype, "readableFlowing", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._readableState.flowing; }, set: function set2(state2) { if (this._readableState) { this._readableState.flowing = state2; } } }); Readable._fromList = fromList; Object.defineProperty(Readable.prototype, "readableLength", { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get2() { return this._readableState.length; } }); function fromList(n, state2) { if (state2.length === 0) return null; var ret; if (state2.objectMode) ret = state2.buffer.shift(); else if (!n || n >= state2.length) { if (state2.decoder) ret = state2.buffer.join(""); else if (state2.buffer.length === 1) ret = state2.buffer.first(); else ret = state2.buffer.concat(state2.length); state2.buffer.clear(); } else { ret = state2.buffer.consume(n, state2.decoder); } return ret; } function endReadable(stream) { var state2 = stream._readableState; debug("endReadable", state2.endEmitted); if (!state2.endEmitted) { state2.ended = true; process$1.nextTick(endReadableNT, state2, stream); } } function endReadableNT(state2, stream) { debug("endReadableNT", state2.endEmitted, state2.length); if (!state2.endEmitted && state2.length === 0) { state2.endEmitted = true; stream.readable = false; stream.emit("end"); if (state2.autoDestroy) { var wState = stream._writableState; if (!wState || wState.autoDestroy && wState.finished) { stream.destroy(); } } } } if (typeof Symbol === "function") { Readable.from = function(iterable, opts) { if (from === void 0) { from = requireFromBrowser(); } return from(Readable, iterable, opts); }; } function indexOf2(xs, x) { for (var i2 = 0, l = xs.length; i2 < l; i2++) { if (xs[i2] === x) return i2; } return -1; } return _stream_readable$1; } var _stream_transform$1; var hasRequired_stream_transform$1; function require_stream_transform$1() { if (hasRequired_stream_transform$1) return _stream_transform$1; hasRequired_stream_transform$1 = 1; _stream_transform$1 = Transform; var _require$codes = requireErrorsBrowser().codes, ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; var Duplex = require_stream_duplex$1(); requireInherits_browser()(Transform, Duplex); function afterTransform(er, data) { var ts = this._transformState; ts.transforming = false; var cb = ts.writecb; if (cb === null) { return this.emit("error", new ERR_MULTIPLE_CALLBACK()); } ts.writechunk = null; ts.writecb = null; if (data != null) this.push(data); cb(er); var rs = this._readableState; rs.reading = false; if (rs.needReadable || rs.length < rs.highWaterMark) { this._read(rs.highWaterMark); } } function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); Duplex.call(this, options); this._transformState = { afterTransform: afterTransform.bind(this), needTransform: false, transforming: false, writecb: null, writechunk: null, writeencoding: null }; this._readableState.needReadable = true; this._readableState.sync = false; if (options) { if (typeof options.transform === "function") this._transform = options.transform; if (typeof options.flush === "function") this._flush = options.flush; } this.on("prefinish", prefinish); } function prefinish() { var _this = this; if (typeof this._flush === "function" && !this._readableState.destroyed) { this._flush(function(er, data) { done(_this, er, data); }); } else { done(this, null, null); } } Transform.prototype.push = function(chunk, encoding) { this._transformState.needTransform = false; return Duplex.prototype.push.call(this, chunk, encoding); }; Transform.prototype._transform = function(chunk, encoding, cb) { cb(new ERR_METHOD_NOT_IMPLEMENTED("_transform()")); }; Transform.prototype._write = function(chunk, encoding, cb) { var ts = this._transformState; ts.writecb = cb; ts.writechunk = chunk; ts.writeencoding = encoding; if (!ts.transforming) { var rs = this._readableState; if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); } }; Transform.prototype._read = function(n) { var ts = this._transformState; if (ts.writechunk !== null && !ts.transforming) { ts.transforming = true; this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); } else { ts.needTransform = true; } }; Transform.prototype._destroy = function(err, cb) { Duplex.prototype._destroy.call(this, err, function(err2) { cb(err2); }); }; function done(stream, er, data) { if (er) return stream.emit("error", er); if (data != null) stream.push(data); if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); return stream.push(null); } return _stream_transform$1; } var _stream_passthrough$1; var hasRequired_stream_passthrough$1; function require_stream_passthrough$1() { if (hasRequired_stream_passthrough$1) return _stream_passthrough$1; hasRequired_stream_passthrough$1 = 1; _stream_passthrough$1 = PassThrough; var Transform = require_stream_transform$1(); requireInherits_browser()(PassThrough, Transform); function PassThrough(options) { if (!(this instanceof PassThrough)) return new PassThrough(options); Transform.call(this, options); } PassThrough.prototype._transform = function(chunk, encoding, cb) { cb(null, chunk); }; return _stream_passthrough$1; } var pipeline_1; var hasRequiredPipeline; function requirePipeline() { if (hasRequiredPipeline) return pipeline_1; hasRequiredPipeline = 1; var eos; function once(callback) { var called = false; return function() { if (called) return; called = true; callback.apply(void 0, arguments); }; } var _require$codes = requireErrorsBrowser().codes, ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; function noop2(err) { if (err) throw err; } function isRequest(stream) { return stream.setHeader && typeof stream.abort === "function"; } function destroyer(stream, reading, writing, callback) { callback = once(callback); var closed = false; stream.on("close", function() { closed = true; }); if (eos === void 0) eos = requireEndOfStream(); eos(stream, { readable: reading, writable: writing }, function(err) { if (err) return callback(err); closed = true; callback(); }); var destroyed = false; return function(err) { if (closed) return; if (destroyed) return; destroyed = true; if (isRequest(stream)) return stream.abort(); if (typeof stream.destroy === "function") return stream.destroy(); callback(err || new ERR_STREAM_DESTROYED("pipe")); }; } function call(fn) { fn(); } function pipe(from, to) { return from.pipe(to); } function popCallback(streams) { if (!streams.length) return noop2; if (typeof streams[streams.length - 1] !== "function") return noop2; return streams.pop(); } function pipeline() { for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { streams[_key] = arguments[_key]; } var callback = popCallback(streams); if (Array.isArray(streams[0])) streams = streams[0]; if (streams.length < 2) { throw new ERR_MISSING_ARGS("streams"); } var error; var destroys = streams.map(function(stream, i2) { var reading = i2 < streams.length - 1; var writing = i2 > 0; return destroyer(stream, reading, writing, function(err) { if (!error) error = err; if (err) destroys.forEach(call); if (reading) return; destroys.forEach(call); callback(error); }); }); return streams.reduce(pipe); } pipeline_1 = pipeline; return pipeline_1; } var streamBrowserify; var hasRequiredStreamBrowserify; function requireStreamBrowserify() { if (hasRequiredStreamBrowserify) return streamBrowserify; hasRequiredStreamBrowserify = 1; streamBrowserify = Stream; var EE = requireEvents().EventEmitter; var inherits = requireInherits_browser(); inherits(Stream, EE); Stream.Readable = require_stream_readable$1(); Stream.Writable = require_stream_writable$1(); Stream.Duplex = require_stream_duplex$1(); Stream.Transform = require_stream_transform$1(); Stream.PassThrough = require_stream_passthrough$1(); Stream.finished = requireEndOfStream(); Stream.pipeline = requirePipeline(); Stream.Stream = Stream; function Stream() { EE.call(this); } Stream.prototype.pipe = function(dest, options) { var source = this; function ondata(chunk) { if (dest.writable) { if (false === dest.write(chunk) && source.pause) { source.pause(); } } } source.on("data", ondata); function ondrain() { if (source.readable && source.resume) { source.resume(); } } dest.on("drain", ondrain); if (!dest._isStdio && (!options || options.end !== false)) { source.on("end", onend); source.on("close", onclose); } var didOnEnd = false; function onend() { if (didOnEnd) return; didOnEnd = true; dest.end(); } function onclose() { if (didOnEnd) return; didOnEnd = true; if (typeof dest.destroy === "function") dest.destroy(); } function onerror(er) { cleanup(); if (EE.listenerCount(this, "error") === 0) { throw er; } } source.on("error", onerror); dest.on("error", onerror); function cleanup() { source.removeListener("data", ondata); dest.removeListener("drain", ondrain); source.removeListener("end", onend); source.removeListener("close", onclose); source.removeListener("error", onerror); dest.removeListener("error", onerror); source.removeListener("end", cleanup); source.removeListener("close", cleanup); dest.removeListener("close", cleanup); } source.on("end", cleanup); source.on("close", cleanup); dest.on("close", cleanup); dest.emit("pipe", source); return dest; }; return streamBrowserify; } requireStreamBrowserify(); const _ParseError = class _ParseError extends Error { /** * @param {number} code An error code constant from Parse.Error. * @param {string} message A detailed description of the error. */ constructor(code2, message) { super(message); this.code = code2; let customMessage = message; CoreManager.get("PARSE_ERRORS").forEach((error) => { if (error.code === code2 && error.code) { customMessage = error.message; } }); Object.defineProperty(this, "message", { enumerable: true, value: customMessage }); } toString() { return "ParseError: " + this.code + " " + this.message; } }; _ParseError.OTHER_CAUSE = -1; _ParseError.INTERNAL_SERVER_ERROR = 1; _ParseError.CONNECTION_FAILED = 100; _ParseError.OBJECT_NOT_FOUND = 101; _ParseError.INVALID_QUERY = 102; _ParseError.INVALID_CLASS_NAME = 103; _ParseError.MISSING_OBJECT_ID = 104; _ParseError.INVALID_KEY_NAME = 105; _ParseError.INVALID_POINTER = 106; _ParseError.INVALID_JSON = 107; _ParseError.COMMAND_UNAVAILABLE = 108; _ParseError.NOT_INITIALIZED = 109; _ParseError.INCORRECT_TYPE = 111; _ParseError.INVALID_CHANNEL_NAME = 112; _ParseError.PUSH_MISCONFIGURED = 115; _ParseError.OBJECT_TOO_LARGE = 116; _ParseError.OPERATION_FORBIDDEN = 119; _ParseError.CACHE_MISS = 120; _ParseError.INVALID_NESTED_KEY = 121; _ParseError.INVALID_FILE_NAME = 122; _ParseError.INVALID_ACL = 123; _ParseError.TIMEOUT = 124; _ParseError.INVALID_EMAIL_ADDRESS = 125; _ParseError.MISSING_CONTENT_TYPE = 126; _ParseError.MISSING_CONTENT_LENGTH = 127; _ParseError.INVALID_CONTENT_LENGTH = 128; _ParseError.FILE_TOO_LARGE = 129; _ParseError.FILE_SAVE_ERROR = 130; _ParseError.DUPLICATE_VALUE = 137; _ParseError.INVALID_ROLE_NAME = 139; _ParseError.EXCEEDED_QUOTA = 140; _ParseError.SCRIPT_FAILED = 141; _ParseError.VALIDATION_ERROR = 142; _ParseError.INVALID_IMAGE_DATA = 143; _ParseError.UNSAVED_FILE_ERROR = 151; _ParseError.INVALID_PUSH_TIME_ERROR = 152; _ParseError.FILE_DELETE_ERROR = 153; _ParseError.FILE_DELETE_UNNAMED_ERROR = 161; _ParseError.REQUEST_LIMIT_EXCEEDED = 155; _ParseError.DUPLICATE_REQUEST = 159; _ParseError.INVALID_EVENT_NAME = 160; _ParseError.INVALID_VALUE = 162; _ParseError.USERNAME_MISSING = 200; _ParseError.PASSWORD_MISSING = 201; _ParseError.USERNAME_TAKEN = 202; _ParseError.EMAIL_TAKEN = 203; _ParseError.EMAIL_MISSING = 204; _ParseError.EMAIL_NOT_FOUND = 205; _ParseError.SESSION_MISSING = 206; _ParseError.MUST_CREATE_USER_THROUGH_SIGNUP = 207; _ParseError.ACCOUNT_ALREADY_LINKED = 208; _ParseError.INVALID_SESSION_TOKEN = 209; _ParseError.MFA_ERROR = 210; _ParseError.MFA_TOKEN_REQUIRED = 211; _ParseError.LINKED_ID_MISSING = 250; _ParseError.INVALID_LINKED_SESSION = 251; _ParseError.UNSUPPORTED_SERVICE = 252; _ParseError.INVALID_SCHEMA_OPERATION = 255; _ParseError.AGGREGATE_ERROR = 600; _ParseError.FILE_READ_ERROR = 601; _ParseError.X_DOMAIN_REQUEST = 602; let ParseError = _ParseError; let NodeReadable; function b64Digit(number) { if (number < 26) { return String.fromCharCode(65 + number); } if (number < 52) { return String.fromCharCode(97 + (number - 26)); } if (number < 62) { return String.fromCharCode(48 + (number - 52)); } if (number === 62) { return "+"; } if (number === 63) { return "/"; } throw new TypeError("Tried to encode large digit " + number + " in base64."); } class ParseFile { /** * @param name {String} The file's name. This will be prefixed by a unique * value once the file has finished saving. The file name must begin with * an alphanumeric character, and consist of alphanumeric characters, * periods, spaces, underscores, or dashes. * @param data {Array} The data for the file, as either: * 1. an Array of byte value Numbers or Uint8Array. * 2. an Object like { base64: "..." } with a base64-encoded String. * 3. an Object like { uri: "..." } with a uri String. * 4. a File object selected with a file upload control. * 5. (Node.js only) a Buffer. Uploaded as raw binary data instead of * base64-encoding, reducing memory usage. Falls back to base64 * JSON encoding if metadata or tags are set. * 6. (Node.js only) a Readable stream, or a Web ReadableStream. * Streamed as raw binary data directly into the upload request. * Supports metadata, tags, and directory when Parse Server >= 9.5.0. * For example: *
     * var fileUploadControl = $("#profilePhotoFileUpload")[0];
     * if (fileUploadControl.files.length > 0) {
     *   var file = fileUploadControl.files[0];
     *   var name = "photo.jpg";
     *   var parseFile = new Parse.File(name, file);
     *   parseFile.save().then(function() {
     *     // The file has been saved to Parse.
     *   }, function(error) {
     *     // The file either could not be read, or could not be saved to Parse.
     *   });
     * }
* @param type {String} Optional Content-Type header to use for the file. If * this is omitted, the content type will be inferred from the name's * extension. * @param metadata {object} Optional key value pairs to be stored with file object * @param tags {object} Optional key value pairs to be stored with file object */ constructor(name, data, type2, metadata, tags) { const specifiedType = type2 || ""; this._name = name; this._metadata = metadata || {}; this._tags = tags || {}; if (data !== void 0) { if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) { this._source = { format: "buffer", buffer: data, type: specifiedType }; } else if (data !== null && typeof data === "object" && typeof data.pipe === "function" && typeof data.read === "function") { this._source = { format: "stream", stream: data, type: specifiedType }; } else if (typeof ReadableStream !== "undefined" && data instanceof ReadableStream) { this._source = { format: "stream", stream: data, type: specifiedType }; } else if (Array.isArray(data) || data instanceof Uint8Array) { this._data = ParseFile.encodeBase64(data); this._source = { format: "base64", base64: this._data, type: specifiedType }; } else if (typeof Blob !== "undefined" && data instanceof Blob) { this._source = { format: "file", file: data, type: specifiedType }; } else if (data && typeof data.uri === "string" && data.uri !== void 0) { this._source = { format: "uri", uri: data.uri, type: specifiedType }; } else if (data && typeof data.base64 === "string") { const base64 = data.base64.split(",").slice(-1)[0]; const dataType = specifiedType || data.base64.split(";").slice(0, 1)[0].split(":").slice(1, 2)[0] || "text/plain"; this._data = base64; this._source = { format: "base64", base64, type: dataType }; } else { throw new TypeError("Cannot create a Parse.File with that data."); } } } /** * Return the data for the file, downloading it if not already present. * Data is present if initialized with Byte Array, Base64 or Saved with Uri. * Data is cleared if saved with File object selected with a file upload control * * @param {object} options * @param {function} [options.progress] callback for download progress *
     * const parseFile = new Parse.File(name, file);
     * parseFile.getData({
     *   progress: (progressValue, loaded, total) => {
     *     if (progressValue !== null) {
     *       // Update the UI using progressValue
     *     }
     *   }
     * });
     * 
* @returns {Promise} Promise that is resolve with base64 data */ async getData(options) { options = options || {}; if (this._data) { return this._data; } if (this._source?.format === "buffer") { this._data = this._source.buffer.toString("base64"); return this._data; } if (!this._url) { throw new Error("Cannot retrieve data for unsaved ParseFile."); } options.requestTask = (task) => this._requestTask = task; const controller = CoreManager.getFileController(); const result = await controller.download(this._url, options); this._data = result.base64; return this._data; } /** * Gets the name of the file. Before save is called, this is the filename * given by the user. After save is called, that name gets prefixed with a * unique identifier. * * @returns {string} */ name() { return this._name; } /** * Gets the url of the file. It is only available after you save the file or * after you get the file from a Parse.Object. * * @param {object} options An object to specify url options * @param {boolean} [options.forceSecure] force the url to be secure * @returns {string | undefined} */ url(options) { options = options || {}; if (!this._url) { return; } if (options.forceSecure) { return this._url.replace(/^http:\/\//i, "https://"); } else { return this._url; } } /** * Gets the metadata of the file. * * @returns {object} */ metadata() { return this._metadata; } /** * Gets the tags of the file. * * @returns {object} */ tags() { return this._tags; } /** * Gets the directory of the file. * Requires Parse Server >= 9.4.0. * * @returns {string | undefined} */ directory() { return this._directory; } /** * Saves the file to the Parse cloud. * * In Node.js, files created with Buffer or ReadableStream are uploaded as * raw binary data, avoiding base64 encoding overhead. If metadata * or tags are set on a Buffer-backed file, the upload falls back to base64 * JSON encoding. Stream-backed files support metadata, tags, and directory * when Parse Server >= 9.5.0. * * @param {object} options * Valid options are:
    *
  • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
  • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
  • progress: callback for upload progress. For example: *
         * let parseFile = new Parse.File(name, file);
         * parseFile.save({
         *   progress: (progressValue, loaded, total) => {
         *     if (progressValue !== null) {
         *       // Update the UI using progressValue
         *     }
         *   }
         * });
         * 
    *
  • maxUploadSize: Overrides the server's maxUploadSize for this upload. * Requires the master key. Only supported for Buffer and Stream source * types; files created from base64 strings, number arrays, Blobs, or URIs * do not support this option. Requires Parse Server >= 9.5.0. *
* @returns {Promise | undefined} Promise that is resolved when the save finishes. */ save(options) { options = options || {}; options.requestTask = (task) => this._requestTask = task; options.metadata = this._metadata; options.tags = this._tags; options.directory = this._directory; const controller = CoreManager.getFileController(); if (!this._previousSave) { if (this._source.format === "buffer" || this._source.format === "stream") { if (this._source.format === "stream" && !controller.saveBinary) { throw new Error( "Cannot save a stream-based file without saveBinary support on the FileController." ); } const hasFileData = this._metadata && Object.keys(this._metadata).length > 0 || this._tags && Object.keys(this._tags).length > 0 || !!this._directory; if (controller.saveBinary && (this._source.format === "stream" || !hasFileData || options.maxUploadSize)) { this._previousSave = controller.saveBinary(this._name, this._source, options).then((res) => { this._name = res.name; this._url = res.url; this._data = null; this._requestTask = null; return this; }); } else if (this._source.format === "buffer") { const base64Source = { format: "base64", base64: this._source.buffer.toString("base64"), type: this._source.type }; this._previousSave = controller.saveBase64(this._name, base64Source, options).then((res) => { this._name = res.name; this._url = res.url; this._requestTask = null; return this; }); } } else if (this._source.format === "file") { this._previousSave = controller.saveFile(this._name, this._source, options).then((res) => { this._name = res.name; this._url = res.url; this._data = null; this._requestTask = null; return this; }); } else if (this._source.format === "uri") { this._previousSave = controller.download(this._source.uri, options).then((result) => { if (!(result && result.base64)) { return {}; } const newSource = { format: "base64", base64: result.base64, type: result.contentType }; this._data = result.base64; this._requestTask = null; return controller.saveBase64(this._name, newSource, options); }).then((res) => { this._name = res.name; this._url = res.url; this._requestTask = null; return this; }); } else { this._previousSave = controller.saveBase64(this._name, this._source, options).then((res) => { this._name = res.name; this._url = res.url; this._requestTask = null; return this; }); } } if (this._previousSave) { return this._previousSave; } } /** * Aborts the request if it has already been sent. */ cancel() { if (this._requestTask && typeof this._requestTask.abort === "function") { this._requestTask._aborted = true; this._requestTask.abort(); } this._requestTask = null; } /** * Deletes the file from the Parse cloud. * In Cloud Code and Node only with Master Key. * * @param {object} options * Valid options are:
    *
  • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
         * @returns {Promise} Promise that is resolved when the delete finishes.
         */
        destroy(options = {}) {
          if (!this._name) {
            throw new ParseError(ParseError.FILE_DELETE_UNNAMED_ERROR, "Cannot delete an unnamed file.");
          }
          const destroyOptions = { useMasterKey: true };
          if (Object.hasOwn(options, "useMasterKey")) {
            destroyOptions.useMasterKey = !!options.useMasterKey;
          }
          const controller = CoreManager.getFileController();
          return controller.deleteFile(this._name, destroyOptions).then(() => {
            this._data = void 0;
            this._requestTask = null;
            return this;
          });
        }
        toJSON() {
          return {
            __type: "File",
            name: this._name,
            url: this._url
          };
        }
        equals(other) {
          if (this === other) {
            return true;
          }
          return other instanceof ParseFile && this.name() === other.name() && this.url() === other.url() && typeof this.url() !== "undefined";
        }
        /**
         * Sets metadata to be saved with file object. Overwrites existing metadata.
         * When used with a stream-based file, requires Parse Server >= 9.5.0.
         *
         * @param {object} metadata Key value pairs to be stored with file object
         */
        setMetadata(metadata) {
          if (metadata && typeof metadata === "object") {
            Object.keys(metadata).forEach((key2) => {
              this.addMetadata(key2, metadata[key2]);
            });
          }
        }
        /**
         * Sets metadata to be saved with file object. Adds to existing metadata.
         * When used with a stream-based file, requires Parse Server >= 9.5.0.
         *
         * @param {string} key key to store the metadata
         * @param {*} value metadata
         */
        addMetadata(key2, value) {
          if (typeof key2 === "string") {
            this._metadata[key2] = value;
          }
        }
        /**
         * Sets tags to be saved with file object. Overwrites existing tags.
         * When used with a stream-based file, requires Parse Server >= 9.5.0.
         *
         * @param {object} tags Key value pairs to be stored with file object
         */
        setTags(tags) {
          if (tags && typeof tags === "object") {
            Object.keys(tags).forEach((key2) => {
              this.addTag(key2, tags[key2]);
            });
          }
        }
        /**
         * Sets tags to be saved with file object. Adds to existing tags.
         * When used with a stream-based file, requires Parse Server >= 9.5.0.
         *
         * @param {string} key key to store tags
         * @param {*} value tag
         */
        addTag(key2, value) {
          if (typeof key2 === "string") {
            this._tags[key2] = value;
          }
        }
        /**
         * Sets the directory where the file will be stored.
         * Requires the Master Key when saving.
         * Requires Parse Server >= 9.4.0; when used with a stream-based file, requires Parse Server >= 9.5.0.
         *
         * @param {string} directory the directory path
         */
        setDirectory(directory) {
          if (typeof directory === "string" && directory.length > 0) {
            this._directory = directory;
          }
        }
        static fromJSON(obj) {
          if (obj.__type !== "File") {
            throw new TypeError("JSON object does not represent a ParseFile");
          }
          const file = new ParseFile(obj.name);
          file._url = obj.url;
          return file;
        }
        static encodeBase64(bytes) {
          const chunks = [];
          chunks.length = Math.ceil(bytes.length / 3);
          for (let i2 = 0; i2 < chunks.length; i2++) {
            const b1 = bytes[i2 * 3];
            const b2 = bytes[i2 * 3 + 1] || 0;
            const b3 = bytes[i2 * 3 + 2] || 0;
            const has2 = i2 * 3 + 1 < bytes.length;
            const has3 = i2 * 3 + 2 < bytes.length;
            chunks[i2] = [
              b64Digit(b1 >> 2 & 63),
              b64Digit(b1 << 4 & 48 | b2 >> 4 & 15),
              has2 ? b64Digit(b2 << 2 & 60 | b3 >> 6 & 3) : "=",
              has3 ? b64Digit(b3 & 63) : "="
            ].join("");
          }
          return chunks.join("");
        }
      }
      const DefaultController$a = {
        saveFile: async function(name, source, options) {
          if (source.format !== "file") {
            throw new Error("saveFile can only be used with File-type sources.");
          }
          const base64Data = await new Promise((res, rej) => {
            const reader = new FileReader();
            reader.onload = () => res(reader.result);
            reader.onerror = (error) => rej(error);
            reader.readAsDataURL(source.file);
          });
          const [first, second] = base64Data.split(",");
          const data = second ? second : first;
          const newSource = {
            format: "base64",
            base64: data,
            type: source.type || (source.file ? source.file.type : void 0)
          };
          return await DefaultController$a.saveBase64(name, newSource, options);
        },
        saveBase64: function(name, source, options = {}) {
          if (source.format !== "base64") {
            throw new Error("saveBase64 can only be used with Base64-type sources.");
          }
          const data = {
            base64: source.base64,
            fileData: {
              metadata: { ...options.metadata },
              tags: { ...options.tags },
              ...options.directory ? { directory: options.directory } : {}
            }
          };
          delete options.metadata;
          delete options.tags;
          delete options.directory;
          if (source.type) {
            data._ContentType = source.type;
          }
          const path = "files/" + name;
          return CoreManager.getRESTController().request("POST", path, data, options);
        },
        saveBinary: async function(name, source, options = {}) {
          if (source.format !== "buffer" && source.format !== "stream") {
            throw new Error("saveBinary can only be used with Buffer or Stream sources.");
          }
          const headers = {
            "X-Parse-Application-ID": CoreManager.get("APPLICATION_ID"),
            "X-Parse-Upload-Mode": "stream"
          };
          headers["Content-Type"] = (source.type || "application/octet-stream").replace(/[\r\n]/g, "");
          if (options.directory) {
            headers["X-Parse-File-Directory"] = options.directory.replace(/[\r\n]/g, "");
          }
          if (options.metadata && Object.keys(options.metadata).length > 0) {
            headers["X-Parse-File-Metadata"] = JSON.stringify(options.metadata);
          }
          if (options.tags && Object.keys(options.tags).length > 0) {
            headers["X-Parse-File-Tags"] = JSON.stringify(options.tags);
          }
          if (options.maxUploadSize) {
            headers["X-Parse-File-Max-Upload-Size"] = options.maxUploadSize.replace(/[\r\n]/g, "");
          }
          const jsKey = CoreManager.get("JAVASCRIPT_KEY");
          if (jsKey) {
            headers["X-Parse-JavaScript-Key"] = jsKey;
          }
          let useMasterKey = options.useMasterKey;
          if (typeof useMasterKey === "undefined") {
            useMasterKey = CoreManager.get("USE_MASTER_KEY");
          }
          if (useMasterKey) {
            if (CoreManager.get("MASTER_KEY")) {
              delete headers["X-Parse-JavaScript-Key"];
              headers["X-Parse-Master-Key"] = CoreManager.get("MASTER_KEY");
            } else {
              throw new Error("Cannot use the Master Key, it has not been provided.");
            }
          }
          if (options.sessionToken) {
            headers["X-Parse-Session-Token"] = options.sessionToken;
          } else {
            const userController = CoreManager.getUserController();
            if (userController) {
              const user = await userController.currentUserAsync();
              if (user) {
                const token = user.getSessionToken();
                if (token) {
                  headers["X-Parse-Session-Token"] = token;
                }
              }
            }
          }
          let body;
          if (source.format === "buffer") {
            body = source.buffer;
          } else if (source.format === "stream") {
            const stream = source.stream;
            if (typeof stream.pipe === "function" && typeof stream.read === "function") {
              body = NodeReadable.toWeb(stream);
            } else {
              body = stream;
            }
          }
          let url = CoreManager.get("SERVER_URL");
          if (url[url.length - 1] !== "/") {
            url += "/";
          }
          url += "files/" + encodeURIComponent(name);
          return CoreManager.getRESTController().ajax("POST", url, body, headers, options).then(({ response }) => response);
        },
        download: async function(uri2, options) {
          const controller = new AbortController();
          options.requestTask(controller);
          const { signal } = controller;
          try {
            const response = await fetch(uri2, { signal });
            const reader = response.body.getReader();
            const length = +response.headers.get("Content-Length") || 0;
            const contentType = response.headers.get("Content-Type");
            if (length === 0) {
              options.progress?.(null, null, null);
              return {
                base64: "",
                contentType
              };
            }
            let recieved = 0;
            const chunks = [];
            while (true) {
              const { done, value } = await reader.read();
              if (done) {
                break;
              }
              chunks.push(value);
              recieved += value?.length || 0;
              options.progress?.(recieved / length, recieved, length);
            }
            const body = new Uint8Array(recieved);
            let offset = 0;
            for (const chunk of chunks) {
              body.set(chunk, offset);
              offset += chunk.length;
            }
            return {
              base64: ParseFile.encodeBase64(body),
              contentType
            };
          } catch (error) {
            if (error.name === "AbortError") {
              return {};
            } else {
              throw error;
            }
          }
        },
        deleteFile: function(name, options) {
          const headers = {
            "X-Parse-Application-ID": CoreManager.get("APPLICATION_ID")
          };
          if (options.useMasterKey) {
            headers["X-Parse-Master-Key"] = CoreManager.get("MASTER_KEY");
          }
          let url = CoreManager.get("SERVER_URL");
          if (url[url.length - 1] !== "/") {
            url += "/";
          }
          url += "files/" + name;
          return CoreManager.getRESTController().ajax("DELETE", url, "", headers).catch((response) => {
            if (!response || response.toString() === "SyntaxError: Unexpected end of JSON input") {
              return Promise.resolve();
            } else {
              return CoreManager.getRESTController().handleError(response);
            }
          });
        }
      };
      CoreManager.setFileController(DefaultController$a);
      class ParseGeoPoint {
        /**
         * @param {(number[] | object | number)} arg1 Either a list of coordinate pairs, an object with `latitude`, `longitude`, or the latitude or the point.
         * @param {number} arg2 The longitude of the GeoPoint
         */
        constructor(arg1, arg2) {
          if (Array.isArray(arg1)) {
            ParseGeoPoint._validate(arg1[0], arg1[1]);
            this._latitude = arg1[0];
            this._longitude = arg1[1];
          } else if (typeof arg1 === "object") {
            ParseGeoPoint._validate(arg1.latitude, arg1.longitude);
            this._latitude = arg1.latitude;
            this._longitude = arg1.longitude;
          } else if (arg1 !== void 0 && arg2 !== void 0) {
            ParseGeoPoint._validate(arg1, arg2);
            this._latitude = arg1;
            this._longitude = arg2;
          } else {
            this._latitude = 0;
            this._longitude = 0;
          }
        }
        /**
         * North-south portion of the coordinate, in range [-90, 90].
         * Throws an exception if set out of range in a modern browser.
         *
         * @property {number} latitude
         * @returns {number}
         */
        get latitude() {
          return this._latitude;
        }
        set latitude(val) {
          ParseGeoPoint._validate(val, this.longitude);
          this._latitude = val;
        }
        /**
         * East-west portion of the coordinate, in range [-180, 180].
         * Throws if set out of range in a modern browser.
         *
         * @property {number} longitude
         * @returns {number}
         */
        get longitude() {
          return this._longitude;
        }
        set longitude(val) {
          ParseGeoPoint._validate(this.latitude, val);
          this._longitude = val;
        }
        /**
         * Returns a JSON representation of the GeoPoint, suitable for Parse.
         *
         * @returns {object}
         */
        toJSON() {
          ParseGeoPoint._validate(this._latitude, this._longitude);
          return {
            __type: "GeoPoint",
            latitude: this._latitude,
            longitude: this._longitude
          };
        }
        equals(other) {
          return other instanceof ParseGeoPoint && this.latitude === other.latitude && this.longitude === other.longitude;
        }
        /**
         * Returns the distance from this GeoPoint to another in radians.
         *
         * @param {Parse.GeoPoint} point the other Parse.GeoPoint.
         * @returns {number}
         */
        radiansTo(point) {
          const d2r = Math.PI / 180;
          const lat1rad = this.latitude * d2r;
          const long1rad = this.longitude * d2r;
          const lat2rad = point.latitude * d2r;
          const long2rad = point.longitude * d2r;
          const deltaLat = lat1rad - lat2rad;
          const deltaLong = long1rad - long2rad;
          const sinDeltaLatDiv2 = Math.sin(deltaLat / 2);
          const sinDeltaLongDiv2 = Math.sin(deltaLong / 2);
          let a = sinDeltaLatDiv2 * sinDeltaLatDiv2 + Math.cos(lat1rad) * Math.cos(lat2rad) * sinDeltaLongDiv2 * sinDeltaLongDiv2;
          a = Math.min(1, a);
          return 2 * Math.asin(Math.sqrt(a));
        }
        /**
         * Returns the distance from this GeoPoint to another in kilometers.
         *
         * @param {Parse.GeoPoint} point the other Parse.GeoPoint.
         * @returns {number}
         */
        kilometersTo(point) {
          return this.radiansTo(point) * 6371;
        }
        /**
         * Returns the distance from this GeoPoint to another in miles.
         *
         * @param {Parse.GeoPoint} point the other Parse.GeoPoint.
         * @returns {number}
         */
        milesTo(point) {
          return this.radiansTo(point) * 3958.8;
        }
        /*
         * Throws an exception if the given lat-long is out of bounds.
         */
        static _validate(latitude, longitude) {
          if (isNaN(latitude) || isNaN(longitude) || typeof latitude !== "number" || typeof longitude !== "number") {
            throw new TypeError("GeoPoint latitude and longitude must be valid numbers");
          }
          if (latitude < -90) {
            throw new TypeError("GeoPoint latitude out of bounds: " + latitude + " < -90.0.");
          }
          if (latitude > 90) {
            throw new TypeError("GeoPoint latitude out of bounds: " + latitude + " > 90.0.");
          }
          if (longitude < -180) {
            throw new TypeError("GeoPoint longitude out of bounds: " + longitude + " < -180.0.");
          }
          if (longitude > 180) {
            throw new TypeError("GeoPoint longitude out of bounds: " + longitude + " > 180.0.");
          }
        }
        /**
         * Creates a GeoPoint with the user's current location, if available.
         *
         * @param {object} options The options.
         * @param {boolean} [options.enableHighAccuracy] A boolean value that indicates the application would like to receive the best possible results.
         *  If true and if the device is able to provide a more accurate position, it will do so.
         *  Note that this can result in slower response times or increased power consumption (with a GPS chip on a mobile device for example).
         *  On the other hand, if false, the device can take the liberty to save resources by responding more quickly and/or using less power. Default: false.
         * @param {number} [options.timeout] A positive long value representing the maximum length of time (in milliseconds) the device is allowed to take in order to return a position.
         *  The default value is Infinity, meaning that getCurrentPosition() won't return until the position is available.
         * @param {number} [options.maximumAge] A positive long value indicating the maximum age in milliseconds of a possible cached position that is acceptable to return.
         *  If set to 0, it means that the device cannot use a cached position and must attempt to retrieve the real current position.
         *  If set to Infinity the device must return a cached position regardless of its age. Default: 0.
         * @static
         * @returns {Promise} User's current location
         */
        static current(options) {
          return new Promise((resolve, reject) => {
            navigator.geolocation.getCurrentPosition(
              (location) => {
                resolve(new ParseGeoPoint(location.coords.latitude, location.coords.longitude));
              },
              reject,
              options
            );
          });
        }
      }
      class ParsePolygon {
        /**
         * @param {(Coordinates | Parse.GeoPoint[])} coordinates An Array of coordinate pairs
         */
        constructor(coordinates) {
          this._coordinates = ParsePolygon._validate(coordinates);
        }
        /**
         * Coordinates value for this Polygon.
         * Throws an exception if not valid type.
         *
         * @property {(Coordinates | Parse.GeoPoint[])} coordinates list of coordinates
         * @returns {Coordinates}
         */
        get coordinates() {
          return this._coordinates;
        }
        set coordinates(coords) {
          this._coordinates = ParsePolygon._validate(coords);
        }
        /**
         * Returns a JSON representation of the Polygon, suitable for Parse.
         *
         * @returns {object}
         */
        toJSON() {
          ParsePolygon._validate(this._coordinates);
          return {
            __type: "Polygon",
            coordinates: this._coordinates
          };
        }
        /**
         * Checks if two polygons are equal
         *
         * @param {(Parse.Polygon | object)} other
         * @returns {boolean}
         */
        equals(other) {
          if (!(other instanceof ParsePolygon) || this.coordinates.length !== other.coordinates.length) {
            return false;
          }
          let isEqual = true;
          for (let i2 = 1; i2 < this._coordinates.length; i2 += 1) {
            if (this._coordinates[i2][0] != other.coordinates[i2][0] || this._coordinates[i2][1] != other.coordinates[i2][1]) {
              isEqual = false;
              break;
            }
          }
          return isEqual;
        }
        /**
         *
         * @param {Parse.GeoPoint} point
         * @returns {boolean} Returns if the point is contained in the polygon
         */
        containsPoint(point) {
          let minX = this._coordinates[0][0];
          let maxX = this._coordinates[0][0];
          let minY = this._coordinates[0][1];
          let maxY = this._coordinates[0][1];
          for (let i2 = 1; i2 < this._coordinates.length; i2 += 1) {
            const p = this._coordinates[i2];
            minX = Math.min(p[0], minX);
            maxX = Math.max(p[0], maxX);
            minY = Math.min(p[1], minY);
            maxY = Math.max(p[1], maxY);
          }
          const outside = point.latitude < minX || point.latitude > maxX || point.longitude < minY || point.longitude > maxY;
          if (outside) {
            return false;
          }
          let inside = false;
          for (let i2 = 0, j = this._coordinates.length - 1; i2 < this._coordinates.length; j = i2++) {
            const startX = this._coordinates[i2][0];
            const startY = this._coordinates[i2][1];
            const endX = this._coordinates[j][0];
            const endY = this._coordinates[j][1];
            const intersect = startY > point.longitude != endY > point.longitude && point.latitude < (endX - startX) * (point.longitude - startY) / (endY - startY) + startX;
            if (intersect) {
              inside = !inside;
            }
          }
          return inside;
        }
        /**
         * Validates that the list of coordinates can form a valid polygon
         *
         * @param {Array} coords the list of coordinates to validate as a polygon
         * @throws {TypeError}
         * @returns {number[][]} Array of coordinates if validated.
         */
        static _validate(coords) {
          if (!Array.isArray(coords)) {
            throw new TypeError("Coordinates must be an Array");
          }
          if (coords.length < 3) {
            throw new TypeError("Polygon must have at least 3 GeoPoints or Points");
          }
          const points = [];
          for (let i2 = 0; i2 < coords.length; i2 += 1) {
            const coord = coords[i2];
            let geoPoint;
            if (coord instanceof ParseGeoPoint) {
              geoPoint = coord;
            } else if (Array.isArray(coord) && coord.length === 2) {
              geoPoint = new ParseGeoPoint(coord[0], coord[1]);
            } else {
              throw new TypeError("Coordinates must be an Array of GeoPoints or Points");
            }
            points.push([geoPoint.latitude, geoPoint.longitude]);
          }
          return points;
        }
      }
      class ParseRelation {
        /**
         * @param {Parse.Object} parent The parent of this relation.
         * @param {string} key The key for this relation on the parent.
         */
        constructor(parent, key2) {
          this.parent = parent;
          this.key = key2;
          this.targetClassName = null;
        }
        /*
         * Makes sure that this relation has the right parent and key.
         */
        _ensureParentAndKey(parent, key2) {
          this.key = this.key || key2;
          if (this.key !== key2) {
            throw new Error("Internal Error. Relation retrieved from two different keys.");
          }
          if (this.parent) {
            if (this.parent.className !== parent.className) {
              throw new Error("Internal Error. Relation retrieved from two different Objects.");
            }
            if (this.parent.id) {
              if (this.parent.id !== parent.id) {
                throw new Error("Internal Error. Relation retrieved from two different Objects.");
              }
            } else if (parent.id) {
              this.parent = parent;
            }
          } else {
            this.parent = parent;
          }
        }
        /**
         * Adds a Parse.Object or an array of Parse.Objects to the relation.
         *
         * @param {(Parse.Object|Array)} objects The item or items to add.
         * @returns {Parse.Object} The parent of the relation.
         */
        add(objects) {
          if (!Array.isArray(objects)) {
            objects = [objects];
          }
          const { RelationOp: RelationOp2 } = CoreManager.getParseOp();
          const change = new RelationOp2(objects, []);
          const parent = this.parent;
          if (!parent) {
            throw new Error("Cannot add to a Relation without a parent");
          }
          if (objects.length === 0) {
            return parent;
          }
          parent.set(this.key, change);
          this.targetClassName = change._targetClassName;
          return parent;
        }
        /**
         * Removes a Parse.Object or an array of Parse.Objects from this relation.
         *
         * @param {(Parse.Object|Array)} objects The item or items to remove.
         */
        remove(objects) {
          if (!Array.isArray(objects)) {
            objects = [objects];
          }
          const { RelationOp: RelationOp2 } = CoreManager.getParseOp();
          const change = new RelationOp2([], objects);
          if (!this.parent) {
            throw new Error("Cannot remove from a Relation without a parent");
          }
          if (objects.length === 0) {
            return;
          }
          this.parent.set(this.key, change);
          this.targetClassName = change._targetClassName;
        }
        /**
         * Returns a JSON version of the object suitable for saving to disk.
         *
         * @returns {object} JSON representation of Relation
         */
        toJSON() {
          return {
            __type: "Relation",
            className: this.targetClassName
          };
        }
        /**
         * Returns a Parse.Query that is limited to objects in this
         * relation.
         *
         * @returns {Parse.Query} Relation Query
         */
        query() {
          let query;
          const parent = this.parent;
          if (!parent) {
            throw new Error("Cannot construct a query for a Relation without a parent");
          }
          const ParseQuery2 = CoreManager.getParseQuery();
          if (!this.targetClassName) {
            query = new ParseQuery2(parent.className);
            query._extraOptions.redirectClassNameForKey = this.key;
          } else {
            query = new ParseQuery2(this.targetClassName);
          }
          query._addCondition("$relatedTo", "object", {
            __type: "Pointer",
            className: parent.className,
            objectId: parent.id
          });
          query._addCondition("$relatedTo", "key", this.key);
          return query;
        }
      }
      function isDangerousKey(key2) {
        const dangerousKeys = ["__proto__", "constructor", "prototype"];
        if (dangerousKeys.includes(key2)) {
          return true;
        }
        if (key2.includes(".")) {
          const parts = key2.split(".");
          return parts.some((part) => dangerousKeys.includes(part));
        }
        return false;
      }
      function decode(value) {
        if (value === null || typeof value !== "object" || value instanceof Date) {
          return value;
        }
        if (Array.isArray(value)) {
          const dup = [];
          value.forEach((v, i2) => {
            dup[i2] = decode(v);
          });
          return dup;
        }
        if (typeof value.__op === "string") {
          const { opFromJSON: opFromJSON2 } = CoreManager.getParseOp();
          return opFromJSON2(value);
        }
        const ParseObject2 = CoreManager.getParseObject();
        if (value.__type === "Pointer" && value.className) {
          return ParseObject2.fromJSON(value);
        }
        if (value.__type === "Object" && value.className) {
          return ParseObject2.fromJSON(value);
        }
        if (value.__type === "Relation") {
          const relation = new ParseRelation(null, null);
          relation.targetClassName = value.className;
          return relation;
        }
        if (value.__type === "Date") {
          return new Date(value.iso);
        }
        if (value.__type === "File") {
          return ParseFile.fromJSON(value);
        }
        if (value.__type === "GeoPoint") {
          return new ParseGeoPoint({
            latitude: value.latitude,
            longitude: value.longitude
          });
        }
        if (value.__type === "Polygon") {
          return new ParsePolygon(value.coordinates);
        }
        const copy = {};
        for (const k in value) {
          if (Object.prototype.hasOwnProperty.call(value, k)) {
            if (isDangerousKey(k)) {
              continue;
            }
            copy[k] = decode(value[k]);
          }
        }
        return copy;
      }
      const PUBLIC_KEY$1 = "*";
      class ParseACL {
        /**
         * @param {(Parse.User | object | null)} arg1 The user to initialize the ACL for
         */
        constructor(arg1) {
          this.permissionsById = {};
          if (arg1 && typeof arg1 === "object") {
            const ParseUser2 = CoreManager.getParseUser();
            if (arg1 instanceof ParseUser2) {
              this.setReadAccess(arg1, true);
              this.setWriteAccess(arg1, true);
            } else {
              for (const userId in arg1) {
                const accessList = arg1[userId];
                this.permissionsById[userId] = {};
                for (const permission in accessList) {
                  const allowed = accessList[permission];
                  if (permission !== "read" && permission !== "write") {
                    throw new TypeError("Tried to create an ACL with an invalid permission type.");
                  }
                  if (typeof allowed !== "boolean") {
                    throw new TypeError("Tried to create an ACL with an invalid permission value.");
                  }
                  this.permissionsById[userId][permission] = allowed;
                }
              }
            }
          } else if (typeof arg1 === "function") {
            throw new TypeError("ParseACL constructed with a function. Did you forget ()?");
          }
        }
        /**
         * Returns a JSON-encoded version of the ACL.
         *
         * @returns {object}
         */
        toJSON() {
          const permissions = {};
          for (const p in this.permissionsById) {
            permissions[p] = this.permissionsById[p];
          }
          return permissions;
        }
        /**
         * Returns whether this ACL is equal to another object
         *
         * @param {ParseACL} other The other object's ACL to compare to
         * @returns {boolean}
         */
        equals(other) {
          if (!(other instanceof ParseACL)) {
            return false;
          }
          const users = Object.keys(this.permissionsById);
          const otherUsers = Object.keys(other.permissionsById);
          if (users.length !== otherUsers.length) {
            return false;
          }
          for (const u in this.permissionsById) {
            if (!other.permissionsById[u]) {
              return false;
            }
            if (this.permissionsById[u].read !== other.permissionsById[u].read) {
              return false;
            }
            if (this.permissionsById[u].write !== other.permissionsById[u].write) {
              return false;
            }
          }
          return true;
        }
        _setAccess(accessType, userId, allowed) {
          const ParseRole2 = CoreManager.getParseRole();
          const ParseUser2 = CoreManager.getParseUser();
          if (userId instanceof ParseUser2) {
            userId = userId.id;
          } else if (userId instanceof ParseRole2) {
            const name = userId.getName();
            if (!name) {
              throw new TypeError("Role must have a name");
            }
            userId = "role:" + name;
          }
          if (typeof userId !== "string") {
            throw new TypeError("userId must be a string.");
          }
          if (typeof allowed !== "boolean") {
            throw new TypeError("allowed must be either true or false.");
          }
          let permissions = this.permissionsById[userId];
          if (!permissions) {
            if (!allowed) {
              return;
            } else {
              permissions = {};
              this.permissionsById[userId] = permissions;
            }
          }
          if (allowed) {
            this.permissionsById[userId][accessType] = true;
          } else {
            delete permissions[accessType];
            if (Object.keys(permissions).length === 0) {
              delete this.permissionsById[userId];
            }
          }
        }
        _getAccess(accessType, userId) {
          const ParseRole2 = CoreManager.getParseRole();
          const ParseUser2 = CoreManager.getParseUser();
          if (userId instanceof ParseUser2) {
            userId = userId.id;
            if (!userId) {
              throw new Error("Cannot get access for a ParseUser without an ID");
            }
          } else if (userId instanceof ParseRole2) {
            const name = userId.getName();
            if (!name) {
              throw new TypeError("Role must have a name");
            }
            userId = "role:" + name;
          }
          const permissions = this.permissionsById[userId];
          if (!permissions) {
            return false;
          }
          return !!permissions[accessType];
        }
        /**
         * Sets whether the given user is allowed to read this object.
         *
         * @param userId An instance of Parse.User or its objectId.
         * @param {boolean} allowed Whether that user should have read access.
         */
        setReadAccess(userId, allowed) {
          this._setAccess("read", userId, allowed);
        }
        /**
         * Get whether the given user id is *explicitly* allowed to read this object.
         * Even if this returns false, the user may still be able to access it if
         * getPublicReadAccess returns true or a role that the user belongs to has
         * write access.
         *
         * @param userId An instance of Parse.User or its objectId, or a Parse.Role.
         * @returns {boolean}
         */
        getReadAccess(userId) {
          return this._getAccess("read", userId);
        }
        /**
         * Sets whether the given user id is allowed to write this object.
         *
         * @param userId An instance of Parse.User or its objectId, or a Parse.Role..
         * @param {boolean} allowed Whether that user should have write access.
         */
        setWriteAccess(userId, allowed) {
          this._setAccess("write", userId, allowed);
        }
        /**
         * Gets whether the given user id is *explicitly* allowed to write this object.
         * Even if this returns false, the user may still be able to write it if
         * getPublicWriteAccess returns true or a role that the user belongs to has
         * write access.
         *
         * @param userId An instance of Parse.User or its objectId, or a Parse.Role.
         * @returns {boolean}
         */
        getWriteAccess(userId) {
          return this._getAccess("write", userId);
        }
        /**
         * Sets whether the public is allowed to read this object.
         *
         * @param {boolean} allowed
         */
        setPublicReadAccess(allowed) {
          this.setReadAccess(PUBLIC_KEY$1, allowed);
        }
        /**
         * Gets whether the public is allowed to read this object.
         *
         * @returns {boolean}
         */
        getPublicReadAccess() {
          return this.getReadAccess(PUBLIC_KEY$1);
        }
        /**
         * Sets whether the public is allowed to write this object.
         *
         * @param {boolean} allowed
         */
        setPublicWriteAccess(allowed) {
          this.setWriteAccess(PUBLIC_KEY$1, allowed);
        }
        /**
         * Gets whether the public is allowed to write this object.
         *
         * @returns {boolean}
         */
        getPublicWriteAccess() {
          return this.getWriteAccess(PUBLIC_KEY$1);
        }
        /**
         * Gets whether users belonging to the given role are allowed
         * to read this object. Even if this returns false, the role may
         * still be able to write it if a parent role has read access.
         *
         * @param role The name of the role, or a Parse.Role object.
         * @returns {boolean} true if the role has read access. false otherwise.
         * @throws {TypeError} If role is neither a Parse.Role nor a String.
         */
        getRoleReadAccess(role) {
          const ParseRole2 = CoreManager.getParseRole();
          if (role instanceof ParseRole2) {
            role = role.getName();
          }
          if (typeof role !== "string") {
            throw new TypeError("role must be a ParseRole or a String");
          }
          return this.getReadAccess("role:" + role);
        }
        /**
         * Gets whether users belonging to the given role are allowed
         * to write this object. Even if this returns false, the role may
         * still be able to write it if a parent role has write access.
         *
         * @param role The name of the role, or a Parse.Role object.
         * @returns {boolean} true if the role has write access. false otherwise.
         * @throws {TypeError} If role is neither a Parse.Role nor a String.
         */
        getRoleWriteAccess(role) {
          const ParseRole2 = CoreManager.getParseRole();
          if (role instanceof ParseRole2) {
            role = role.getName();
          }
          if (typeof role !== "string") {
            throw new TypeError("role must be a ParseRole or a String");
          }
          return this.getWriteAccess("role:" + role);
        }
        /**
         * Sets whether users belonging to the given role are allowed
         * to read this object.
         *
         * @param role The name of the role, or a Parse.Role object.
         * @param {boolean} allowed Whether the given role can read this object.
         * @throws {TypeError} If role is neither a Parse.Role nor a String.
         */
        setRoleReadAccess(role, allowed) {
          const ParseRole2 = CoreManager.getParseRole();
          if (role instanceof ParseRole2) {
            role = role.getName();
          }
          if (typeof role !== "string") {
            throw new TypeError("role must be a ParseRole or a String");
          }
          this.setReadAccess("role:" + role, allowed);
        }
        /**
         * Sets whether users belonging to the given role are allowed
         * to write this object.
         *
         * @param role The name of the role, or a Parse.Role object.
         * @param {boolean} allowed Whether the given role can write this object.
         * @throws {TypeError} If role is neither a Parse.Role nor a String.
         */
        setRoleWriteAccess(role, allowed) {
          const ParseRole2 = CoreManager.getParseRole();
          if (role instanceof ParseRole2) {
            role = role.getName();
          }
          if (typeof role !== "string") {
            throw new TypeError("role must be a ParseRole or a String");
          }
          this.setWriteAccess("role:" + role, allowed);
        }
      }
      function encode(value, disallowObjects, forcePointers, seen, offline) {
        const ParseObject2 = CoreManager.getParseObject();
        if (value instanceof ParseObject2) {
          if (disallowObjects) {
            throw new Error("Parse Objects not allowed here");
          }
          const seenEntry = value.id ? value.className + ":" + value.id : value;
          if (forcePointers || !seen || seen.indexOf(seenEntry) > -1 || value.dirty() || Object.keys(value._getServerData()).length < 1) {
            if (offline && value._getId().startsWith("local")) {
              return value.toOfflinePointer();
            }
            return value.toPointer();
          }
          seen = seen.concat(seenEntry);
          return value._toFullJSON(seen, offline);
        }
        const { Op: Op2 } = CoreManager.getParseOp();
        if (value instanceof Op2 || value instanceof ParseACL || value instanceof ParseGeoPoint || value instanceof ParsePolygon || value instanceof ParseRelation) {
          return value.toJSON();
        }
        if (value instanceof ParseFile) {
          if (!value.url()) {
            throw new Error("Tried to encode an unsaved file.");
          }
          return value.toJSON();
        }
        if (Object.prototype.toString.call(value) === "[object Date]") {
          if (isNaN(value)) {
            throw new Error("Tried to encode an invalid date.");
          }
          return { __type: "Date", iso: value.toJSON() };
        }
        if (Object.prototype.toString.call(value) === "[object RegExp]" && typeof value.source === "string") {
          return value.source;
        }
        if (Array.isArray(value)) {
          return value.map((v) => {
            return encode(v, disallowObjects, forcePointers, seen, offline);
          });
        }
        if (value && typeof value === "object") {
          const output = {};
          for (const k in value) {
            if (Object.prototype.hasOwnProperty.call(value, k)) {
              if (isDangerousKey(k)) {
                continue;
              }
              output[k] = encode(
                value[k],
                disallowObjects,
                forcePointers,
                seen,
                offline
              );
            }
          }
          return output;
        }
        return value;
      }
      function encode$1(value, disallowObjects, forcePointers, seen, offline) {
        return encode(value, !!disallowObjects, !!forcePointers, seen || [], offline);
      }
      var CryptoJS_1;
      var hasRequiredCryptoJS;
      function requireCryptoJS() {
        if (hasRequiredCryptoJS) return CryptoJS_1;
        hasRequiredCryptoJS = 1;
        let CryptoJS = (function(u, p) {
          var d = {}, l = d.lib = {}, s = function() {
          }, t = l.Base = { extend: function(a) {
            s.prototype = this;
            var c = new s();
            a && c.mixIn(a);
            c.hasOwnProperty("init") || (c.init = function() {
              c.$super.init.apply(this, arguments);
            });
            c.init.prototype = c;
            c.$super = this;
            return c;
          }, create: function() {
            var a = this.extend();
            a.init.apply(a, arguments);
            return a;
          }, init: function() {
          }, mixIn: function(a) {
            for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
            a.hasOwnProperty("toString") && (this.toString = a.toString);
          }, clone: function() {
            return this.init.prototype.extend(this);
          } }, r = l.WordArray = t.extend({ init: function(a, c) {
            a = this.words = a || [];
            this.sigBytes = c != p ? c : 4 * a.length;
          }, toString: function(a) {
            return (a || v).stringify(this);
          }, concat: function(a) {
            var c = this.words, e = a.words, j = this.sigBytes;
            a = a.sigBytes;
            this.clamp();
            if (j % 4) for (var k = 0; k < a; k++) c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
            else if (65535 < e.length) for (k = 0; k < a; k += 4) c[j + k >>> 2] = e[k >>> 2];
            else c.push.apply(c, e);
            this.sigBytes += a;
            return this;
          }, clamp: function() {
            var a = this.words, c = this.sigBytes;
            a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);
            a.length = u.ceil(c / 4);
          }, clone: function() {
            var a = t.clone.call(this);
            a.words = this.words.slice(0);
            return a;
          }, random: function(a) {
            for (var c = [], e = 0; e < a; e += 4) c.push(4294967296 * u.random() | 0);
            return new r.init(c, a);
          } }), w = d.enc = {}, v = w.Hex = { stringify: function(a) {
            var c = a.words;
            a = a.sigBytes;
            for (var e = [], j = 0; j < a; j++) {
              var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
              e.push((k >>> 4).toString(16));
              e.push((k & 15).toString(16));
            }
            return e.join("");
          }, parse: function(a) {
            for (var c = a.length, e = [], j = 0; j < c; j += 2) e[j >>> 3] |= parseInt(a.substr(
              j,
              2
            ), 16) << 24 - 4 * (j % 8);
            return new r.init(e, c / 2);
          } }, b = w.Latin1 = { stringify: function(a) {
            var c = a.words;
            a = a.sigBytes;
            for (var e = [], j = 0; j < a; j++) e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
            return e.join("");
          }, parse: function(a) {
            for (var c = a.length, e = [], j = 0; j < c; j++) e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
            return new r.init(e, c);
          } }, x = w.Utf8 = { stringify: function(a) {
            try {
              return decodeURIComponent(escape(b.stringify(a)));
            } catch (c) {
              throw Error("Malformed UTF-8 data");
            }
          }, parse: function(a) {
            return b.parse(unescape(encodeURIComponent(a)));
          } }, q = l.BufferedBlockAlgorithm = t.extend({ reset: function() {
            this._data = new r.init();
            this._nDataBytes = 0;
          }, _append: function(a) {
            "string" == typeof a && (a = x.parse(a));
            this._data.concat(a);
            this._nDataBytes += a.sigBytes;
          }, _process: function(a) {
            var c = this._data, e = c.words, j = c.sigBytes, k = this.blockSize, b2 = j / (4 * k), b2 = a ? u.ceil(b2) : u.max((b2 | 0) - this._minBufferSize, 0);
            a = b2 * k;
            j = u.min(4 * a, j);
            if (a) {
              for (var q2 = 0; q2 < a; q2 += k) this._doProcessBlock(e, q2);
              q2 = e.splice(0, a);
              c.sigBytes -= j;
            }
            return new r.init(q2, j);
          }, clone: function() {
            var a = t.clone.call(this);
            a._data = this._data.clone();
            return a;
          }, _minBufferSize: 0 });
          l.Hasher = q.extend({ cfg: t.extend(), init: function(a) {
            this.cfg = this.cfg.extend(a);
            this.reset();
          }, reset: function() {
            q.reset.call(this);
            this._doReset();
          }, update: function(a) {
            this._append(a);
            this._process();
            return this;
          }, finalize: function(a) {
            a && this._append(a);
            return this._doFinalize();
          }, blockSize: 16, _createHelper: function(a) {
            return function(b2, e) {
              return new a.init(e).finalize(b2);
            };
          }, _createHmacHelper: function(a) {
            return function(b2, e) {
              return new n.HMAC.init(
                a,
                e
              ).finalize(b2);
            };
          } });
          var n = d.algo = {};
          return d;
        })(Math);
        (function() {
          var u = CryptoJS, p = u.lib.WordArray;
          u.enc.Base64 = { stringify: function(d) {
            var l = d.words, p2 = d.sigBytes, t = this._map;
            d.clamp();
            d = [];
            for (var r = 0; r < p2; r += 3) for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p2; v++) d.push(t.charAt(w >>> 6 * (3 - v) & 63));
            if (l = t.charAt(64)) for (; d.length % 4; ) d.push(l);
            return d.join("");
          }, parse: function(d) {
            var l = d.length, s = this._map, t = s.charAt(64);
            t && (t = d.indexOf(t), -1 != t && (l = t));
            for (var t = [], r = 0, w = 0; w < l; w++) if (w % 4) {
              var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4), b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
              t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
              r++;
            }
            return p.create(t, r);
          }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" };
        })();
        (function(u) {
          function p(b2, n, a, c, e, j, k) {
            b2 = b2 + (n & a | ~n & c) + e + k;
            return (b2 << j | b2 >>> 32 - j) + n;
          }
          function d(b2, n, a, c, e, j, k) {
            b2 = b2 + (n & c | a & ~c) + e + k;
            return (b2 << j | b2 >>> 32 - j) + n;
          }
          function l(b2, n, a, c, e, j, k) {
            b2 = b2 + (n ^ a ^ c) + e + k;
            return (b2 << j | b2 >>> 32 - j) + n;
          }
          function s(b2, n, a, c, e, j, k) {
            b2 = b2 + (a ^ (n | ~c)) + e + k;
            return (b2 << j | b2 >>> 32 - j) + n;
          }
          for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++) b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
          r = r.MD5 = v.extend({
            _doReset: function() {
              this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878]);
            },
            _doProcessBlock: function(q, n) {
              for (var a = 0; 16 > a; a++) {
                var c = n + a, e = q[c];
                q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
              }
              var a = this._hash.words, c = q[n + 0], e = q[n + 1], j = q[n + 2], k = q[n + 3], z = q[n + 4], r2 = q[n + 5], t2 = q[n + 6], w2 = q[n + 7], v2 = q[n + 8], A = q[n + 9], B = q[n + 10], C = q[n + 11], u2 = q[n + 12], D = q[n + 13], E = q[n + 14], x2 = q[n + 15], f = a[0], m = a[1], g = a[2], h = a[3], f = p(f, m, g, h, c, 7, b[0]), h = p(h, f, m, g, e, 12, b[1]), g = p(g, h, f, m, j, 17, b[2]), m = p(m, g, h, f, k, 22, b[3]), f = p(f, m, g, h, z, 7, b[4]), h = p(h, f, m, g, r2, 12, b[5]), g = p(g, h, f, m, t2, 17, b[6]), m = p(m, g, h, f, w2, 22, b[7]), f = p(f, m, g, h, v2, 7, b[8]), h = p(h, f, m, g, A, 12, b[9]), g = p(g, h, f, m, B, 17, b[10]), m = p(m, g, h, f, C, 22, b[11]), f = p(f, m, g, h, u2, 7, b[12]), h = p(h, f, m, g, D, 12, b[13]), g = p(g, h, f, m, E, 17, b[14]), m = p(m, g, h, f, x2, 22, b[15]), f = d(f, m, g, h, e, 5, b[16]), h = d(h, f, m, g, t2, 9, b[17]), g = d(g, h, f, m, C, 14, b[18]), m = d(m, g, h, f, c, 20, b[19]), f = d(f, m, g, h, r2, 5, b[20]), h = d(h, f, m, g, B, 9, b[21]), g = d(g, h, f, m, x2, 14, b[22]), m = d(m, g, h, f, z, 20, b[23]), f = d(f, m, g, h, A, 5, b[24]), h = d(h, f, m, g, E, 9, b[25]), g = d(g, h, f, m, k, 14, b[26]), m = d(m, g, h, f, v2, 20, b[27]), f = d(f, m, g, h, D, 5, b[28]), h = d(
                h,
                f,
                m,
                g,
                j,
                9,
                b[29]
              ), g = d(g, h, f, m, w2, 14, b[30]), m = d(m, g, h, f, u2, 20, b[31]), f = l(f, m, g, h, r2, 4, b[32]), h = l(h, f, m, g, v2, 11, b[33]), g = l(g, h, f, m, C, 16, b[34]), m = l(m, g, h, f, E, 23, b[35]), f = l(f, m, g, h, e, 4, b[36]), h = l(h, f, m, g, z, 11, b[37]), g = l(g, h, f, m, w2, 16, b[38]), m = l(m, g, h, f, B, 23, b[39]), f = l(f, m, g, h, D, 4, b[40]), h = l(h, f, m, g, c, 11, b[41]), g = l(g, h, f, m, k, 16, b[42]), m = l(m, g, h, f, t2, 23, b[43]), f = l(f, m, g, h, A, 4, b[44]), h = l(h, f, m, g, u2, 11, b[45]), g = l(g, h, f, m, x2, 16, b[46]), m = l(m, g, h, f, j, 23, b[47]), f = s(f, m, g, h, c, 6, b[48]), h = s(h, f, m, g, w2, 10, b[49]), g = s(
                g,
                h,
                f,
                m,
                E,
                15,
                b[50]
              ), m = s(m, g, h, f, r2, 21, b[51]), f = s(f, m, g, h, u2, 6, b[52]), h = s(h, f, m, g, k, 10, b[53]), g = s(g, h, f, m, B, 15, b[54]), m = s(m, g, h, f, e, 21, b[55]), f = s(f, m, g, h, v2, 6, b[56]), h = s(h, f, m, g, x2, 10, b[57]), g = s(g, h, f, m, t2, 15, b[58]), m = s(m, g, h, f, D, 21, b[59]), f = s(f, m, g, h, z, 6, b[60]), h = s(h, f, m, g, C, 10, b[61]), g = s(g, h, f, m, j, 15, b[62]), m = s(m, g, h, f, A, 21, b[63]);
              a[0] = a[0] + f | 0;
              a[1] = a[1] + m | 0;
              a[2] = a[2] + g | 0;
              a[3] = a[3] + h | 0;
            },
            _doFinalize: function() {
              var b2 = this._data, n = b2.words, a = 8 * this._nDataBytes, c = 8 * b2.sigBytes;
              n[c >>> 5] |= 128 << 24 - c % 32;
              var e = u.floor(a / 4294967296);
              n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
              n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
              b2.sigBytes = 4 * (n.length + 1);
              this._process();
              b2 = this._hash;
              n = b2.words;
              for (a = 0; 4 > a; a++) c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
              return b2;
            },
            clone: function() {
              var b2 = v.clone.call(this);
              b2._hash = this._hash.clone();
              return b2;
            }
          });
          t.MD5 = v._createHelper(r);
          t.HmacMD5 = v._createHmacHelper(r);
        })(Math);
        (function() {
          var u = CryptoJS, p = u.lib, d = p.Base, l = p.WordArray, p = u.algo, s = p.EvpKDF = d.extend({ cfg: d.extend({ keySize: 4, hasher: p.MD5, iterations: 1 }), init: function(d2) {
            this.cfg = this.cfg.extend(d2);
          }, compute: function(d2, r) {
            for (var p2 = this.cfg, s2 = p2.hasher.create(), b = l.create(), u2 = b.words, q = p2.keySize, p2 = p2.iterations; u2.length < q; ) {
              n && s2.update(n);
              var n = s2.update(d2).finalize(r);
              s2.reset();
              for (var a = 1; a < p2; a++) n = s2.finalize(n), s2.reset();
              b.concat(n);
            }
            b.sigBytes = 4 * q;
            return b;
          } });
          u.EvpKDF = function(d2, l2, p2) {
            return s.create(p2).compute(
              d2,
              l2
            );
          };
        })();
        CryptoJS.lib.Cipher || (function(u) {
          var p = CryptoJS, d = p.lib, l = d.Base, s = d.WordArray, t = d.BufferedBlockAlgorithm, r = p.enc.Base64, w = p.algo.EvpKDF, v = d.Cipher = t.extend({
            cfg: l.extend(),
            createEncryptor: function(e, a2) {
              return this.create(this._ENC_XFORM_MODE, e, a2);
            },
            createDecryptor: function(e, a2) {
              return this.create(this._DEC_XFORM_MODE, e, a2);
            },
            init: function(e, a2, b2) {
              this.cfg = this.cfg.extend(b2);
              this._xformMode = e;
              this._key = a2;
              this.reset();
            },
            reset: function() {
              t.reset.call(this);
              this._doReset();
            },
            process: function(e) {
              this._append(e);
              return this._process();
            },
            finalize: function(e) {
              e && this._append(e);
              return this._doFinalize();
            },
            keySize: 4,
            ivSize: 4,
            _ENC_XFORM_MODE: 1,
            _DEC_XFORM_MODE: 2,
            _createHelper: function(e) {
              return { encrypt: function(b2, k, d2) {
                return ("string" == typeof k ? c : a).encrypt(e, b2, k, d2);
              }, decrypt: function(b2, k, d2) {
                return ("string" == typeof k ? c : a).decrypt(e, b2, k, d2);
              } };
            }
          });
          d.StreamCipher = v.extend({ _doFinalize: function() {
            return this._process(true);
          }, blockSize: 1 });
          var b = p.mode = {}, x = function(e, a2, b2) {
            var c2 = this._iv;
            c2 ? this._iv = u : c2 = this._prevBlock;
            for (var d2 = 0; d2 < b2; d2++) e[a2 + d2] ^= c2[d2];
          }, q = (d.BlockCipherMode = l.extend({ createEncryptor: function(e, a2) {
            return this.Encryptor.create(e, a2);
          }, createDecryptor: function(e, a2) {
            return this.Decryptor.create(e, a2);
          }, init: function(e, a2) {
            this._cipher = e;
            this._iv = a2;
          } })).extend();
          q.Encryptor = q.extend({ processBlock: function(e, a2) {
            var b2 = this._cipher, c2 = b2.blockSize;
            x.call(this, e, a2, c2);
            b2.encryptBlock(e, a2);
            this._prevBlock = e.slice(a2, a2 + c2);
          } });
          q.Decryptor = q.extend({ processBlock: function(e, a2) {
            var b2 = this._cipher, c2 = b2.blockSize, d2 = e.slice(a2, a2 + c2);
            b2.decryptBlock(e, a2);
            x.call(
              this,
              e,
              a2,
              c2
            );
            this._prevBlock = d2;
          } });
          b = b.CBC = q;
          q = (p.pad = {}).Pkcs7 = { pad: function(a2, b2) {
            for (var c2 = 4 * b2, c2 = c2 - a2.sigBytes % c2, d2 = c2 << 24 | c2 << 16 | c2 << 8 | c2, l2 = [], n2 = 0; n2 < c2; n2 += 4) l2.push(d2);
            c2 = s.create(l2, c2);
            a2.concat(c2);
          }, unpad: function(a2) {
            a2.sigBytes -= a2.words[a2.sigBytes - 1 >>> 2] & 255;
          } };
          d.BlockCipher = v.extend({ cfg: v.cfg.extend({ mode: b, padding: q }), reset: function() {
            v.reset.call(this);
            var a2 = this.cfg, b2 = a2.iv, a2 = a2.mode;
            if (this._xformMode == this._ENC_XFORM_MODE) var c2 = a2.createEncryptor;
            else c2 = a2.createDecryptor, this._minBufferSize = 1;
            this._mode = c2.call(
              a2,
              this,
              b2 && b2.words
            );
          }, _doProcessBlock: function(a2, b2) {
            this._mode.processBlock(a2, b2);
          }, _doFinalize: function() {
            var a2 = this.cfg.padding;
            if (this._xformMode == this._ENC_XFORM_MODE) {
              a2.pad(this._data, this.blockSize);
              var b2 = this._process(true);
            } else b2 = this._process(true), a2.unpad(b2);
            return b2;
          }, blockSize: 4 });
          var n = d.CipherParams = l.extend({ init: function(a2) {
            this.mixIn(a2);
          }, toString: function(a2) {
            return (a2 || this.formatter).stringify(this);
          } }), b = (p.format = {}).OpenSSL = { stringify: function(a2) {
            var b2 = a2.ciphertext;
            a2 = a2.salt;
            return (a2 ? s.create([
              1398893684,
              1701076831
            ]).concat(a2).concat(b2) : b2).toString(r);
          }, parse: function(a2) {
            a2 = r.parse(a2);
            var b2 = a2.words;
            if (1398893684 == b2[0] && 1701076831 == b2[1]) {
              var c2 = s.create(b2.slice(2, 4));
              b2.splice(0, 4);
              a2.sigBytes -= 16;
            }
            return n.create({ ciphertext: a2, salt: c2 });
          } }, a = d.SerializableCipher = l.extend({
            cfg: l.extend({ format: b }),
            encrypt: function(a2, b2, c2, d2) {
              d2 = this.cfg.extend(d2);
              var l2 = a2.createEncryptor(c2, d2);
              b2 = l2.finalize(b2);
              l2 = l2.cfg;
              return n.create({ ciphertext: b2, key: c2, iv: l2.iv, algorithm: a2, mode: l2.mode, padding: l2.padding, blockSize: a2.blockSize, formatter: d2.format });
            },
            decrypt: function(a2, b2, c2, d2) {
              d2 = this.cfg.extend(d2);
              b2 = this._parse(b2, d2.format);
              return a2.createDecryptor(c2, d2).finalize(b2.ciphertext);
            },
            _parse: function(a2, b2) {
              return "string" == typeof a2 ? b2.parse(a2, this) : a2;
            }
          }), p = (p.kdf = {}).OpenSSL = { execute: function(a2, b2, c2, d2) {
            d2 || (d2 = s.random(8));
            a2 = w.create({ keySize: b2 + c2 }).compute(a2, d2);
            c2 = s.create(a2.words.slice(b2), 4 * c2);
            a2.sigBytes = 4 * b2;
            return n.create({ key: a2, iv: c2, salt: d2 });
          } }, c = d.PasswordBasedCipher = a.extend({ cfg: a.cfg.extend({ kdf: p }), encrypt: function(b2, c2, d2, l2) {
            l2 = this.cfg.extend(l2);
            d2 = l2.kdf.execute(
              d2,
              b2.keySize,
              b2.ivSize
            );
            l2.iv = d2.iv;
            b2 = a.encrypt.call(this, b2, c2, d2.key, l2);
            b2.mixIn(d2);
            return b2;
          }, decrypt: function(b2, c2, d2, l2) {
            l2 = this.cfg.extend(l2);
            c2 = this._parse(c2, l2.format);
            d2 = l2.kdf.execute(d2, b2.keySize, b2.ivSize, c2.salt);
            l2.iv = d2.iv;
            return a.decrypt.call(this, b2, c2, d2.key, l2);
          } });
        })();
        (function() {
          for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++) a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
          for (var e = 0, j = 0, c = 0; 256 > c; c++) {
            var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4, k = k >>> 8 ^ k & 255 ^ 99;
            l[e] = k;
            s[k] = e;
            var z = a[e], F = a[z], G = a[F], y = 257 * a[k] ^ 16843008 * k;
            t[e] = y << 24 | y >>> 8;
            r[e] = y << 16 | y >>> 16;
            w[e] = y << 8 | y >>> 24;
            v[e] = y;
            y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
            b[k] = y << 24 | y >>> 8;
            x[k] = y << 16 | y >>> 16;
            q[k] = y << 8 | y >>> 24;
            n[k] = y;
            e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1;
          }
          var H = [
            0,
            1,
            2,
            4,
            8,
            16,
            32,
            64,
            128,
            27,
            54
          ], d = d.AES = p.extend({ _doReset: function() {
            for (var a2 = this._key, c2 = a2.words, d2 = a2.sigBytes / 4, a2 = 4 * ((this._nRounds = d2 + 6) + 1), e2 = this._keySchedule = [], j2 = 0; j2 < a2; j2++) if (j2 < d2) e2[j2] = c2[j2];
            else {
              var k2 = e2[j2 - 1];
              j2 % d2 ? 6 < d2 && 4 == j2 % d2 && (k2 = l[k2 >>> 24] << 24 | l[k2 >>> 16 & 255] << 16 | l[k2 >>> 8 & 255] << 8 | l[k2 & 255]) : (k2 = k2 << 8 | k2 >>> 24, k2 = l[k2 >>> 24] << 24 | l[k2 >>> 16 & 255] << 16 | l[k2 >>> 8 & 255] << 8 | l[k2 & 255], k2 ^= H[j2 / d2 | 0] << 24);
              e2[j2] = e2[j2 - d2] ^ k2;
            }
            c2 = this._invKeySchedule = [];
            for (d2 = 0; d2 < a2; d2++) j2 = a2 - d2, k2 = d2 % 4 ? e2[j2] : e2[j2 - 4], c2[d2] = 4 > d2 || 4 >= j2 ? k2 : b[l[k2 >>> 24]] ^ x[l[k2 >>> 16 & 255]] ^ q[l[k2 >>> 8 & 255]] ^ n[l[k2 & 255]];
          }, encryptBlock: function(a2, b2) {
            this._doCryptBlock(a2, b2, this._keySchedule, t, r, w, v, l);
          }, decryptBlock: function(a2, c2) {
            var d2 = a2[c2 + 1];
            a2[c2 + 1] = a2[c2 + 3];
            a2[c2 + 3] = d2;
            this._doCryptBlock(a2, c2, this._invKeySchedule, b, x, q, n, s);
            d2 = a2[c2 + 1];
            a2[c2 + 1] = a2[c2 + 3];
            a2[c2 + 3] = d2;
          }, _doCryptBlock: function(a2, b2, c2, d2, e2, j2, l2, f) {
            for (var m = this._nRounds, g = a2[b2] ^ c2[0], h = a2[b2 + 1] ^ c2[1], k2 = a2[b2 + 2] ^ c2[2], n2 = a2[b2 + 3] ^ c2[3], p2 = 4, r2 = 1; r2 < m; r2++) var q2 = d2[g >>> 24] ^ e2[h >>> 16 & 255] ^ j2[k2 >>> 8 & 255] ^ l2[n2 & 255] ^ c2[p2++], s2 = d2[h >>> 24] ^ e2[k2 >>> 16 & 255] ^ j2[n2 >>> 8 & 255] ^ l2[g & 255] ^ c2[p2++], t2 = d2[k2 >>> 24] ^ e2[n2 >>> 16 & 255] ^ j2[g >>> 8 & 255] ^ l2[h & 255] ^ c2[p2++], n2 = d2[n2 >>> 24] ^ e2[g >>> 16 & 255] ^ j2[h >>> 8 & 255] ^ l2[k2 & 255] ^ c2[p2++], g = q2, h = s2, k2 = t2;
            q2 = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k2 >>> 8 & 255] << 8 | f[n2 & 255]) ^ c2[p2++];
            s2 = (f[h >>> 24] << 24 | f[k2 >>> 16 & 255] << 16 | f[n2 >>> 8 & 255] << 8 | f[g & 255]) ^ c2[p2++];
            t2 = (f[k2 >>> 24] << 24 | f[n2 >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c2[p2++];
            n2 = (f[n2 >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k2 & 255]) ^ c2[p2++];
            a2[b2] = q2;
            a2[b2 + 1] = s2;
            a2[b2 + 2] = t2;
            a2[b2 + 3] = n2;
          }, keySize: 8 });
          u.AES = p._createHelper(d);
        })();
        CryptoJS_1 = CryptoJS;
        return CryptoJS_1;
      }
      requireCryptoJS();
      var aes$3 = { exports: {} };
      function commonjsRequire(path) {
        throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
      }
      var core$1 = { exports: {} };
      var cryptoBrowserify = {};
      var browser$c = { exports: {} };
      var safeBuffer$9 = { exports: {} };
      var hasRequiredSafeBuffer$9;
      function requireSafeBuffer$9() {
        if (hasRequiredSafeBuffer$9) return safeBuffer$9.exports;
        hasRequiredSafeBuffer$9 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$9, safeBuffer$9.exports);
        return safeBuffer$9.exports;
      }
      var hasRequiredBrowser$b;
      function requireBrowser$b() {
        if (hasRequiredBrowser$b) return browser$c.exports;
        hasRequiredBrowser$b = 1;
        var MAX_BYTES = 65536;
        var MAX_UINT32 = 4294967295;
        function oldBrowser() {
          throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11");
        }
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var crypto = commonjsGlobal.crypto || commonjsGlobal.msCrypto;
        if (crypto && crypto.getRandomValues) {
          browser$c.exports = randomBytes;
        } else {
          browser$c.exports = oldBrowser;
        }
        function randomBytes(size, cb) {
          if (size > MAX_UINT32) throw new RangeError("requested too many random bytes");
          var bytes = Buffer2.allocUnsafe(size);
          if (size > 0) {
            if (size > MAX_BYTES) {
              for (var generated = 0; generated < size; generated += MAX_BYTES) {
                crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES));
              }
            } else {
              crypto.getRandomValues(bytes);
            }
          }
          if (typeof cb === "function") {
            return process$1.nextTick(function() {
              cb(null, bytes);
            });
          }
          return bytes;
        }
        return browser$c.exports;
      }
      var safeBuffer$8 = { exports: {} };
      var hasRequiredSafeBuffer$8;
      function requireSafeBuffer$8() {
        if (hasRequiredSafeBuffer$8) return safeBuffer$8.exports;
        hasRequiredSafeBuffer$8 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$8, safeBuffer$8.exports);
        return safeBuffer$8.exports;
      }
      var hashBase$1;
      var hasRequiredHashBase$1;
      function requireHashBase$1() {
        if (hasRequiredHashBase$1) return hashBase$1;
        hasRequiredHashBase$1 = 1;
        var Buffer2 = requireSafeBuffer$8().Buffer;
        var Transform = requireStreamBrowserify().Transform;
        var inherits = requireInherits_browser();
        function HashBase(blockSize) {
          Transform.call(this);
          this._block = Buffer2.allocUnsafe(blockSize);
          this._blockSize = blockSize;
          this._blockOffset = 0;
          this._length = [0, 0, 0, 0];
          this._finalized = false;
        }
        inherits(HashBase, Transform);
        HashBase.prototype._transform = function(chunk, encoding, callback) {
          var error = null;
          try {
            this.update(chunk, encoding);
          } catch (err) {
            error = err;
          }
          callback(error);
        };
        HashBase.prototype._flush = function(callback) {
          var error = null;
          try {
            this.push(this.digest());
          } catch (err) {
            error = err;
          }
          callback(error);
        };
        var useUint8Array = typeof Uint8Array !== "undefined";
        var useArrayBuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && ArrayBuffer.isView && (Buffer2.prototype instanceof Uint8Array || Buffer2.TYPED_ARRAY_SUPPORT);
        function toBuffer2(data, encoding) {
          if (data instanceof Buffer2) return data;
          if (typeof data === "string") return Buffer2.from(data, encoding);
          if (useArrayBuffer && ArrayBuffer.isView(data)) {
            if (data.byteLength === 0) return Buffer2.alloc(0);
            var res = Buffer2.from(data.buffer, data.byteOffset, data.byteLength);
            if (res.byteLength === data.byteLength) return res;
          }
          if (useUint8Array && data instanceof Uint8Array) return Buffer2.from(data);
          if (Buffer2.isBuffer(data) && data.constructor && typeof data.constructor.isBuffer === "function" && data.constructor.isBuffer(data)) {
            return Buffer2.from(data);
          }
          throw new TypeError('The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView.');
        }
        HashBase.prototype.update = function(data, encoding) {
          if (this._finalized) throw new Error("Digest already called");
          data = toBuffer2(data, encoding);
          var block = this._block;
          var offset = 0;
          while (this._blockOffset + data.length - offset >= this._blockSize) {
            for (var i2 = this._blockOffset; i2 < this._blockSize; ) block[i2++] = data[offset++];
            this._update();
            this._blockOffset = 0;
          }
          while (offset < data.length) block[this._blockOffset++] = data[offset++];
          for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
            this._length[j] += carry;
            carry = this._length[j] / 4294967296 | 0;
            if (carry > 0) this._length[j] -= 4294967296 * carry;
          }
          return this;
        };
        HashBase.prototype._update = function() {
          throw new Error("_update is not implemented");
        };
        HashBase.prototype.digest = function(encoding) {
          if (this._finalized) throw new Error("Digest already called");
          this._finalized = true;
          var digest = this._digest();
          if (encoding !== void 0) digest = digest.toString(encoding);
          this._block.fill(0);
          this._blockOffset = 0;
          for (var i2 = 0; i2 < 4; ++i2) this._length[i2] = 0;
          return digest;
        };
        HashBase.prototype._digest = function() {
          throw new Error("_digest is not implemented");
        };
        hashBase$1 = HashBase;
        return hashBase$1;
      }
      var md5_js;
      var hasRequiredMd5_js;
      function requireMd5_js() {
        if (hasRequiredMd5_js) return md5_js;
        hasRequiredMd5_js = 1;
        var inherits = requireInherits_browser();
        var HashBase = requireHashBase$1();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var ARRAY16 = new Array(16);
        function MD5() {
          HashBase.call(this, 64);
          this._a = 1732584193;
          this._b = 4023233417;
          this._c = 2562383102;
          this._d = 271733878;
        }
        inherits(MD5, HashBase);
        MD5.prototype._update = function() {
          var M = ARRAY16;
          for (var i2 = 0; i2 < 16; ++i2) M[i2] = this._block.readInt32LE(i2 * 4);
          var a = this._a;
          var b = this._b;
          var c = this._c;
          var d = this._d;
          a = fnF(a, b, c, d, M[0], 3614090360, 7);
          d = fnF(d, a, b, c, M[1], 3905402710, 12);
          c = fnF(c, d, a, b, M[2], 606105819, 17);
          b = fnF(b, c, d, a, M[3], 3250441966, 22);
          a = fnF(a, b, c, d, M[4], 4118548399, 7);
          d = fnF(d, a, b, c, M[5], 1200080426, 12);
          c = fnF(c, d, a, b, M[6], 2821735955, 17);
          b = fnF(b, c, d, a, M[7], 4249261313, 22);
          a = fnF(a, b, c, d, M[8], 1770035416, 7);
          d = fnF(d, a, b, c, M[9], 2336552879, 12);
          c = fnF(c, d, a, b, M[10], 4294925233, 17);
          b = fnF(b, c, d, a, M[11], 2304563134, 22);
          a = fnF(a, b, c, d, M[12], 1804603682, 7);
          d = fnF(d, a, b, c, M[13], 4254626195, 12);
          c = fnF(c, d, a, b, M[14], 2792965006, 17);
          b = fnF(b, c, d, a, M[15], 1236535329, 22);
          a = fnG(a, b, c, d, M[1], 4129170786, 5);
          d = fnG(d, a, b, c, M[6], 3225465664, 9);
          c = fnG(c, d, a, b, M[11], 643717713, 14);
          b = fnG(b, c, d, a, M[0], 3921069994, 20);
          a = fnG(a, b, c, d, M[5], 3593408605, 5);
          d = fnG(d, a, b, c, M[10], 38016083, 9);
          c = fnG(c, d, a, b, M[15], 3634488961, 14);
          b = fnG(b, c, d, a, M[4], 3889429448, 20);
          a = fnG(a, b, c, d, M[9], 568446438, 5);
          d = fnG(d, a, b, c, M[14], 3275163606, 9);
          c = fnG(c, d, a, b, M[3], 4107603335, 14);
          b = fnG(b, c, d, a, M[8], 1163531501, 20);
          a = fnG(a, b, c, d, M[13], 2850285829, 5);
          d = fnG(d, a, b, c, M[2], 4243563512, 9);
          c = fnG(c, d, a, b, M[7], 1735328473, 14);
          b = fnG(b, c, d, a, M[12], 2368359562, 20);
          a = fnH(a, b, c, d, M[5], 4294588738, 4);
          d = fnH(d, a, b, c, M[8], 2272392833, 11);
          c = fnH(c, d, a, b, M[11], 1839030562, 16);
          b = fnH(b, c, d, a, M[14], 4259657740, 23);
          a = fnH(a, b, c, d, M[1], 2763975236, 4);
          d = fnH(d, a, b, c, M[4], 1272893353, 11);
          c = fnH(c, d, a, b, M[7], 4139469664, 16);
          b = fnH(b, c, d, a, M[10], 3200236656, 23);
          a = fnH(a, b, c, d, M[13], 681279174, 4);
          d = fnH(d, a, b, c, M[0], 3936430074, 11);
          c = fnH(c, d, a, b, M[3], 3572445317, 16);
          b = fnH(b, c, d, a, M[6], 76029189, 23);
          a = fnH(a, b, c, d, M[9], 3654602809, 4);
          d = fnH(d, a, b, c, M[12], 3873151461, 11);
          c = fnH(c, d, a, b, M[15], 530742520, 16);
          b = fnH(b, c, d, a, M[2], 3299628645, 23);
          a = fnI(a, b, c, d, M[0], 4096336452, 6);
          d = fnI(d, a, b, c, M[7], 1126891415, 10);
          c = fnI(c, d, a, b, M[14], 2878612391, 15);
          b = fnI(b, c, d, a, M[5], 4237533241, 21);
          a = fnI(a, b, c, d, M[12], 1700485571, 6);
          d = fnI(d, a, b, c, M[3], 2399980690, 10);
          c = fnI(c, d, a, b, M[10], 4293915773, 15);
          b = fnI(b, c, d, a, M[1], 2240044497, 21);
          a = fnI(a, b, c, d, M[8], 1873313359, 6);
          d = fnI(d, a, b, c, M[15], 4264355552, 10);
          c = fnI(c, d, a, b, M[6], 2734768916, 15);
          b = fnI(b, c, d, a, M[13], 1309151649, 21);
          a = fnI(a, b, c, d, M[4], 4149444226, 6);
          d = fnI(d, a, b, c, M[11], 3174756917, 10);
          c = fnI(c, d, a, b, M[2], 718787259, 15);
          b = fnI(b, c, d, a, M[9], 3951481745, 21);
          this._a = this._a + a | 0;
          this._b = this._b + b | 0;
          this._c = this._c + c | 0;
          this._d = this._d + d | 0;
        };
        MD5.prototype._digest = function() {
          this._block[this._blockOffset++] = 128;
          if (this._blockOffset > 56) {
            this._block.fill(0, this._blockOffset, 64);
            this._update();
            this._blockOffset = 0;
          }
          this._block.fill(0, this._blockOffset, 56);
          this._block.writeUInt32LE(this._length[0], 56);
          this._block.writeUInt32LE(this._length[1], 60);
          this._update();
          var buffer2 = Buffer2.allocUnsafe(16);
          buffer2.writeInt32LE(this._a, 0);
          buffer2.writeInt32LE(this._b, 4);
          buffer2.writeInt32LE(this._c, 8);
          buffer2.writeInt32LE(this._d, 12);
          return buffer2;
        };
        function rotl(x, n) {
          return x << n | x >>> 32 - n;
        }
        function fnF(a, b, c, d, m, k, s) {
          return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0;
        }
        function fnG(a, b, c, d, m, k, s) {
          return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0;
        }
        function fnH(a, b, c, d, m, k, s) {
          return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0;
        }
        function fnI(a, b, c, d, m, k, s) {
          return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0;
        }
        md5_js = MD5;
        return md5_js;
      }
      var ripemd160$1;
      var hasRequiredRipemd160$1;
      function requireRipemd160$1() {
        if (hasRequiredRipemd160$1) return ripemd160$1;
        hasRequiredRipemd160$1 = 1;
        var Buffer2 = requireDist().Buffer;
        var inherits = requireInherits_browser();
        var HashBase = requireHashBase$1();
        var ARRAY16 = new Array(16);
        var zl = [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          7,
          4,
          13,
          1,
          10,
          6,
          15,
          3,
          12,
          0,
          9,
          5,
          2,
          14,
          11,
          8,
          3,
          10,
          14,
          4,
          9,
          15,
          8,
          1,
          2,
          7,
          0,
          6,
          13,
          11,
          5,
          12,
          1,
          9,
          11,
          10,
          0,
          8,
          12,
          4,
          13,
          3,
          7,
          15,
          14,
          5,
          6,
          2,
          4,
          0,
          5,
          9,
          7,
          12,
          2,
          10,
          14,
          1,
          3,
          8,
          11,
          6,
          15,
          13
        ];
        var zr = [
          5,
          14,
          7,
          0,
          9,
          2,
          11,
          4,
          13,
          6,
          15,
          8,
          1,
          10,
          3,
          12,
          6,
          11,
          3,
          7,
          0,
          13,
          5,
          10,
          14,
          15,
          8,
          12,
          4,
          9,
          1,
          2,
          15,
          5,
          1,
          3,
          7,
          14,
          6,
          9,
          11,
          8,
          12,
          2,
          10,
          0,
          4,
          13,
          8,
          6,
          4,
          1,
          3,
          11,
          15,
          0,
          5,
          12,
          2,
          13,
          9,
          7,
          10,
          14,
          12,
          15,
          10,
          4,
          1,
          5,
          8,
          7,
          6,
          2,
          13,
          14,
          0,
          3,
          9,
          11
        ];
        var sl = [
          11,
          14,
          15,
          12,
          5,
          8,
          7,
          9,
          11,
          13,
          14,
          15,
          6,
          7,
          9,
          8,
          7,
          6,
          8,
          13,
          11,
          9,
          7,
          15,
          7,
          12,
          15,
          9,
          11,
          7,
          13,
          12,
          11,
          13,
          6,
          7,
          14,
          9,
          13,
          15,
          14,
          8,
          13,
          6,
          5,
          12,
          7,
          5,
          11,
          12,
          14,
          15,
          14,
          15,
          9,
          8,
          9,
          14,
          5,
          6,
          8,
          6,
          5,
          12,
          9,
          15,
          5,
          11,
          6,
          8,
          13,
          12,
          5,
          12,
          13,
          14,
          11,
          8,
          5,
          6
        ];
        var sr = [
          8,
          9,
          9,
          11,
          13,
          15,
          15,
          5,
          7,
          7,
          8,
          11,
          14,
          14,
          12,
          6,
          9,
          13,
          15,
          7,
          12,
          8,
          9,
          11,
          7,
          7,
          12,
          7,
          6,
          15,
          13,
          11,
          9,
          7,
          15,
          11,
          8,
          6,
          6,
          14,
          12,
          13,
          5,
          14,
          13,
          13,
          7,
          5,
          15,
          5,
          8,
          11,
          14,
          14,
          6,
          14,
          6,
          9,
          12,
          9,
          12,
          5,
          15,
          8,
          8,
          5,
          12,
          9,
          12,
          5,
          14,
          6,
          8,
          13,
          6,
          5,
          15,
          13,
          11,
          11
        ];
        var hl = [0, 1518500249, 1859775393, 2400959708, 2840853838];
        var hr = [1352829926, 1548603684, 1836072691, 2053994217, 0];
        function RIPEMD160() {
          HashBase.call(this, 64);
          this._a = 1732584193;
          this._b = 4023233417;
          this._c = 2562383102;
          this._d = 271733878;
          this._e = 3285377520;
        }
        inherits(RIPEMD160, HashBase);
        RIPEMD160.prototype._update = function() {
          var words = ARRAY16;
          for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4);
          var al = this._a | 0;
          var bl = this._b | 0;
          var cl = this._c | 0;
          var dl = this._d | 0;
          var el = this._e | 0;
          var ar = this._a | 0;
          var br = this._b | 0;
          var cr = this._c | 0;
          var dr = this._d | 0;
          var er = this._e | 0;
          for (var i2 = 0; i2 < 80; i2 += 1) {
            var tl;
            var tr;
            if (i2 < 16) {
              tl = fn1(al, bl, cl, dl, el, words[zl[i2]], hl[0], sl[i2]);
              tr = fn5(ar, br, cr, dr, er, words[zr[i2]], hr[0], sr[i2]);
            } else if (i2 < 32) {
              tl = fn2(al, bl, cl, dl, el, words[zl[i2]], hl[1], sl[i2]);
              tr = fn4(ar, br, cr, dr, er, words[zr[i2]], hr[1], sr[i2]);
            } else if (i2 < 48) {
              tl = fn3(al, bl, cl, dl, el, words[zl[i2]], hl[2], sl[i2]);
              tr = fn3(ar, br, cr, dr, er, words[zr[i2]], hr[2], sr[i2]);
            } else if (i2 < 64) {
              tl = fn4(al, bl, cl, dl, el, words[zl[i2]], hl[3], sl[i2]);
              tr = fn2(ar, br, cr, dr, er, words[zr[i2]], hr[3], sr[i2]);
            } else {
              tl = fn5(al, bl, cl, dl, el, words[zl[i2]], hl[4], sl[i2]);
              tr = fn1(ar, br, cr, dr, er, words[zr[i2]], hr[4], sr[i2]);
            }
            al = el;
            el = dl;
            dl = rotl(cl, 10);
            cl = bl;
            bl = tl;
            ar = er;
            er = dr;
            dr = rotl(cr, 10);
            cr = br;
            br = tr;
          }
          var t = this._b + cl + dr | 0;
          this._b = this._c + dl + er | 0;
          this._c = this._d + el + ar | 0;
          this._d = this._e + al + br | 0;
          this._e = this._a + bl + cr | 0;
          this._a = t;
        };
        RIPEMD160.prototype._digest = function() {
          this._block[this._blockOffset++] = 128;
          if (this._blockOffset > 56) {
            this._block.fill(0, this._blockOffset, 64);
            this._update();
            this._blockOffset = 0;
          }
          this._block.fill(0, this._blockOffset, 56);
          this._block.writeUInt32LE(this._length[0], 56);
          this._block.writeUInt32LE(this._length[1], 60);
          this._update();
          var buffer2 = Buffer2.alloc ? Buffer2.alloc(20) : new Buffer2(20);
          buffer2.writeInt32LE(this._a, 0);
          buffer2.writeInt32LE(this._b, 4);
          buffer2.writeInt32LE(this._c, 8);
          buffer2.writeInt32LE(this._d, 12);
          buffer2.writeInt32LE(this._e, 16);
          return buffer2;
        };
        function rotl(x, n) {
          return x << n | x >>> 32 - n;
        }
        function fn1(a, b, c, d, e, m, k, s) {
          return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0;
        }
        function fn2(a, b, c, d, e, m, k, s) {
          return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0;
        }
        function fn3(a, b, c, d, e, m, k, s) {
          return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0;
        }
        function fn4(a, b, c, d, e, m, k, s) {
          return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0;
        }
        function fn5(a, b, c, d, e, m, k, s) {
          return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0;
        }
        ripemd160$1 = RIPEMD160;
        return ripemd160$1;
      }
      var sha_js = { exports: {} };
      var safeBuffer$7 = { exports: {} };
      var hasRequiredSafeBuffer$7;
      function requireSafeBuffer$7() {
        if (hasRequiredSafeBuffer$7) return safeBuffer$7.exports;
        hasRequiredSafeBuffer$7 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$7, safeBuffer$7.exports);
        return safeBuffer$7.exports;
      }
      var safeBuffer$6 = { exports: {} };
      var hasRequiredSafeBuffer$6;
      function requireSafeBuffer$6() {
        if (hasRequiredSafeBuffer$6) return safeBuffer$6.exports;
        hasRequiredSafeBuffer$6 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$6, safeBuffer$6.exports);
        return safeBuffer$6.exports;
      }
      var isarray$1;
      var hasRequiredIsarray$1;
      function requireIsarray$1() {
        if (hasRequiredIsarray$1) return isarray$1;
        hasRequiredIsarray$1 = 1;
        var toString2 = {}.toString;
        isarray$1 = Array.isArray || function(arr) {
          return toString2.call(arr) == "[object Array]";
        };
        return isarray$1;
      }
      var typedArrayBuffer;
      var hasRequiredTypedArrayBuffer;
      function requireTypedArrayBuffer() {
        if (hasRequiredTypedArrayBuffer) return typedArrayBuffer;
        hasRequiredTypedArrayBuffer = 1;
        var $TypeError = /* @__PURE__ */ requireType();
        var callBound2 = /* @__PURE__ */ requireCallBound();
        var $typedArrayBuffer = callBound2("TypedArray.prototype.buffer", true);
        var isTypedArray2 = /* @__PURE__ */ requireIsTypedArray();
        typedArrayBuffer = $typedArrayBuffer || function typedArrayBuffer2(x) {
          if (!isTypedArray2(x)) {
            throw new $TypeError("Not a Typed Array");
          }
          return x.buffer;
        };
        return typedArrayBuffer;
      }
      var toBuffer;
      var hasRequiredToBuffer$1;
      function requireToBuffer$1() {
        if (hasRequiredToBuffer$1) return toBuffer;
        hasRequiredToBuffer$1 = 1;
        var Buffer2 = requireSafeBuffer$6().Buffer;
        var isArray = requireIsarray$1();
        var typedArrayBuffer2 = /* @__PURE__ */ requireTypedArrayBuffer();
        var isView = ArrayBuffer.isView || function isView2(obj) {
          try {
            typedArrayBuffer2(obj);
            return true;
          } catch (e) {
            return false;
          }
        };
        var useUint8Array = typeof Uint8Array !== "undefined";
        var useArrayBuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
        var useFromArrayBuffer = useArrayBuffer && (Buffer2.prototype instanceof Uint8Array || Buffer2.TYPED_ARRAY_SUPPORT);
        toBuffer = function toBuffer2(data, encoding) {
          if (data instanceof Buffer2) {
            return data;
          }
          if (typeof data === "string") {
            return Buffer2.from(data, encoding);
          }
          if (useArrayBuffer && isView(data)) {
            if (data.byteLength === 0) {
              return Buffer2.alloc(0);
            }
            if (useFromArrayBuffer) {
              var res = Buffer2.from(data.buffer, data.byteOffset, data.byteLength);
              if (res.byteLength === data.byteLength) {
                return res;
              }
            }
            var uint8 = data instanceof Uint8Array ? data : new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
            var result = Buffer2.from(uint8);
            if (result.length === data.byteLength) {
              return result;
            }
          }
          if (useUint8Array && data instanceof Uint8Array) {
            return Buffer2.from(data);
          }
          var isArr = isArray(data);
          if (isArr) {
            for (var i2 = 0; i2 < data.length; i2 += 1) {
              var x = data[i2];
              if (typeof x !== "number" || x < 0 || x > 255 || ~~x !== x) {
                throw new RangeError("Array items must be numbers in the range 0-255.");
              }
            }
          }
          if (isArr || Buffer2.isBuffer(data) && data.constructor && typeof data.constructor.isBuffer === "function" && data.constructor.isBuffer(data)) {
            return Buffer2.from(data);
          }
          throw new TypeError('The "data" argument must be a string, an Array, a Buffer, a Uint8Array, or a DataView.');
        };
        return toBuffer;
      }
      var hash$1;
      var hasRequiredHash$1;
      function requireHash$1() {
        if (hasRequiredHash$1) return hash$1;
        hasRequiredHash$1 = 1;
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var toBuffer2 = /* @__PURE__ */ requireToBuffer$1();
        function Hash(blockSize, finalSize) {
          this._block = Buffer2.alloc(blockSize);
          this._finalSize = finalSize;
          this._blockSize = blockSize;
          this._len = 0;
        }
        Hash.prototype.update = function(data, enc) {
          data = toBuffer2(data, enc || "utf8");
          var block = this._block;
          var blockSize = this._blockSize;
          var length = data.length;
          var accum = this._len;
          for (var offset = 0; offset < length; ) {
            var assigned = accum % blockSize;
            var remainder = Math.min(length - offset, blockSize - assigned);
            for (var i2 = 0; i2 < remainder; i2++) {
              block[assigned + i2] = data[offset + i2];
            }
            accum += remainder;
            offset += remainder;
            if (accum % blockSize === 0) {
              this._update(block);
            }
          }
          this._len += length;
          return this;
        };
        Hash.prototype.digest = function(enc) {
          var rem = this._len % this._blockSize;
          this._block[rem] = 128;
          this._block.fill(0, rem + 1);
          if (rem >= this._finalSize) {
            this._update(this._block);
            this._block.fill(0);
          }
          var bits = this._len * 8;
          if (bits <= 4294967295) {
            this._block.writeUInt32BE(bits, this._blockSize - 4);
          } else {
            var lowBits = (bits & 4294967295) >>> 0;
            var highBits = (bits - lowBits) / 4294967296;
            this._block.writeUInt32BE(highBits, this._blockSize - 8);
            this._block.writeUInt32BE(lowBits, this._blockSize - 4);
          }
          this._update(this._block);
          var hash2 = this._hash();
          return enc ? hash2.toString(enc) : hash2;
        };
        Hash.prototype._update = function() {
          throw new Error("_update must be implemented by subclass");
        };
        hash$1 = Hash;
        return hash$1;
      }
      var sha$1;
      var hasRequiredSha$1;
      function requireSha$1() {
        if (hasRequiredSha$1) return sha$1;
        hasRequiredSha$1 = 1;
        var inherits = requireInherits_browser();
        var Hash = requireHash$1();
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var K = [
          1518500249,
          1859775393,
          2400959708 | 0,
          3395469782 | 0
        ];
        var W = new Array(80);
        function Sha() {
          this.init();
          this._w = W;
          Hash.call(this, 64, 56);
        }
        inherits(Sha, Hash);
        Sha.prototype.init = function() {
          this._a = 1732584193;
          this._b = 4023233417;
          this._c = 2562383102;
          this._d = 271733878;
          this._e = 3285377520;
          return this;
        };
        function rotl5(num) {
          return num << 5 | num >>> 27;
        }
        function rotl30(num) {
          return num << 30 | num >>> 2;
        }
        function ft(s, b, c, d) {
          if (s === 0) {
            return b & c | ~b & d;
          }
          if (s === 2) {
            return b & c | b & d | c & d;
          }
          return b ^ c ^ d;
        }
        Sha.prototype._update = function(M) {
          var w = this._w;
          var a = this._a | 0;
          var b = this._b | 0;
          var c = this._c | 0;
          var d = this._d | 0;
          var e = this._e | 0;
          for (var i2 = 0; i2 < 16; ++i2) {
            w[i2] = M.readInt32BE(i2 * 4);
          }
          for (; i2 < 80; ++i2) {
            w[i2] = w[i2 - 3] ^ w[i2 - 8] ^ w[i2 - 14] ^ w[i2 - 16];
          }
          for (var j = 0; j < 80; ++j) {
            var s = ~~(j / 20);
            var t = rotl5(a) + ft(s, b, c, d) + e + w[j] + K[s] | 0;
            e = d;
            d = c;
            c = rotl30(b);
            b = a;
            a = t;
          }
          this._a = a + this._a | 0;
          this._b = b + this._b | 0;
          this._c = c + this._c | 0;
          this._d = d + this._d | 0;
          this._e = e + this._e | 0;
        };
        Sha.prototype._hash = function() {
          var H = Buffer2.allocUnsafe(20);
          H.writeInt32BE(this._a | 0, 0);
          H.writeInt32BE(this._b | 0, 4);
          H.writeInt32BE(this._c | 0, 8);
          H.writeInt32BE(this._d | 0, 12);
          H.writeInt32BE(this._e | 0, 16);
          return H;
        };
        sha$1 = Sha;
        return sha$1;
      }
      var sha1$2;
      var hasRequiredSha1$1;
      function requireSha1$1() {
        if (hasRequiredSha1$1) return sha1$2;
        hasRequiredSha1$1 = 1;
        var inherits = requireInherits_browser();
        var Hash = requireHash$1();
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var K = [
          1518500249,
          1859775393,
          2400959708 | 0,
          3395469782 | 0
        ];
        var W = new Array(80);
        function Sha1() {
          this.init();
          this._w = W;
          Hash.call(this, 64, 56);
        }
        inherits(Sha1, Hash);
        Sha1.prototype.init = function() {
          this._a = 1732584193;
          this._b = 4023233417;
          this._c = 2562383102;
          this._d = 271733878;
          this._e = 3285377520;
          return this;
        };
        function rotl1(num) {
          return num << 1 | num >>> 31;
        }
        function rotl5(num) {
          return num << 5 | num >>> 27;
        }
        function rotl30(num) {
          return num << 30 | num >>> 2;
        }
        function ft(s, b, c, d) {
          if (s === 0) {
            return b & c | ~b & d;
          }
          if (s === 2) {
            return b & c | b & d | c & d;
          }
          return b ^ c ^ d;
        }
        Sha1.prototype._update = function(M) {
          var w = this._w;
          var a = this._a | 0;
          var b = this._b | 0;
          var c = this._c | 0;
          var d = this._d | 0;
          var e = this._e | 0;
          for (var i2 = 0; i2 < 16; ++i2) {
            w[i2] = M.readInt32BE(i2 * 4);
          }
          for (; i2 < 80; ++i2) {
            w[i2] = rotl1(w[i2 - 3] ^ w[i2 - 8] ^ w[i2 - 14] ^ w[i2 - 16]);
          }
          for (var j = 0; j < 80; ++j) {
            var s = ~~(j / 20);
            var t = rotl5(a) + ft(s, b, c, d) + e + w[j] + K[s] | 0;
            e = d;
            d = c;
            c = rotl30(b);
            b = a;
            a = t;
          }
          this._a = a + this._a | 0;
          this._b = b + this._b | 0;
          this._c = c + this._c | 0;
          this._d = d + this._d | 0;
          this._e = e + this._e | 0;
        };
        Sha1.prototype._hash = function() {
          var H = Buffer2.allocUnsafe(20);
          H.writeInt32BE(this._a | 0, 0);
          H.writeInt32BE(this._b | 0, 4);
          H.writeInt32BE(this._c | 0, 8);
          H.writeInt32BE(this._d | 0, 12);
          H.writeInt32BE(this._e | 0, 16);
          return H;
        };
        sha1$2 = Sha1;
        return sha1$2;
      }
      var sha256$1;
      var hasRequiredSha256;
      function requireSha256() {
        if (hasRequiredSha256) return sha256$1;
        hasRequiredSha256 = 1;
        var inherits = requireInherits_browser();
        var Hash = requireHash$1();
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var K = [
          1116352408,
          1899447441,
          3049323471,
          3921009573,
          961987163,
          1508970993,
          2453635748,
          2870763221,
          3624381080,
          310598401,
          607225278,
          1426881987,
          1925078388,
          2162078206,
          2614888103,
          3248222580,
          3835390401,
          4022224774,
          264347078,
          604807628,
          770255983,
          1249150122,
          1555081692,
          1996064986,
          2554220882,
          2821834349,
          2952996808,
          3210313671,
          3336571891,
          3584528711,
          113926993,
          338241895,
          666307205,
          773529912,
          1294757372,
          1396182291,
          1695183700,
          1986661051,
          2177026350,
          2456956037,
          2730485921,
          2820302411,
          3259730800,
          3345764771,
          3516065817,
          3600352804,
          4094571909,
          275423344,
          430227734,
          506948616,
          659060556,
          883997877,
          958139571,
          1322822218,
          1537002063,
          1747873779,
          1955562222,
          2024104815,
          2227730452,
          2361852424,
          2428436474,
          2756734187,
          3204031479,
          3329325298
        ];
        var W = new Array(64);
        function Sha256() {
          this.init();
          this._w = W;
          Hash.call(this, 64, 56);
        }
        inherits(Sha256, Hash);
        Sha256.prototype.init = function() {
          this._a = 1779033703;
          this._b = 3144134277;
          this._c = 1013904242;
          this._d = 2773480762;
          this._e = 1359893119;
          this._f = 2600822924;
          this._g = 528734635;
          this._h = 1541459225;
          return this;
        };
        function ch(x, y, z) {
          return z ^ x & (y ^ z);
        }
        function maj(x, y, z) {
          return x & y | z & (x | y);
        }
        function sigma0(x) {
          return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10);
        }
        function sigma1(x) {
          return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7);
        }
        function gamma0(x) {
          return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ x >>> 3;
        }
        function gamma1(x) {
          return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ x >>> 10;
        }
        Sha256.prototype._update = function(M) {
          var w = this._w;
          var a = this._a | 0;
          var b = this._b | 0;
          var c = this._c | 0;
          var d = this._d | 0;
          var e = this._e | 0;
          var f = this._f | 0;
          var g = this._g | 0;
          var h = this._h | 0;
          for (var i2 = 0; i2 < 16; ++i2) {
            w[i2] = M.readInt32BE(i2 * 4);
          }
          for (; i2 < 64; ++i2) {
            w[i2] = gamma1(w[i2 - 2]) + w[i2 - 7] + gamma0(w[i2 - 15]) + w[i2 - 16] | 0;
          }
          for (var j = 0; j < 64; ++j) {
            var T1 = h + sigma1(e) + ch(e, f, g) + K[j] + w[j] | 0;
            var T2 = sigma0(a) + maj(a, b, c) | 0;
            h = g;
            g = f;
            f = e;
            e = d + T1 | 0;
            d = c;
            c = b;
            b = a;
            a = T1 + T2 | 0;
          }
          this._a = a + this._a | 0;
          this._b = b + this._b | 0;
          this._c = c + this._c | 0;
          this._d = d + this._d | 0;
          this._e = e + this._e | 0;
          this._f = f + this._f | 0;
          this._g = g + this._g | 0;
          this._h = h + this._h | 0;
        };
        Sha256.prototype._hash = function() {
          var H = Buffer2.allocUnsafe(32);
          H.writeInt32BE(this._a, 0);
          H.writeInt32BE(this._b, 4);
          H.writeInt32BE(this._c, 8);
          H.writeInt32BE(this._d, 12);
          H.writeInt32BE(this._e, 16);
          H.writeInt32BE(this._f, 20);
          H.writeInt32BE(this._g, 24);
          H.writeInt32BE(this._h, 28);
          return H;
        };
        sha256$1 = Sha256;
        return sha256$1;
      }
      var sha224$1;
      var hasRequiredSha224;
      function requireSha224() {
        if (hasRequiredSha224) return sha224$1;
        hasRequiredSha224 = 1;
        var inherits = requireInherits_browser();
        var Sha256 = requireSha256();
        var Hash = requireHash$1();
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var W = new Array(64);
        function Sha224() {
          this.init();
          this._w = W;
          Hash.call(this, 64, 56);
        }
        inherits(Sha224, Sha256);
        Sha224.prototype.init = function() {
          this._a = 3238371032;
          this._b = 914150663;
          this._c = 812702999;
          this._d = 4144912697;
          this._e = 4290775857;
          this._f = 1750603025;
          this._g = 1694076839;
          this._h = 3204075428;
          return this;
        };
        Sha224.prototype._hash = function() {
          var H = Buffer2.allocUnsafe(28);
          H.writeInt32BE(this._a, 0);
          H.writeInt32BE(this._b, 4);
          H.writeInt32BE(this._c, 8);
          H.writeInt32BE(this._d, 12);
          H.writeInt32BE(this._e, 16);
          H.writeInt32BE(this._f, 20);
          H.writeInt32BE(this._g, 24);
          return H;
        };
        sha224$1 = Sha224;
        return sha224$1;
      }
      var sha512$1;
      var hasRequiredSha512;
      function requireSha512() {
        if (hasRequiredSha512) return sha512$1;
        hasRequiredSha512 = 1;
        var inherits = requireInherits_browser();
        var Hash = requireHash$1();
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var K = [
          1116352408,
          3609767458,
          1899447441,
          602891725,
          3049323471,
          3964484399,
          3921009573,
          2173295548,
          961987163,
          4081628472,
          1508970993,
          3053834265,
          2453635748,
          2937671579,
          2870763221,
          3664609560,
          3624381080,
          2734883394,
          310598401,
          1164996542,
          607225278,
          1323610764,
          1426881987,
          3590304994,
          1925078388,
          4068182383,
          2162078206,
          991336113,
          2614888103,
          633803317,
          3248222580,
          3479774868,
          3835390401,
          2666613458,
          4022224774,
          944711139,
          264347078,
          2341262773,
          604807628,
          2007800933,
          770255983,
          1495990901,
          1249150122,
          1856431235,
          1555081692,
          3175218132,
          1996064986,
          2198950837,
          2554220882,
          3999719339,
          2821834349,
          766784016,
          2952996808,
          2566594879,
          3210313671,
          3203337956,
          3336571891,
          1034457026,
          3584528711,
          2466948901,
          113926993,
          3758326383,
          338241895,
          168717936,
          666307205,
          1188179964,
          773529912,
          1546045734,
          1294757372,
          1522805485,
          1396182291,
          2643833823,
          1695183700,
          2343527390,
          1986661051,
          1014477480,
          2177026350,
          1206759142,
          2456956037,
          344077627,
          2730485921,
          1290863460,
          2820302411,
          3158454273,
          3259730800,
          3505952657,
          3345764771,
          106217008,
          3516065817,
          3606008344,
          3600352804,
          1432725776,
          4094571909,
          1467031594,
          275423344,
          851169720,
          430227734,
          3100823752,
          506948616,
          1363258195,
          659060556,
          3750685593,
          883997877,
          3785050280,
          958139571,
          3318307427,
          1322822218,
          3812723403,
          1537002063,
          2003034995,
          1747873779,
          3602036899,
          1955562222,
          1575990012,
          2024104815,
          1125592928,
          2227730452,
          2716904306,
          2361852424,
          442776044,
          2428436474,
          593698344,
          2756734187,
          3733110249,
          3204031479,
          2999351573,
          3329325298,
          3815920427,
          3391569614,
          3928383900,
          3515267271,
          566280711,
          3940187606,
          3454069534,
          4118630271,
          4000239992,
          116418474,
          1914138554,
          174292421,
          2731055270,
          289380356,
          3203993006,
          460393269,
          320620315,
          685471733,
          587496836,
          852142971,
          1086792851,
          1017036298,
          365543100,
          1126000580,
          2618297676,
          1288033470,
          3409855158,
          1501505948,
          4234509866,
          1607167915,
          987167468,
          1816402316,
          1246189591
        ];
        var W = new Array(160);
        function Sha512() {
          this.init();
          this._w = W;
          Hash.call(this, 128, 112);
        }
        inherits(Sha512, Hash);
        Sha512.prototype.init = function() {
          this._ah = 1779033703;
          this._bh = 3144134277;
          this._ch = 1013904242;
          this._dh = 2773480762;
          this._eh = 1359893119;
          this._fh = 2600822924;
          this._gh = 528734635;
          this._hh = 1541459225;
          this._al = 4089235720;
          this._bl = 2227873595;
          this._cl = 4271175723;
          this._dl = 1595750129;
          this._el = 2917565137;
          this._fl = 725511199;
          this._gl = 4215389547;
          this._hl = 327033209;
          return this;
        };
        function Ch(x, y, z) {
          return z ^ x & (y ^ z);
        }
        function maj(x, y, z) {
          return x & y | z & (x | y);
        }
        function sigma0(x, xl) {
          return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25);
        }
        function sigma1(x, xl) {
          return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23);
        }
        function Gamma0(x, xl) {
          return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ x >>> 7;
        }
        function Gamma0l(x, xl) {
          return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25);
        }
        function Gamma1(x, xl) {
          return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ x >>> 6;
        }
        function Gamma1l(x, xl) {
          return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26);
        }
        function getCarry(a, b) {
          return a >>> 0 < b >>> 0 ? 1 : 0;
        }
        Sha512.prototype._update = function(M) {
          var w = this._w;
          var ah = this._ah | 0;
          var bh = this._bh | 0;
          var ch = this._ch | 0;
          var dh2 = this._dh | 0;
          var eh = this._eh | 0;
          var fh = this._fh | 0;
          var gh = this._gh | 0;
          var hh = this._hh | 0;
          var al = this._al | 0;
          var bl = this._bl | 0;
          var cl = this._cl | 0;
          var dl = this._dl | 0;
          var el = this._el | 0;
          var fl = this._fl | 0;
          var gl = this._gl | 0;
          var hl = this._hl | 0;
          for (var i2 = 0; i2 < 32; i2 += 2) {
            w[i2] = M.readInt32BE(i2 * 4);
            w[i2 + 1] = M.readInt32BE(i2 * 4 + 4);
          }
          for (; i2 < 160; i2 += 2) {
            var xh = w[i2 - 15 * 2];
            var xl = w[i2 - 15 * 2 + 1];
            var gamma0 = Gamma0(xh, xl);
            var gamma0l = Gamma0l(xl, xh);
            xh = w[i2 - 2 * 2];
            xl = w[i2 - 2 * 2 + 1];
            var gamma1 = Gamma1(xh, xl);
            var gamma1l = Gamma1l(xl, xh);
            var Wi7h = w[i2 - 7 * 2];
            var Wi7l = w[i2 - 7 * 2 + 1];
            var Wi16h = w[i2 - 16 * 2];
            var Wi16l = w[i2 - 16 * 2 + 1];
            var Wil = gamma0l + Wi7l | 0;
            var Wih = gamma0 + Wi7h + getCarry(Wil, gamma0l) | 0;
            Wil = Wil + gamma1l | 0;
            Wih = Wih + gamma1 + getCarry(Wil, gamma1l) | 0;
            Wil = Wil + Wi16l | 0;
            Wih = Wih + Wi16h + getCarry(Wil, Wi16l) | 0;
            w[i2] = Wih;
            w[i2 + 1] = Wil;
          }
          for (var j = 0; j < 160; j += 2) {
            Wih = w[j];
            Wil = w[j + 1];
            var majh = maj(ah, bh, ch);
            var majl = maj(al, bl, cl);
            var sigma0h = sigma0(ah, al);
            var sigma0l = sigma0(al, ah);
            var sigma1h = sigma1(eh, el);
            var sigma1l = sigma1(el, eh);
            var Kih = K[j];
            var Kil = K[j + 1];
            var chh = Ch(eh, fh, gh);
            var chl = Ch(el, fl, gl);
            var t1l = hl + sigma1l | 0;
            var t1h = hh + sigma1h + getCarry(t1l, hl) | 0;
            t1l = t1l + chl | 0;
            t1h = t1h + chh + getCarry(t1l, chl) | 0;
            t1l = t1l + Kil | 0;
            t1h = t1h + Kih + getCarry(t1l, Kil) | 0;
            t1l = t1l + Wil | 0;
            t1h = t1h + Wih + getCarry(t1l, Wil) | 0;
            var t2l = sigma0l + majl | 0;
            var t2h = sigma0h + majh + getCarry(t2l, sigma0l) | 0;
            hh = gh;
            hl = gl;
            gh = fh;
            gl = fl;
            fh = eh;
            fl = el;
            el = dl + t1l | 0;
            eh = dh2 + t1h + getCarry(el, dl) | 0;
            dh2 = ch;
            dl = cl;
            ch = bh;
            cl = bl;
            bh = ah;
            bl = al;
            al = t1l + t2l | 0;
            ah = t1h + t2h + getCarry(al, t1l) | 0;
          }
          this._al = this._al + al | 0;
          this._bl = this._bl + bl | 0;
          this._cl = this._cl + cl | 0;
          this._dl = this._dl + dl | 0;
          this._el = this._el + el | 0;
          this._fl = this._fl + fl | 0;
          this._gl = this._gl + gl | 0;
          this._hl = this._hl + hl | 0;
          this._ah = this._ah + ah + getCarry(this._al, al) | 0;
          this._bh = this._bh + bh + getCarry(this._bl, bl) | 0;
          this._ch = this._ch + ch + getCarry(this._cl, cl) | 0;
          this._dh = this._dh + dh2 + getCarry(this._dl, dl) | 0;
          this._eh = this._eh + eh + getCarry(this._el, el) | 0;
          this._fh = this._fh + fh + getCarry(this._fl, fl) | 0;
          this._gh = this._gh + gh + getCarry(this._gl, gl) | 0;
          this._hh = this._hh + hh + getCarry(this._hl, hl) | 0;
        };
        Sha512.prototype._hash = function() {
          var H = Buffer2.allocUnsafe(64);
          function writeInt64BE(h, l, offset) {
            H.writeInt32BE(h, offset);
            H.writeInt32BE(l, offset + 4);
          }
          writeInt64BE(this._ah, this._al, 0);
          writeInt64BE(this._bh, this._bl, 8);
          writeInt64BE(this._ch, this._cl, 16);
          writeInt64BE(this._dh, this._dl, 24);
          writeInt64BE(this._eh, this._el, 32);
          writeInt64BE(this._fh, this._fl, 40);
          writeInt64BE(this._gh, this._gl, 48);
          writeInt64BE(this._hh, this._hl, 56);
          return H;
        };
        sha512$1 = Sha512;
        return sha512$1;
      }
      var sha384$1;
      var hasRequiredSha384;
      function requireSha384() {
        if (hasRequiredSha384) return sha384$1;
        hasRequiredSha384 = 1;
        var inherits = requireInherits_browser();
        var SHA512 = requireSha512();
        var Hash = requireHash$1();
        var Buffer2 = requireSafeBuffer$7().Buffer;
        var W = new Array(160);
        function Sha384() {
          this.init();
          this._w = W;
          Hash.call(this, 128, 112);
        }
        inherits(Sha384, SHA512);
        Sha384.prototype.init = function() {
          this._ah = 3418070365;
          this._bh = 1654270250;
          this._ch = 2438529370;
          this._dh = 355462360;
          this._eh = 1731405415;
          this._fh = 2394180231;
          this._gh = 3675008525;
          this._hh = 1203062813;
          this._al = 3238371032;
          this._bl = 914150663;
          this._cl = 812702999;
          this._dl = 4144912697;
          this._el = 4290775857;
          this._fl = 1750603025;
          this._gl = 1694076839;
          this._hl = 3204075428;
          return this;
        };
        Sha384.prototype._hash = function() {
          var H = Buffer2.allocUnsafe(48);
          function writeInt64BE(h, l, offset) {
            H.writeInt32BE(h, offset);
            H.writeInt32BE(l, offset + 4);
          }
          writeInt64BE(this._ah, this._al, 0);
          writeInt64BE(this._bh, this._bl, 8);
          writeInt64BE(this._ch, this._cl, 16);
          writeInt64BE(this._dh, this._dl, 24);
          writeInt64BE(this._eh, this._el, 32);
          writeInt64BE(this._fh, this._fl, 40);
          return H;
        };
        sha384$1 = Sha384;
        return sha384$1;
      }
      var hasRequiredSha_js;
      function requireSha_js() {
        if (hasRequiredSha_js) return sha_js.exports;
        hasRequiredSha_js = 1;
        (function(module) {
          module.exports = function SHA(algorithm) {
            var alg = algorithm.toLowerCase();
            var Algorithm = module.exports[alg];
            if (!Algorithm) {
              throw new Error(alg + " is not supported (we accept pull requests)");
            }
            return new Algorithm();
          };
          module.exports.sha = requireSha$1();
          module.exports.sha1 = requireSha1$1();
          module.exports.sha224 = requireSha224();
          module.exports.sha256 = requireSha256();
          module.exports.sha384 = requireSha384();
          module.exports.sha512 = requireSha512();
        })(sha_js);
        return sha_js.exports;
      }
      var safeBuffer$5 = { exports: {} };
      var hasRequiredSafeBuffer$5;
      function requireSafeBuffer$5() {
        if (hasRequiredSafeBuffer$5) return safeBuffer$5.exports;
        hasRequiredSafeBuffer$5 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$5, safeBuffer$5.exports);
        return safeBuffer$5.exports;
      }
      var cipherBase;
      var hasRequiredCipherBase;
      function requireCipherBase() {
        if (hasRequiredCipherBase) return cipherBase;
        hasRequiredCipherBase = 1;
        var Buffer2 = requireSafeBuffer$5().Buffer;
        var Transform = requireStreamBrowserify().Transform;
        var StringDecoder = requireString_decoder().StringDecoder;
        var inherits = requireInherits_browser();
        function CipherBase(hashMode) {
          Transform.call(this);
          this.hashMode = typeof hashMode === "string";
          if (this.hashMode) {
            this[hashMode] = this._finalOrDigest;
          } else {
            this["final"] = this._finalOrDigest;
          }
          if (this._final) {
            this.__final = this._final;
            this._final = null;
          }
          this._decoder = null;
          this._encoding = null;
        }
        inherits(CipherBase, Transform);
        var useUint8Array = typeof Uint8Array !== "undefined";
        var useArrayBuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && ArrayBuffer.isView && (Buffer2.prototype instanceof Uint8Array || Buffer2.TYPED_ARRAY_SUPPORT);
        function toBuffer2(data, encoding) {
          if (data instanceof Buffer2) {
            return data;
          }
          if (typeof data === "string") {
            return Buffer2.from(data, encoding);
          }
          if (useArrayBuffer && ArrayBuffer.isView(data)) {
            if (data.byteLength === 0) {
              return Buffer2.alloc(0);
            }
            var res = Buffer2.from(data.buffer, data.byteOffset, data.byteLength);
            if (res.byteLength === data.byteLength) {
              return res;
            }
          }
          if (useUint8Array && data instanceof Uint8Array) {
            return Buffer2.from(data);
          }
          if (Buffer2.isBuffer(data) && data.constructor && typeof data.constructor.isBuffer === "function" && data.constructor.isBuffer(data)) {
            return Buffer2.from(data);
          }
          throw new TypeError('The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView.');
        }
        CipherBase.prototype.update = function(data, inputEnc, outputEnc) {
          var bufferData = toBuffer2(data, inputEnc);
          var outData = this._update(bufferData);
          if (this.hashMode) {
            return this;
          }
          if (outputEnc) {
            outData = this._toString(outData, outputEnc);
          }
          return outData;
        };
        CipherBase.prototype.setAutoPadding = function() {
        };
        CipherBase.prototype.getAuthTag = function() {
          throw new Error("trying to get auth tag in unsupported state");
        };
        CipherBase.prototype.setAuthTag = function() {
          throw new Error("trying to set auth tag in unsupported state");
        };
        CipherBase.prototype.setAAD = function() {
          throw new Error("trying to set aad in unsupported state");
        };
        CipherBase.prototype._transform = function(data, _, next) {
          var err;
          try {
            if (this.hashMode) {
              this._update(data);
            } else {
              this.push(this._update(data));
            }
          } catch (e) {
            err = e;
          } finally {
            next(err);
          }
        };
        CipherBase.prototype._flush = function(done) {
          var err;
          try {
            this.push(this.__final());
          } catch (e) {
            err = e;
          }
          done(err);
        };
        CipherBase.prototype._finalOrDigest = function(outputEnc) {
          var outData = this.__final() || Buffer2.alloc(0);
          if (outputEnc) {
            outData = this._toString(outData, outputEnc, true);
          }
          return outData;
        };
        CipherBase.prototype._toString = function(value, enc, fin) {
          if (!this._decoder) {
            this._decoder = new StringDecoder(enc);
            this._encoding = enc;
          }
          if (this._encoding !== enc) {
            throw new Error("can’t switch encodings");
          }
          var out = this._decoder.write(value);
          if (fin) {
            out += this._decoder.end();
          }
          return out;
        };
        cipherBase = CipherBase;
        return cipherBase;
      }
      var browser$b;
      var hasRequiredBrowser$a;
      function requireBrowser$a() {
        if (hasRequiredBrowser$a) return browser$b;
        hasRequiredBrowser$a = 1;
        var inherits = requireInherits_browser();
        var MD5 = requireMd5_js();
        var RIPEMD160 = requireRipemd160$1();
        var sha2 = requireSha_js();
        var Base = requireCipherBase();
        function Hash(hash2) {
          Base.call(this, "digest");
          this._hash = hash2;
        }
        inherits(Hash, Base);
        Hash.prototype._update = function(data) {
          this._hash.update(data);
        };
        Hash.prototype._final = function() {
          return this._hash.digest();
        };
        browser$b = function createHash(alg) {
          alg = alg.toLowerCase();
          if (alg === "md5") return new MD5();
          if (alg === "rmd160" || alg === "ripemd160") return new RIPEMD160();
          return new Hash(sha2(alg));
        };
        return browser$b;
      }
      var legacy;
      var hasRequiredLegacy;
      function requireLegacy() {
        if (hasRequiredLegacy) return legacy;
        hasRequiredLegacy = 1;
        var inherits = requireInherits_browser();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var Base = requireCipherBase();
        var ZEROS = Buffer2.alloc(128);
        var blocksize = 64;
        function Hmac(alg, key2) {
          Base.call(this, "digest");
          if (typeof key2 === "string") {
            key2 = Buffer2.from(key2);
          }
          this._alg = alg;
          this._key = key2;
          if (key2.length > blocksize) {
            key2 = alg(key2);
          } else if (key2.length < blocksize) {
            key2 = Buffer2.concat([key2, ZEROS], blocksize);
          }
          var ipad = this._ipad = Buffer2.allocUnsafe(blocksize);
          var opad = this._opad = Buffer2.allocUnsafe(blocksize);
          for (var i2 = 0; i2 < blocksize; i2++) {
            ipad[i2] = key2[i2] ^ 54;
            opad[i2] = key2[i2] ^ 92;
          }
          this._hash = [ipad];
        }
        inherits(Hmac, Base);
        Hmac.prototype._update = function(data) {
          this._hash.push(data);
        };
        Hmac.prototype._final = function() {
          var h = this._alg(Buffer2.concat(this._hash));
          return this._alg(Buffer2.concat([this._opad, h]));
        };
        legacy = Hmac;
        return legacy;
      }
      var md5$3;
      var hasRequiredMd5$2;
      function requireMd5$2() {
        if (hasRequiredMd5$2) return md5$3;
        hasRequiredMd5$2 = 1;
        var MD5 = requireMd5_js();
        md5$3 = function(buffer2) {
          return new MD5().update(buffer2).digest();
        };
        return md5$3;
      }
      var browser$a;
      var hasRequiredBrowser$9;
      function requireBrowser$9() {
        if (hasRequiredBrowser$9) return browser$a;
        hasRequiredBrowser$9 = 1;
        var inherits = requireInherits_browser();
        var Legacy = requireLegacy();
        var Base = requireCipherBase();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var md52 = requireMd5$2();
        var RIPEMD160 = requireRipemd160$1();
        var sha2 = requireSha_js();
        var ZEROS = Buffer2.alloc(128);
        function Hmac(alg, key2) {
          Base.call(this, "digest");
          if (typeof key2 === "string") {
            key2 = Buffer2.from(key2);
          }
          var blocksize = alg === "sha512" || alg === "sha384" ? 128 : 64;
          this._alg = alg;
          this._key = key2;
          if (key2.length > blocksize) {
            var hash2 = alg === "rmd160" ? new RIPEMD160() : sha2(alg);
            key2 = hash2.update(key2).digest();
          } else if (key2.length < blocksize) {
            key2 = Buffer2.concat([key2, ZEROS], blocksize);
          }
          var ipad = this._ipad = Buffer2.allocUnsafe(blocksize);
          var opad = this._opad = Buffer2.allocUnsafe(blocksize);
          for (var i2 = 0; i2 < blocksize; i2++) {
            ipad[i2] = key2[i2] ^ 54;
            opad[i2] = key2[i2] ^ 92;
          }
          this._hash = alg === "rmd160" ? new RIPEMD160() : sha2(alg);
          this._hash.update(ipad);
        }
        inherits(Hmac, Base);
        Hmac.prototype._update = function(data) {
          this._hash.update(data);
        };
        Hmac.prototype._final = function() {
          var h = this._hash.digest();
          var hash2 = this._alg === "rmd160" ? new RIPEMD160() : sha2(this._alg);
          return hash2.update(this._opad).update(h).digest();
        };
        browser$a = function createHmac(alg, key2) {
          alg = alg.toLowerCase();
          if (alg === "rmd160" || alg === "ripemd160") {
            return new Hmac("rmd160", key2);
          }
          if (alg === "md5") {
            return new Legacy(md52, key2);
          }
          return new Hmac(alg, key2);
        };
        return browser$a;
      }
      const sha224WithRSAEncryption = { "sign": "rsa", "hash": "sha224", "id": "302d300d06096086480165030402040500041c" };
      const sha256WithRSAEncryption = { "sign": "rsa", "hash": "sha256", "id": "3031300d060960864801650304020105000420" };
      const sha384WithRSAEncryption = { "sign": "rsa", "hash": "sha384", "id": "3041300d060960864801650304020205000430" };
      const sha512WithRSAEncryption = { "sign": "rsa", "hash": "sha512", "id": "3051300d060960864801650304020305000440" };
      const sha256 = { "sign": "ecdsa", "hash": "sha256", "id": "" };
      const sha224 = { "sign": "ecdsa", "hash": "sha224", "id": "" };
      const sha384 = { "sign": "ecdsa", "hash": "sha384", "id": "" };
      const sha512 = { "sign": "ecdsa", "hash": "sha512", "id": "" };
      const DSA = { "sign": "dsa", "hash": "sha1", "id": "" };
      const ripemd160WithRSA = { "sign": "rsa", "hash": "rmd160", "id": "3021300906052b2403020105000414" };
      const md5WithRSAEncryption = { "sign": "rsa", "hash": "md5", "id": "3020300c06082a864886f70d020505000410" };
      const require$$6 = {
        sha224WithRSAEncryption,
        "RSA-SHA224": { "sign": "ecdsa/rsa", "hash": "sha224", "id": "302d300d06096086480165030402040500041c" },
        sha256WithRSAEncryption,
        "RSA-SHA256": { "sign": "ecdsa/rsa", "hash": "sha256", "id": "3031300d060960864801650304020105000420" },
        sha384WithRSAEncryption,
        "RSA-SHA384": { "sign": "ecdsa/rsa", "hash": "sha384", "id": "3041300d060960864801650304020205000430" },
        sha512WithRSAEncryption,
        "RSA-SHA512": { "sign": "ecdsa/rsa", "hash": "sha512", "id": "3051300d060960864801650304020305000440" },
        "RSA-SHA1": { "sign": "rsa", "hash": "sha1", "id": "3021300906052b0e03021a05000414" },
        "ecdsa-with-SHA1": { "sign": "ecdsa", "hash": "sha1", "id": "" },
        sha256,
        sha224,
        sha384,
        sha512,
        "DSA-SHA": { "sign": "dsa", "hash": "sha1", "id": "" },
        "DSA-SHA1": { "sign": "dsa", "hash": "sha1", "id": "" },
        DSA,
        "DSA-WITH-SHA224": { "sign": "dsa", "hash": "sha224", "id": "" },
        "DSA-SHA224": { "sign": "dsa", "hash": "sha224", "id": "" },
        "DSA-WITH-SHA256": { "sign": "dsa", "hash": "sha256", "id": "" },
        "DSA-SHA256": { "sign": "dsa", "hash": "sha256", "id": "" },
        "DSA-WITH-SHA384": { "sign": "dsa", "hash": "sha384", "id": "" },
        "DSA-SHA384": { "sign": "dsa", "hash": "sha384", "id": "" },
        "DSA-WITH-SHA512": { "sign": "dsa", "hash": "sha512", "id": "" },
        "DSA-SHA512": { "sign": "dsa", "hash": "sha512", "id": "" },
        "DSA-RIPEMD160": { "sign": "dsa", "hash": "rmd160", "id": "" },
        ripemd160WithRSA,
        "RSA-RIPEMD160": { "sign": "rsa", "hash": "rmd160", "id": "3021300906052b2403020105000414" },
        md5WithRSAEncryption,
        "RSA-MD5": { "sign": "rsa", "hash": "md5", "id": "3020300c06082a864886f70d020505000410" }
      };
      var algos;
      var hasRequiredAlgos;
      function requireAlgos() {
        if (hasRequiredAlgos) return algos;
        hasRequiredAlgos = 1;
        algos = require$$6;
        return algos;
      }
      var browser$9 = {};
      var safeBuffer$4 = { exports: {} };
      var hasRequiredSafeBuffer$4;
      function requireSafeBuffer$4() {
        if (hasRequiredSafeBuffer$4) return safeBuffer$4.exports;
        hasRequiredSafeBuffer$4 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$4, safeBuffer$4.exports);
        return safeBuffer$4.exports;
      }
      var precondition;
      var hasRequiredPrecondition;
      function requirePrecondition() {
        if (hasRequiredPrecondition) return precondition;
        hasRequiredPrecondition = 1;
        var MAX_ALLOC = Math.pow(2, 30) - 1;
        precondition = function(iterations, keylen) {
          if (typeof iterations !== "number") {
            throw new TypeError("Iterations not a number");
          }
          if (iterations < 0) {
            throw new TypeError("Bad iterations");
          }
          if (typeof keylen !== "number") {
            throw new TypeError("Key length not a number");
          }
          if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) {
            throw new TypeError("Bad key length");
          }
        };
        return precondition;
      }
      var defaultEncoding_1;
      var hasRequiredDefaultEncoding;
      function requireDefaultEncoding() {
        if (hasRequiredDefaultEncoding) return defaultEncoding_1;
        hasRequiredDefaultEncoding = 1;
        var defaultEncoding;
        if (commonjsGlobal.process && commonjsGlobal.process.browser) {
          defaultEncoding = "utf-8";
        } else if (commonjsGlobal.process && commonjsGlobal.process.version) {
          var pVersionMajor = parseInt(process$1.version.split(".")[0].slice(1), 10);
          defaultEncoding = pVersionMajor >= 6 ? "utf-8" : "binary";
        } else {
          defaultEncoding = "utf-8";
        }
        defaultEncoding_1 = defaultEncoding;
        return defaultEncoding_1;
      }
      var makeHash;
      var hasRequiredMakeHash;
      function requireMakeHash() {
        if (hasRequiredMakeHash) return makeHash;
        hasRequiredMakeHash = 1;
        var intSize = 4;
        var zeroBuffer = new Buffer(intSize);
        zeroBuffer.fill(0);
        var charSize = 8;
        var hashSize = 16;
        function toArray(buf) {
          if (buf.length % intSize !== 0) {
            var len2 = buf.length + (intSize - buf.length % intSize);
            buf = Buffer.concat([buf, zeroBuffer], len2);
          }
          var arr = new Array(buf.length >>> 2);
          for (var i2 = 0, j = 0; i2 < buf.length; i2 += intSize, j++) {
            arr[j] = buf.readInt32LE(i2);
          }
          return arr;
        }
        makeHash = function hash2(buf, fn) {
          var arr = fn(toArray(buf), buf.length * charSize);
          buf = new Buffer(hashSize);
          for (var i2 = 0; i2 < arr.length; i2++) {
            buf.writeInt32LE(arr[i2], i2 << 2, true);
          }
          return buf;
        };
        return makeHash;
      }
      var md5$2;
      var hasRequiredMd5$1;
      function requireMd5$1() {
        if (hasRequiredMd5$1) return md5$2;
        hasRequiredMd5$1 = 1;
        var makeHash2 = requireMakeHash();
        function core_md5(x, len2) {
          x[len2 >> 5] |= 128 << len2 % 32;
          x[(len2 + 64 >>> 9 << 4) + 14] = len2;
          var a = 1732584193;
          var b = -271733879;
          var c = -1732584194;
          var d = 271733878;
          for (var i2 = 0; i2 < x.length; i2 += 16) {
            var olda = a;
            var oldb = b;
            var oldc = c;
            var oldd = d;
            a = md5_ff(a, b, c, d, x[i2 + 0], 7, -680876936);
            d = md5_ff(d, a, b, c, x[i2 + 1], 12, -389564586);
            c = md5_ff(c, d, a, b, x[i2 + 2], 17, 606105819);
            b = md5_ff(b, c, d, a, x[i2 + 3], 22, -1044525330);
            a = md5_ff(a, b, c, d, x[i2 + 4], 7, -176418897);
            d = md5_ff(d, a, b, c, x[i2 + 5], 12, 1200080426);
            c = md5_ff(c, d, a, b, x[i2 + 6], 17, -1473231341);
            b = md5_ff(b, c, d, a, x[i2 + 7], 22, -45705983);
            a = md5_ff(a, b, c, d, x[i2 + 8], 7, 1770035416);
            d = md5_ff(d, a, b, c, x[i2 + 9], 12, -1958414417);
            c = md5_ff(c, d, a, b, x[i2 + 10], 17, -42063);
            b = md5_ff(b, c, d, a, x[i2 + 11], 22, -1990404162);
            a = md5_ff(a, b, c, d, x[i2 + 12], 7, 1804603682);
            d = md5_ff(d, a, b, c, x[i2 + 13], 12, -40341101);
            c = md5_ff(c, d, a, b, x[i2 + 14], 17, -1502002290);
            b = md5_ff(b, c, d, a, x[i2 + 15], 22, 1236535329);
            a = md5_gg(a, b, c, d, x[i2 + 1], 5, -165796510);
            d = md5_gg(d, a, b, c, x[i2 + 6], 9, -1069501632);
            c = md5_gg(c, d, a, b, x[i2 + 11], 14, 643717713);
            b = md5_gg(b, c, d, a, x[i2 + 0], 20, -373897302);
            a = md5_gg(a, b, c, d, x[i2 + 5], 5, -701558691);
            d = md5_gg(d, a, b, c, x[i2 + 10], 9, 38016083);
            c = md5_gg(c, d, a, b, x[i2 + 15], 14, -660478335);
            b = md5_gg(b, c, d, a, x[i2 + 4], 20, -405537848);
            a = md5_gg(a, b, c, d, x[i2 + 9], 5, 568446438);
            d = md5_gg(d, a, b, c, x[i2 + 14], 9, -1019803690);
            c = md5_gg(c, d, a, b, x[i2 + 3], 14, -187363961);
            b = md5_gg(b, c, d, a, x[i2 + 8], 20, 1163531501);
            a = md5_gg(a, b, c, d, x[i2 + 13], 5, -1444681467);
            d = md5_gg(d, a, b, c, x[i2 + 2], 9, -51403784);
            c = md5_gg(c, d, a, b, x[i2 + 7], 14, 1735328473);
            b = md5_gg(b, c, d, a, x[i2 + 12], 20, -1926607734);
            a = md5_hh(a, b, c, d, x[i2 + 5], 4, -378558);
            d = md5_hh(d, a, b, c, x[i2 + 8], 11, -2022574463);
            c = md5_hh(c, d, a, b, x[i2 + 11], 16, 1839030562);
            b = md5_hh(b, c, d, a, x[i2 + 14], 23, -35309556);
            a = md5_hh(a, b, c, d, x[i2 + 1], 4, -1530992060);
            d = md5_hh(d, a, b, c, x[i2 + 4], 11, 1272893353);
            c = md5_hh(c, d, a, b, x[i2 + 7], 16, -155497632);
            b = md5_hh(b, c, d, a, x[i2 + 10], 23, -1094730640);
            a = md5_hh(a, b, c, d, x[i2 + 13], 4, 681279174);
            d = md5_hh(d, a, b, c, x[i2 + 0], 11, -358537222);
            c = md5_hh(c, d, a, b, x[i2 + 3], 16, -722521979);
            b = md5_hh(b, c, d, a, x[i2 + 6], 23, 76029189);
            a = md5_hh(a, b, c, d, x[i2 + 9], 4, -640364487);
            d = md5_hh(d, a, b, c, x[i2 + 12], 11, -421815835);
            c = md5_hh(c, d, a, b, x[i2 + 15], 16, 530742520);
            b = md5_hh(b, c, d, a, x[i2 + 2], 23, -995338651);
            a = md5_ii(a, b, c, d, x[i2 + 0], 6, -198630844);
            d = md5_ii(d, a, b, c, x[i2 + 7], 10, 1126891415);
            c = md5_ii(c, d, a, b, x[i2 + 14], 15, -1416354905);
            b = md5_ii(b, c, d, a, x[i2 + 5], 21, -57434055);
            a = md5_ii(a, b, c, d, x[i2 + 12], 6, 1700485571);
            d = md5_ii(d, a, b, c, x[i2 + 3], 10, -1894986606);
            c = md5_ii(c, d, a, b, x[i2 + 10], 15, -1051523);
            b = md5_ii(b, c, d, a, x[i2 + 1], 21, -2054922799);
            a = md5_ii(a, b, c, d, x[i2 + 8], 6, 1873313359);
            d = md5_ii(d, a, b, c, x[i2 + 15], 10, -30611744);
            c = md5_ii(c, d, a, b, x[i2 + 6], 15, -1560198380);
            b = md5_ii(b, c, d, a, x[i2 + 13], 21, 1309151649);
            a = md5_ii(a, b, c, d, x[i2 + 4], 6, -145523070);
            d = md5_ii(d, a, b, c, x[i2 + 11], 10, -1120210379);
            c = md5_ii(c, d, a, b, x[i2 + 2], 15, 718787259);
            b = md5_ii(b, c, d, a, x[i2 + 9], 21, -343485551);
            a = safe_add(a, olda);
            b = safe_add(b, oldb);
            c = safe_add(c, oldc);
            d = safe_add(d, oldd);
          }
          return [a, b, c, d];
        }
        function md5_cmn(q, a, b, x, s, t) {
          return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
        }
        function md5_ff(a, b, c, d, x, s, t) {
          return md5_cmn(b & c | ~b & d, a, b, x, s, t);
        }
        function md5_gg(a, b, c, d, x, s, t) {
          return md5_cmn(b & d | c & ~d, a, b, x, s, t);
        }
        function md5_hh(a, b, c, d, x, s, t) {
          return md5_cmn(b ^ c ^ d, a, b, x, s, t);
        }
        function md5_ii(a, b, c, d, x, s, t) {
          return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
        }
        function safe_add(x, y) {
          var lsw = (x & 65535) + (y & 65535);
          var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
          return msw << 16 | lsw & 65535;
        }
        function bit_rol(num, cnt) {
          return num << cnt | num >>> 32 - cnt;
        }
        md5$2 = function md52(buf) {
          return makeHash2(buf, core_md5);
        };
        return md5$2;
      }
      var hashBase;
      var hasRequiredHashBase;
      function requireHashBase() {
        if (hasRequiredHashBase) return hashBase;
        hasRequiredHashBase = 1;
        var Transform = requireStreamBrowserify().Transform;
        var inherits = requireInherits_browser();
        function HashBase(blockSize) {
          Transform.call(this);
          this._block = new Buffer(blockSize);
          this._blockSize = blockSize;
          this._blockOffset = 0;
          this._length = [0, 0, 0, 0];
          this._finalized = false;
        }
        inherits(HashBase, Transform);
        HashBase.prototype._transform = function(chunk, encoding, callback) {
          var error = null;
          try {
            if (encoding !== "buffer") chunk = new Buffer(chunk, encoding);
            this.update(chunk);
          } catch (err) {
            error = err;
          }
          callback(error);
        };
        HashBase.prototype._flush = function(callback) {
          var error = null;
          try {
            this.push(this._digest());
          } catch (err) {
            error = err;
          }
          callback(error);
        };
        HashBase.prototype.update = function(data, encoding) {
          if (!Buffer.isBuffer(data) && typeof data !== "string") throw new TypeError("Data must be a string or a buffer");
          if (this._finalized) throw new Error("Digest already called");
          if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || "binary");
          var block = this._block;
          var offset = 0;
          while (this._blockOffset + data.length - offset >= this._blockSize) {
            for (var i2 = this._blockOffset; i2 < this._blockSize; ) block[i2++] = data[offset++];
            this._update();
            this._blockOffset = 0;
          }
          while (offset < data.length) block[this._blockOffset++] = data[offset++];
          for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
            this._length[j] += carry;
            carry = this._length[j] / 4294967296 | 0;
            if (carry > 0) this._length[j] -= 4294967296 * carry;
          }
          return this;
        };
        HashBase.prototype._update = function(data) {
          throw new Error("_update is not implemented");
        };
        HashBase.prototype.digest = function(encoding) {
          if (this._finalized) throw new Error("Digest already called");
          this._finalized = true;
          var digest = this._digest();
          if (encoding !== void 0) digest = digest.toString(encoding);
          return digest;
        };
        HashBase.prototype._digest = function() {
          throw new Error("_digest is not implemented");
        };
        hashBase = HashBase;
        return hashBase;
      }
      var ripemd160;
      var hasRequiredRipemd160;
      function requireRipemd160() {
        if (hasRequiredRipemd160) return ripemd160;
        hasRequiredRipemd160 = 1;
        var inherits = requireInherits_browser();
        var HashBase = requireHashBase();
        function RIPEMD160() {
          HashBase.call(this, 64);
          this._a = 1732584193;
          this._b = 4023233417;
          this._c = 2562383102;
          this._d = 271733878;
          this._e = 3285377520;
        }
        inherits(RIPEMD160, HashBase);
        RIPEMD160.prototype._update = function() {
          var m = new Array(16);
          for (var i2 = 0; i2 < 16; ++i2) m[i2] = this._block.readInt32LE(i2 * 4);
          var al = this._a;
          var bl = this._b;
          var cl = this._c;
          var dl = this._d;
          var el = this._e;
          al = fn1(al, bl, cl, dl, el, m[0], 0, 11);
          cl = rotl(cl, 10);
          el = fn1(el, al, bl, cl, dl, m[1], 0, 14);
          bl = rotl(bl, 10);
          dl = fn1(dl, el, al, bl, cl, m[2], 0, 15);
          al = rotl(al, 10);
          cl = fn1(cl, dl, el, al, bl, m[3], 0, 12);
          el = rotl(el, 10);
          bl = fn1(bl, cl, dl, el, al, m[4], 0, 5);
          dl = rotl(dl, 10);
          al = fn1(al, bl, cl, dl, el, m[5], 0, 8);
          cl = rotl(cl, 10);
          el = fn1(el, al, bl, cl, dl, m[6], 0, 7);
          bl = rotl(bl, 10);
          dl = fn1(dl, el, al, bl, cl, m[7], 0, 9);
          al = rotl(al, 10);
          cl = fn1(cl, dl, el, al, bl, m[8], 0, 11);
          el = rotl(el, 10);
          bl = fn1(bl, cl, dl, el, al, m[9], 0, 13);
          dl = rotl(dl, 10);
          al = fn1(al, bl, cl, dl, el, m[10], 0, 14);
          cl = rotl(cl, 10);
          el = fn1(el, al, bl, cl, dl, m[11], 0, 15);
          bl = rotl(bl, 10);
          dl = fn1(dl, el, al, bl, cl, m[12], 0, 6);
          al = rotl(al, 10);
          cl = fn1(cl, dl, el, al, bl, m[13], 0, 7);
          el = rotl(el, 10);
          bl = fn1(bl, cl, dl, el, al, m[14], 0, 9);
          dl = rotl(dl, 10);
          al = fn1(al, bl, cl, dl, el, m[15], 0, 8);
          cl = rotl(cl, 10);
          el = fn2(el, al, bl, cl, dl, m[7], 1518500249, 7);
          bl = rotl(bl, 10);
          dl = fn2(dl, el, al, bl, cl, m[4], 1518500249, 6);
          al = rotl(al, 10);
          cl = fn2(cl, dl, el, al, bl, m[13], 1518500249, 8);
          el = rotl(el, 10);
          bl = fn2(bl, cl, dl, el, al, m[1], 1518500249, 13);
          dl = rotl(dl, 10);
          al = fn2(al, bl, cl, dl, el, m[10], 1518500249, 11);
          cl = rotl(cl, 10);
          el = fn2(el, al, bl, cl, dl, m[6], 1518500249, 9);
          bl = rotl(bl, 10);
          dl = fn2(dl, el, al, bl, cl, m[15], 1518500249, 7);
          al = rotl(al, 10);
          cl = fn2(cl, dl, el, al, bl, m[3], 1518500249, 15);
          el = rotl(el, 10);
          bl = fn2(bl, cl, dl, el, al, m[12], 1518500249, 7);
          dl = rotl(dl, 10);
          al = fn2(al, bl, cl, dl, el, m[0], 1518500249, 12);
          cl = rotl(cl, 10);
          el = fn2(el, al, bl, cl, dl, m[9], 1518500249, 15);
          bl = rotl(bl, 10);
          dl = fn2(dl, el, al, bl, cl, m[5], 1518500249, 9);
          al = rotl(al, 10);
          cl = fn2(cl, dl, el, al, bl, m[2], 1518500249, 11);
          el = rotl(el, 10);
          bl = fn2(bl, cl, dl, el, al, m[14], 1518500249, 7);
          dl = rotl(dl, 10);
          al = fn2(al, bl, cl, dl, el, m[11], 1518500249, 13);
          cl = rotl(cl, 10);
          el = fn2(el, al, bl, cl, dl, m[8], 1518500249, 12);
          bl = rotl(bl, 10);
          dl = fn3(dl, el, al, bl, cl, m[3], 1859775393, 11);
          al = rotl(al, 10);
          cl = fn3(cl, dl, el, al, bl, m[10], 1859775393, 13);
          el = rotl(el, 10);
          bl = fn3(bl, cl, dl, el, al, m[14], 1859775393, 6);
          dl = rotl(dl, 10);
          al = fn3(al, bl, cl, dl, el, m[4], 1859775393, 7);
          cl = rotl(cl, 10);
          el = fn3(el, al, bl, cl, dl, m[9], 1859775393, 14);
          bl = rotl(bl, 10);
          dl = fn3(dl, el, al, bl, cl, m[15], 1859775393, 9);
          al = rotl(al, 10);
          cl = fn3(cl, dl, el, al, bl, m[8], 1859775393, 13);
          el = rotl(el, 10);
          bl = fn3(bl, cl, dl, el, al, m[1], 1859775393, 15);
          dl = rotl(dl, 10);
          al = fn3(al, bl, cl, dl, el, m[2], 1859775393, 14);
          cl = rotl(cl, 10);
          el = fn3(el, al, bl, cl, dl, m[7], 1859775393, 8);
          bl = rotl(bl, 10);
          dl = fn3(dl, el, al, bl, cl, m[0], 1859775393, 13);
          al = rotl(al, 10);
          cl = fn3(cl, dl, el, al, bl, m[6], 1859775393, 6);
          el = rotl(el, 10);
          bl = fn3(bl, cl, dl, el, al, m[13], 1859775393, 5);
          dl = rotl(dl, 10);
          al = fn3(al, bl, cl, dl, el, m[11], 1859775393, 12);
          cl = rotl(cl, 10);
          el = fn3(el, al, bl, cl, dl, m[5], 1859775393, 7);
          bl = rotl(bl, 10);
          dl = fn3(dl, el, al, bl, cl, m[12], 1859775393, 5);
          al = rotl(al, 10);
          cl = fn4(cl, dl, el, al, bl, m[1], 2400959708, 11);
          el = rotl(el, 10);
          bl = fn4(bl, cl, dl, el, al, m[9], 2400959708, 12);
          dl = rotl(dl, 10);
          al = fn4(al, bl, cl, dl, el, m[11], 2400959708, 14);
          cl = rotl(cl, 10);
          el = fn4(el, al, bl, cl, dl, m[10], 2400959708, 15);
          bl = rotl(bl, 10);
          dl = fn4(dl, el, al, bl, cl, m[0], 2400959708, 14);
          al = rotl(al, 10);
          cl = fn4(cl, dl, el, al, bl, m[8], 2400959708, 15);
          el = rotl(el, 10);
          bl = fn4(bl, cl, dl, el, al, m[12], 2400959708, 9);
          dl = rotl(dl, 10);
          al = fn4(al, bl, cl, dl, el, m[4], 2400959708, 8);
          cl = rotl(cl, 10);
          el = fn4(el, al, bl, cl, dl, m[13], 2400959708, 9);
          bl = rotl(bl, 10);
          dl = fn4(dl, el, al, bl, cl, m[3], 2400959708, 14);
          al = rotl(al, 10);
          cl = fn4(cl, dl, el, al, bl, m[7], 2400959708, 5);
          el = rotl(el, 10);
          bl = fn4(bl, cl, dl, el, al, m[15], 2400959708, 6);
          dl = rotl(dl, 10);
          al = fn4(al, bl, cl, dl, el, m[14], 2400959708, 8);
          cl = rotl(cl, 10);
          el = fn4(el, al, bl, cl, dl, m[5], 2400959708, 6);
          bl = rotl(bl, 10);
          dl = fn4(dl, el, al, bl, cl, m[6], 2400959708, 5);
          al = rotl(al, 10);
          cl = fn4(cl, dl, el, al, bl, m[2], 2400959708, 12);
          el = rotl(el, 10);
          bl = fn5(bl, cl, dl, el, al, m[4], 2840853838, 9);
          dl = rotl(dl, 10);
          al = fn5(al, bl, cl, dl, el, m[0], 2840853838, 15);
          cl = rotl(cl, 10);
          el = fn5(el, al, bl, cl, dl, m[5], 2840853838, 5);
          bl = rotl(bl, 10);
          dl = fn5(dl, el, al, bl, cl, m[9], 2840853838, 11);
          al = rotl(al, 10);
          cl = fn5(cl, dl, el, al, bl, m[7], 2840853838, 6);
          el = rotl(el, 10);
          bl = fn5(bl, cl, dl, el, al, m[12], 2840853838, 8);
          dl = rotl(dl, 10);
          al = fn5(al, bl, cl, dl, el, m[2], 2840853838, 13);
          cl = rotl(cl, 10);
          el = fn5(el, al, bl, cl, dl, m[10], 2840853838, 12);
          bl = rotl(bl, 10);
          dl = fn5(dl, el, al, bl, cl, m[14], 2840853838, 5);
          al = rotl(al, 10);
          cl = fn5(cl, dl, el, al, bl, m[1], 2840853838, 12);
          el = rotl(el, 10);
          bl = fn5(bl, cl, dl, el, al, m[3], 2840853838, 13);
          dl = rotl(dl, 10);
          al = fn5(al, bl, cl, dl, el, m[8], 2840853838, 14);
          cl = rotl(cl, 10);
          el = fn5(el, al, bl, cl, dl, m[11], 2840853838, 11);
          bl = rotl(bl, 10);
          dl = fn5(dl, el, al, bl, cl, m[6], 2840853838, 8);
          al = rotl(al, 10);
          cl = fn5(cl, dl, el, al, bl, m[15], 2840853838, 5);
          el = rotl(el, 10);
          bl = fn5(bl, cl, dl, el, al, m[13], 2840853838, 6);
          dl = rotl(dl, 10);
          var ar = this._a;
          var br = this._b;
          var cr = this._c;
          var dr = this._d;
          var er = this._e;
          ar = fn5(ar, br, cr, dr, er, m[5], 1352829926, 8);
          cr = rotl(cr, 10);
          er = fn5(er, ar, br, cr, dr, m[14], 1352829926, 9);
          br = rotl(br, 10);
          dr = fn5(dr, er, ar, br, cr, m[7], 1352829926, 9);
          ar = rotl(ar, 10);
          cr = fn5(cr, dr, er, ar, br, m[0], 1352829926, 11);
          er = rotl(er, 10);
          br = fn5(br, cr, dr, er, ar, m[9], 1352829926, 13);
          dr = rotl(dr, 10);
          ar = fn5(ar, br, cr, dr, er, m[2], 1352829926, 15);
          cr = rotl(cr, 10);
          er = fn5(er, ar, br, cr, dr, m[11], 1352829926, 15);
          br = rotl(br, 10);
          dr = fn5(dr, er, ar, br, cr, m[4], 1352829926, 5);
          ar = rotl(ar, 10);
          cr = fn5(cr, dr, er, ar, br, m[13], 1352829926, 7);
          er = rotl(er, 10);
          br = fn5(br, cr, dr, er, ar, m[6], 1352829926, 7);
          dr = rotl(dr, 10);
          ar = fn5(ar, br, cr, dr, er, m[15], 1352829926, 8);
          cr = rotl(cr, 10);
          er = fn5(er, ar, br, cr, dr, m[8], 1352829926, 11);
          br = rotl(br, 10);
          dr = fn5(dr, er, ar, br, cr, m[1], 1352829926, 14);
          ar = rotl(ar, 10);
          cr = fn5(cr, dr, er, ar, br, m[10], 1352829926, 14);
          er = rotl(er, 10);
          br = fn5(br, cr, dr, er, ar, m[3], 1352829926, 12);
          dr = rotl(dr, 10);
          ar = fn5(ar, br, cr, dr, er, m[12], 1352829926, 6);
          cr = rotl(cr, 10);
          er = fn4(er, ar, br, cr, dr, m[6], 1548603684, 9);
          br = rotl(br, 10);
          dr = fn4(dr, er, ar, br, cr, m[11], 1548603684, 13);
          ar = rotl(ar, 10);
          cr = fn4(cr, dr, er, ar, br, m[3], 1548603684, 15);
          er = rotl(er, 10);
          br = fn4(br, cr, dr, er, ar, m[7], 1548603684, 7);
          dr = rotl(dr, 10);
          ar = fn4(ar, br, cr, dr, er, m[0], 1548603684, 12);
          cr = rotl(cr, 10);
          er = fn4(er, ar, br, cr, dr, m[13], 1548603684, 8);
          br = rotl(br, 10);
          dr = fn4(dr, er, ar, br, cr, m[5], 1548603684, 9);
          ar = rotl(ar, 10);
          cr = fn4(cr, dr, er, ar, br, m[10], 1548603684, 11);
          er = rotl(er, 10);
          br = fn4(br, cr, dr, er, ar, m[14], 1548603684, 7);
          dr = rotl(dr, 10);
          ar = fn4(ar, br, cr, dr, er, m[15], 1548603684, 7);
          cr = rotl(cr, 10);
          er = fn4(er, ar, br, cr, dr, m[8], 1548603684, 12);
          br = rotl(br, 10);
          dr = fn4(dr, er, ar, br, cr, m[12], 1548603684, 7);
          ar = rotl(ar, 10);
          cr = fn4(cr, dr, er, ar, br, m[4], 1548603684, 6);
          er = rotl(er, 10);
          br = fn4(br, cr, dr, er, ar, m[9], 1548603684, 15);
          dr = rotl(dr, 10);
          ar = fn4(ar, br, cr, dr, er, m[1], 1548603684, 13);
          cr = rotl(cr, 10);
          er = fn4(er, ar, br, cr, dr, m[2], 1548603684, 11);
          br = rotl(br, 10);
          dr = fn3(dr, er, ar, br, cr, m[15], 1836072691, 9);
          ar = rotl(ar, 10);
          cr = fn3(cr, dr, er, ar, br, m[5], 1836072691, 7);
          er = rotl(er, 10);
          br = fn3(br, cr, dr, er, ar, m[1], 1836072691, 15);
          dr = rotl(dr, 10);
          ar = fn3(ar, br, cr, dr, er, m[3], 1836072691, 11);
          cr = rotl(cr, 10);
          er = fn3(er, ar, br, cr, dr, m[7], 1836072691, 8);
          br = rotl(br, 10);
          dr = fn3(dr, er, ar, br, cr, m[14], 1836072691, 6);
          ar = rotl(ar, 10);
          cr = fn3(cr, dr, er, ar, br, m[6], 1836072691, 6);
          er = rotl(er, 10);
          br = fn3(br, cr, dr, er, ar, m[9], 1836072691, 14);
          dr = rotl(dr, 10);
          ar = fn3(ar, br, cr, dr, er, m[11], 1836072691, 12);
          cr = rotl(cr, 10);
          er = fn3(er, ar, br, cr, dr, m[8], 1836072691, 13);
          br = rotl(br, 10);
          dr = fn3(dr, er, ar, br, cr, m[12], 1836072691, 5);
          ar = rotl(ar, 10);
          cr = fn3(cr, dr, er, ar, br, m[2], 1836072691, 14);
          er = rotl(er, 10);
          br = fn3(br, cr, dr, er, ar, m[10], 1836072691, 13);
          dr = rotl(dr, 10);
          ar = fn3(ar, br, cr, dr, er, m[0], 1836072691, 13);
          cr = rotl(cr, 10);
          er = fn3(er, ar, br, cr, dr, m[4], 1836072691, 7);
          br = rotl(br, 10);
          dr = fn3(dr, er, ar, br, cr, m[13], 1836072691, 5);
          ar = rotl(ar, 10);
          cr = fn2(cr, dr, er, ar, br, m[8], 2053994217, 15);
          er = rotl(er, 10);
          br = fn2(br, cr, dr, er, ar, m[6], 2053994217, 5);
          dr = rotl(dr, 10);
          ar = fn2(ar, br, cr, dr, er, m[4], 2053994217, 8);
          cr = rotl(cr, 10);
          er = fn2(er, ar, br, cr, dr, m[1], 2053994217, 11);
          br = rotl(br, 10);
          dr = fn2(dr, er, ar, br, cr, m[3], 2053994217, 14);
          ar = rotl(ar, 10);
          cr = fn2(cr, dr, er, ar, br, m[11], 2053994217, 14);
          er = rotl(er, 10);
          br = fn2(br, cr, dr, er, ar, m[15], 2053994217, 6);
          dr = rotl(dr, 10);
          ar = fn2(ar, br, cr, dr, er, m[0], 2053994217, 14);
          cr = rotl(cr, 10);
          er = fn2(er, ar, br, cr, dr, m[5], 2053994217, 6);
          br = rotl(br, 10);
          dr = fn2(dr, er, ar, br, cr, m[12], 2053994217, 9);
          ar = rotl(ar, 10);
          cr = fn2(cr, dr, er, ar, br, m[2], 2053994217, 12);
          er = rotl(er, 10);
          br = fn2(br, cr, dr, er, ar, m[13], 2053994217, 9);
          dr = rotl(dr, 10);
          ar = fn2(ar, br, cr, dr, er, m[9], 2053994217, 12);
          cr = rotl(cr, 10);
          er = fn2(er, ar, br, cr, dr, m[7], 2053994217, 5);
          br = rotl(br, 10);
          dr = fn2(dr, er, ar, br, cr, m[10], 2053994217, 15);
          ar = rotl(ar, 10);
          cr = fn2(cr, dr, er, ar, br, m[14], 2053994217, 8);
          er = rotl(er, 10);
          br = fn1(br, cr, dr, er, ar, m[12], 0, 8);
          dr = rotl(dr, 10);
          ar = fn1(ar, br, cr, dr, er, m[15], 0, 5);
          cr = rotl(cr, 10);
          er = fn1(er, ar, br, cr, dr, m[10], 0, 12);
          br = rotl(br, 10);
          dr = fn1(dr, er, ar, br, cr, m[4], 0, 9);
          ar = rotl(ar, 10);
          cr = fn1(cr, dr, er, ar, br, m[1], 0, 12);
          er = rotl(er, 10);
          br = fn1(br, cr, dr, er, ar, m[5], 0, 5);
          dr = rotl(dr, 10);
          ar = fn1(ar, br, cr, dr, er, m[8], 0, 14);
          cr = rotl(cr, 10);
          er = fn1(er, ar, br, cr, dr, m[7], 0, 6);
          br = rotl(br, 10);
          dr = fn1(dr, er, ar, br, cr, m[6], 0, 8);
          ar = rotl(ar, 10);
          cr = fn1(cr, dr, er, ar, br, m[2], 0, 13);
          er = rotl(er, 10);
          br = fn1(br, cr, dr, er, ar, m[13], 0, 6);
          dr = rotl(dr, 10);
          ar = fn1(ar, br, cr, dr, er, m[14], 0, 5);
          cr = rotl(cr, 10);
          er = fn1(er, ar, br, cr, dr, m[0], 0, 15);
          br = rotl(br, 10);
          dr = fn1(dr, er, ar, br, cr, m[3], 0, 13);
          ar = rotl(ar, 10);
          cr = fn1(cr, dr, er, ar, br, m[9], 0, 11);
          er = rotl(er, 10);
          br = fn1(br, cr, dr, er, ar, m[11], 0, 11);
          dr = rotl(dr, 10);
          var t = this._b + cl + dr | 0;
          this._b = this._c + dl + er | 0;
          this._c = this._d + el + ar | 0;
          this._d = this._e + al + br | 0;
          this._e = this._a + bl + cr | 0;
          this._a = t;
        };
        RIPEMD160.prototype._digest = function() {
          this._block[this._blockOffset++] = 128;
          if (this._blockOffset > 56) {
            this._block.fill(0, this._blockOffset, 64);
            this._update();
            this._blockOffset = 0;
          }
          this._block.fill(0, this._blockOffset, 56);
          this._block.writeUInt32LE(this._length[0], 56);
          this._block.writeUInt32LE(this._length[1], 60);
          this._update();
          var buffer2 = new Buffer(20);
          buffer2.writeInt32LE(this._a, 0);
          buffer2.writeInt32LE(this._b, 4);
          buffer2.writeInt32LE(this._c, 8);
          buffer2.writeInt32LE(this._d, 12);
          buffer2.writeInt32LE(this._e, 16);
          return buffer2;
        };
        function rotl(x, n) {
          return x << n | x >>> 32 - n;
        }
        function fn1(a, b, c, d, e, m, k, s) {
          return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0;
        }
        function fn2(a, b, c, d, e, m, k, s) {
          return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0;
        }
        function fn3(a, b, c, d, e, m, k, s) {
          return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0;
        }
        function fn4(a, b, c, d, e, m, k, s) {
          return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0;
        }
        function fn5(a, b, c, d, e, m, k, s) {
          return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0;
        }
        ripemd160 = RIPEMD160;
        return ripemd160;
      }
      var toBuffer_1;
      var hasRequiredToBuffer;
      function requireToBuffer() {
        if (hasRequiredToBuffer) return toBuffer_1;
        hasRequiredToBuffer = 1;
        var Buffer2 = requireSafeBuffer$4().Buffer;
        var toBuffer2 = /* @__PURE__ */ requireToBuffer$1();
        var useUint8Array = typeof Uint8Array !== "undefined";
        var useArrayBuffer = useUint8Array && typeof ArrayBuffer !== "undefined";
        var isView = useArrayBuffer && ArrayBuffer.isView;
        toBuffer_1 = function(thing, encoding, name) {
          if (typeof thing === "string" || Buffer2.isBuffer(thing) || useUint8Array && thing instanceof Uint8Array || isView && isView(thing)) {
            return toBuffer2(thing, encoding);
          }
          throw new TypeError(name + " must be a string, a Buffer, a Uint8Array, or a DataView");
        };
        return toBuffer_1;
      }
      var syncBrowser;
      var hasRequiredSyncBrowser;
      function requireSyncBrowser() {
        if (hasRequiredSyncBrowser) return syncBrowser;
        hasRequiredSyncBrowser = 1;
        var md52 = requireMd5$1();
        var RIPEMD160 = requireRipemd160();
        var sha2 = requireSha_js();
        var Buffer2 = requireSafeBuffer$4().Buffer;
        var checkParameters = requirePrecondition();
        var defaultEncoding = requireDefaultEncoding();
        var toBuffer2 = requireToBuffer();
        var ZEROS = Buffer2.alloc(128);
        var sizes = {
          __proto__: null,
          md5: 16,
          sha1: 20,
          sha224: 28,
          sha256: 32,
          sha384: 48,
          sha512: 64,
          "sha512-256": 32,
          ripemd160: 20,
          rmd160: 20
        };
        var mapping = {
          __proto__: null,
          "sha-1": "sha1",
          "sha-224": "sha224",
          "sha-256": "sha256",
          "sha-384": "sha384",
          "sha-512": "sha512",
          "ripemd-160": "ripemd160"
        };
        function rmd160Func(data) {
          return new RIPEMD160().update(data).digest();
        }
        function getDigest(alg) {
          function shaFunc(data) {
            return sha2(alg).update(data).digest();
          }
          if (alg === "rmd160" || alg === "ripemd160") {
            return rmd160Func;
          }
          if (alg === "md5") {
            return md52;
          }
          return shaFunc;
        }
        function Hmac(alg, key2, saltLen) {
          var hash2 = getDigest(alg);
          var blocksize = alg === "sha512" || alg === "sha384" ? 128 : 64;
          if (key2.length > blocksize) {
            key2 = hash2(key2);
          } else if (key2.length < blocksize) {
            key2 = Buffer2.concat([key2, ZEROS], blocksize);
          }
          var ipad = Buffer2.allocUnsafe(blocksize + sizes[alg]);
          var opad = Buffer2.allocUnsafe(blocksize + sizes[alg]);
          for (var i2 = 0; i2 < blocksize; i2++) {
            ipad[i2] = key2[i2] ^ 54;
            opad[i2] = key2[i2] ^ 92;
          }
          var ipad1 = Buffer2.allocUnsafe(blocksize + saltLen + 4);
          ipad.copy(ipad1, 0, 0, blocksize);
          this.ipad1 = ipad1;
          this.ipad2 = ipad;
          this.opad = opad;
          this.alg = alg;
          this.blocksize = blocksize;
          this.hash = hash2;
          this.size = sizes[alg];
        }
        Hmac.prototype.run = function(data, ipad) {
          data.copy(ipad, this.blocksize);
          var h = this.hash(ipad);
          h.copy(this.opad, this.blocksize);
          return this.hash(this.opad);
        };
        function pbkdf2(password, salt, iterations, keylen, digest) {
          checkParameters(iterations, keylen);
          password = toBuffer2(password, defaultEncoding, "Password");
          salt = toBuffer2(salt, defaultEncoding, "Salt");
          var lowerDigest = (digest || "sha1").toLowerCase();
          var mappedDigest = mapping[lowerDigest] || lowerDigest;
          var size = sizes[mappedDigest];
          if (typeof size !== "number" || !size) {
            throw new TypeError("Digest algorithm not supported: " + digest);
          }
          var hmac2 = new Hmac(mappedDigest, password, salt.length);
          var DK = Buffer2.allocUnsafe(keylen);
          var block1 = Buffer2.allocUnsafe(salt.length + 4);
          salt.copy(block1, 0, 0, salt.length);
          var destPos = 0;
          var hLen = size;
          var l = Math.ceil(keylen / hLen);
          for (var i2 = 1; i2 <= l; i2++) {
            block1.writeUInt32BE(i2, salt.length);
            var T = hmac2.run(block1, hmac2.ipad1);
            var U = T;
            for (var j = 1; j < iterations; j++) {
              U = hmac2.run(U, hmac2.ipad2);
              for (var k = 0; k < hLen; k++) {
                T[k] ^= U[k];
              }
            }
            T.copy(DK, destPos);
            destPos += hLen;
          }
          return DK;
        }
        syncBrowser = pbkdf2;
        return syncBrowser;
      }
      var async;
      var hasRequiredAsync;
      function requireAsync() {
        if (hasRequiredAsync) return async;
        hasRequiredAsync = 1;
        var Buffer2 = requireSafeBuffer$4().Buffer;
        var checkParameters = requirePrecondition();
        var defaultEncoding = requireDefaultEncoding();
        var sync = requireSyncBrowser();
        var toBuffer2 = requireToBuffer();
        var ZERO_BUF;
        var subtle = commonjsGlobal.crypto && commonjsGlobal.crypto.subtle;
        var toBrowser = {
          sha: "SHA-1",
          "sha-1": "SHA-1",
          sha1: "SHA-1",
          sha256: "SHA-256",
          "sha-256": "SHA-256",
          sha384: "SHA-384",
          "sha-384": "SHA-384",
          "sha-512": "SHA-512",
          sha512: "SHA-512"
        };
        var checks = [];
        var nextTick;
        function getNextTick() {
          if (nextTick) {
            return nextTick;
          }
          if (commonjsGlobal.process && commonjsGlobal.process.nextTick) {
            nextTick = commonjsGlobal.process.nextTick;
          } else if (commonjsGlobal.queueMicrotask) {
            nextTick = commonjsGlobal.queueMicrotask;
          } else if (commonjsGlobal.setImmediate) {
            nextTick = commonjsGlobal.setImmediate;
          } else {
            nextTick = commonjsGlobal.setTimeout;
          }
          return nextTick;
        }
        function browserPbkdf2(password, salt, iterations, length, algo) {
          return subtle.importKey("raw", password, { name: "PBKDF2" }, false, ["deriveBits"]).then(function(key2) {
            return subtle.deriveBits({
              name: "PBKDF2",
              salt,
              iterations,
              hash: {
                name: algo
              }
            }, key2, length << 3);
          }).then(function(res) {
            return Buffer2.from(res);
          });
        }
        function checkNative(algo) {
          if (commonjsGlobal.process && !commonjsGlobal.process.browser) {
            return Promise.resolve(false);
          }
          if (!subtle || !subtle.importKey || !subtle.deriveBits) {
            return Promise.resolve(false);
          }
          if (checks[algo] !== void 0) {
            return checks[algo];
          }
          ZERO_BUF = ZERO_BUF || Buffer2.alloc(8);
          var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(
            function() {
              return true;
            },
            function() {
              return false;
            }
          );
          checks[algo] = prom;
          return prom;
        }
        function resolvePromise(promise, callback) {
          promise.then(function(out) {
            getNextTick()(function() {
              callback(null, out);
            });
          }, function(e) {
            getNextTick()(function() {
              callback(e);
            });
          });
        }
        async = function(password, salt, iterations, keylen, digest, callback) {
          if (typeof digest === "function") {
            callback = digest;
            digest = void 0;
          }
          digest = digest || "sha1";
          var algo = toBrowser[digest.toLowerCase()];
          if (!algo || typeof commonjsGlobal.Promise !== "function") {
            getNextTick()(function() {
              var out;
              try {
                out = sync(password, salt, iterations, keylen, digest);
              } catch (e) {
                callback(e);
                return;
              }
              callback(null, out);
            });
            return;
          }
          checkParameters(iterations, keylen);
          password = toBuffer2(password, defaultEncoding, "Password");
          salt = toBuffer2(salt, defaultEncoding, "Salt");
          if (typeof callback !== "function") {
            throw new Error("No callback provided to pbkdf2");
          }
          resolvePromise(checkNative(algo).then(function(resp) {
            if (resp) {
              return browserPbkdf2(password, salt, iterations, keylen, algo);
            }
            return sync(password, salt, iterations, keylen, digest);
          }), callback);
        };
        return async;
      }
      var hasRequiredBrowser$8;
      function requireBrowser$8() {
        if (hasRequiredBrowser$8) return browser$9;
        hasRequiredBrowser$8 = 1;
        browser$9.pbkdf2 = requireAsync();
        browser$9.pbkdf2Sync = requireSyncBrowser();
        return browser$9;
      }
      var browser$8 = {};
      var des$1 = {};
      var utils$3 = {};
      var hasRequiredUtils$3;
      function requireUtils$3() {
        if (hasRequiredUtils$3) return utils$3;
        hasRequiredUtils$3 = 1;
        utils$3.readUInt32BE = function readUInt32BE(bytes, off) {
          var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off];
          return res >>> 0;
        };
        utils$3.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
          bytes[0 + off] = value >>> 24;
          bytes[1 + off] = value >>> 16 & 255;
          bytes[2 + off] = value >>> 8 & 255;
          bytes[3 + off] = value & 255;
        };
        utils$3.ip = function ip(inL, inR, out, off) {
          var outL = 0;
          var outR = 0;
          for (var i2 = 6; i2 >= 0; i2 -= 2) {
            for (var j = 0; j <= 24; j += 8) {
              outL <<= 1;
              outL |= inR >>> j + i2 & 1;
            }
            for (var j = 0; j <= 24; j += 8) {
              outL <<= 1;
              outL |= inL >>> j + i2 & 1;
            }
          }
          for (var i2 = 6; i2 >= 0; i2 -= 2) {
            for (var j = 1; j <= 25; j += 8) {
              outR <<= 1;
              outR |= inR >>> j + i2 & 1;
            }
            for (var j = 1; j <= 25; j += 8) {
              outR <<= 1;
              outR |= inL >>> j + i2 & 1;
            }
          }
          out[off + 0] = outL >>> 0;
          out[off + 1] = outR >>> 0;
        };
        utils$3.rip = function rip(inL, inR, out, off) {
          var outL = 0;
          var outR = 0;
          for (var i2 = 0; i2 < 4; i2++) {
            for (var j = 24; j >= 0; j -= 8) {
              outL <<= 1;
              outL |= inR >>> j + i2 & 1;
              outL <<= 1;
              outL |= inL >>> j + i2 & 1;
            }
          }
          for (var i2 = 4; i2 < 8; i2++) {
            for (var j = 24; j >= 0; j -= 8) {
              outR <<= 1;
              outR |= inR >>> j + i2 & 1;
              outR <<= 1;
              outR |= inL >>> j + i2 & 1;
            }
          }
          out[off + 0] = outL >>> 0;
          out[off + 1] = outR >>> 0;
        };
        utils$3.pc1 = function pc1(inL, inR, out, off) {
          var outL = 0;
          var outR = 0;
          for (var i2 = 7; i2 >= 5; i2--) {
            for (var j = 0; j <= 24; j += 8) {
              outL <<= 1;
              outL |= inR >> j + i2 & 1;
            }
            for (var j = 0; j <= 24; j += 8) {
              outL <<= 1;
              outL |= inL >> j + i2 & 1;
            }
          }
          for (var j = 0; j <= 24; j += 8) {
            outL <<= 1;
            outL |= inR >> j + i2 & 1;
          }
          for (var i2 = 1; i2 <= 3; i2++) {
            for (var j = 0; j <= 24; j += 8) {
              outR <<= 1;
              outR |= inR >> j + i2 & 1;
            }
            for (var j = 0; j <= 24; j += 8) {
              outR <<= 1;
              outR |= inL >> j + i2 & 1;
            }
          }
          for (var j = 0; j <= 24; j += 8) {
            outR <<= 1;
            outR |= inL >> j + i2 & 1;
          }
          out[off + 0] = outL >>> 0;
          out[off + 1] = outR >>> 0;
        };
        utils$3.r28shl = function r28shl(num, shift) {
          return num << shift & 268435455 | num >>> 28 - shift;
        };
        var pc2table = [
          // inL => outL
          14,
          11,
          17,
          4,
          27,
          23,
          25,
          0,
          13,
          22,
          7,
          18,
          5,
          9,
          16,
          24,
          2,
          20,
          12,
          21,
          1,
          8,
          15,
          26,
          // inR => outR
          15,
          4,
          25,
          19,
          9,
          1,
          26,
          16,
          5,
          11,
          23,
          8,
          12,
          7,
          17,
          0,
          22,
          3,
          10,
          14,
          6,
          20,
          27,
          24
        ];
        utils$3.pc2 = function pc2(inL, inR, out, off) {
          var outL = 0;
          var outR = 0;
          var len2 = pc2table.length >>> 1;
          for (var i2 = 0; i2 < len2; i2++) {
            outL <<= 1;
            outL |= inL >>> pc2table[i2] & 1;
          }
          for (var i2 = len2; i2 < pc2table.length; i2++) {
            outR <<= 1;
            outR |= inR >>> pc2table[i2] & 1;
          }
          out[off + 0] = outL >>> 0;
          out[off + 1] = outR >>> 0;
        };
        utils$3.expand = function expand(r, out, off) {
          var outL = 0;
          var outR = 0;
          outL = (r & 1) << 5 | r >>> 27;
          for (var i2 = 23; i2 >= 15; i2 -= 4) {
            outL <<= 6;
            outL |= r >>> i2 & 63;
          }
          for (var i2 = 11; i2 >= 3; i2 -= 4) {
            outR |= r >>> i2 & 63;
            outR <<= 6;
          }
          outR |= (r & 31) << 1 | r >>> 31;
          out[off + 0] = outL >>> 0;
          out[off + 1] = outR >>> 0;
        };
        var sTable = [
          14,
          0,
          4,
          15,
          13,
          7,
          1,
          4,
          2,
          14,
          15,
          2,
          11,
          13,
          8,
          1,
          3,
          10,
          10,
          6,
          6,
          12,
          12,
          11,
          5,
          9,
          9,
          5,
          0,
          3,
          7,
          8,
          4,
          15,
          1,
          12,
          14,
          8,
          8,
          2,
          13,
          4,
          6,
          9,
          2,
          1,
          11,
          7,
          15,
          5,
          12,
          11,
          9,
          3,
          7,
          14,
          3,
          10,
          10,
          0,
          5,
          6,
          0,
          13,
          15,
          3,
          1,
          13,
          8,
          4,
          14,
          7,
          6,
          15,
          11,
          2,
          3,
          8,
          4,
          14,
          9,
          12,
          7,
          0,
          2,
          1,
          13,
          10,
          12,
          6,
          0,
          9,
          5,
          11,
          10,
          5,
          0,
          13,
          14,
          8,
          7,
          10,
          11,
          1,
          10,
          3,
          4,
          15,
          13,
          4,
          1,
          2,
          5,
          11,
          8,
          6,
          12,
          7,
          6,
          12,
          9,
          0,
          3,
          5,
          2,
          14,
          15,
          9,
          10,
          13,
          0,
          7,
          9,
          0,
          14,
          9,
          6,
          3,
          3,
          4,
          15,
          6,
          5,
          10,
          1,
          2,
          13,
          8,
          12,
          5,
          7,
          14,
          11,
          12,
          4,
          11,
          2,
          15,
          8,
          1,
          13,
          1,
          6,
          10,
          4,
          13,
          9,
          0,
          8,
          6,
          15,
          9,
          3,
          8,
          0,
          7,
          11,
          4,
          1,
          15,
          2,
          14,
          12,
          3,
          5,
          11,
          10,
          5,
          14,
          2,
          7,
          12,
          7,
          13,
          13,
          8,
          14,
          11,
          3,
          5,
          0,
          6,
          6,
          15,
          9,
          0,
          10,
          3,
          1,
          4,
          2,
          7,
          8,
          2,
          5,
          12,
          11,
          1,
          12,
          10,
          4,
          14,
          15,
          9,
          10,
          3,
          6,
          15,
          9,
          0,
          0,
          6,
          12,
          10,
          11,
          1,
          7,
          13,
          13,
          8,
          15,
          9,
          1,
          4,
          3,
          5,
          14,
          11,
          5,
          12,
          2,
          7,
          8,
          2,
          4,
          14,
          2,
          14,
          12,
          11,
          4,
          2,
          1,
          12,
          7,
          4,
          10,
          7,
          11,
          13,
          6,
          1,
          8,
          5,
          5,
          0,
          3,
          15,
          15,
          10,
          13,
          3,
          0,
          9,
          14,
          8,
          9,
          6,
          4,
          11,
          2,
          8,
          1,
          12,
          11,
          7,
          10,
          1,
          13,
          14,
          7,
          2,
          8,
          13,
          15,
          6,
          9,
          15,
          12,
          0,
          5,
          9,
          6,
          10,
          3,
          4,
          0,
          5,
          14,
          3,
          12,
          10,
          1,
          15,
          10,
          4,
          15,
          2,
          9,
          7,
          2,
          12,
          6,
          9,
          8,
          5,
          0,
          6,
          13,
          1,
          3,
          13,
          4,
          14,
          14,
          0,
          7,
          11,
          5,
          3,
          11,
          8,
          9,
          4,
          14,
          3,
          15,
          2,
          5,
          12,
          2,
          9,
          8,
          5,
          12,
          15,
          3,
          10,
          7,
          11,
          0,
          14,
          4,
          1,
          10,
          7,
          1,
          6,
          13,
          0,
          11,
          8,
          6,
          13,
          4,
          13,
          11,
          0,
          2,
          11,
          14,
          7,
          15,
          4,
          0,
          9,
          8,
          1,
          13,
          10,
          3,
          14,
          12,
          3,
          9,
          5,
          7,
          12,
          5,
          2,
          10,
          15,
          6,
          8,
          1,
          6,
          1,
          6,
          4,
          11,
          11,
          13,
          13,
          8,
          12,
          1,
          3,
          4,
          7,
          10,
          14,
          7,
          10,
          9,
          15,
          5,
          6,
          0,
          8,
          15,
          0,
          14,
          5,
          2,
          9,
          3,
          2,
          12,
          13,
          1,
          2,
          15,
          8,
          13,
          4,
          8,
          6,
          10,
          15,
          3,
          11,
          7,
          1,
          4,
          10,
          12,
          9,
          5,
          3,
          6,
          14,
          11,
          5,
          0,
          0,
          14,
          12,
          9,
          7,
          2,
          7,
          2,
          11,
          1,
          4,
          14,
          1,
          7,
          9,
          4,
          12,
          10,
          14,
          8,
          2,
          13,
          0,
          15,
          6,
          12,
          10,
          9,
          13,
          0,
          15,
          3,
          3,
          5,
          5,
          6,
          8,
          11
        ];
        utils$3.substitute = function substitute(inL, inR) {
          var out = 0;
          for (var i2 = 0; i2 < 4; i2++) {
            var b = inL >>> 18 - i2 * 6 & 63;
            var sb = sTable[i2 * 64 + b];
            out <<= 4;
            out |= sb;
          }
          for (var i2 = 0; i2 < 4; i2++) {
            var b = inR >>> 18 - i2 * 6 & 63;
            var sb = sTable[4 * 64 + i2 * 64 + b];
            out <<= 4;
            out |= sb;
          }
          return out >>> 0;
        };
        var permuteTable = [
          16,
          25,
          12,
          11,
          3,
          20,
          4,
          15,
          31,
          17,
          9,
          6,
          27,
          14,
          1,
          22,
          30,
          24,
          8,
          18,
          0,
          5,
          29,
          23,
          13,
          19,
          2,
          26,
          10,
          21,
          28,
          7
        ];
        utils$3.permute = function permute(num) {
          var out = 0;
          for (var i2 = 0; i2 < permuteTable.length; i2++) {
            out <<= 1;
            out |= num >>> permuteTable[i2] & 1;
          }
          return out >>> 0;
        };
        utils$3.padSplit = function padSplit(num, size, group) {
          var str = num.toString(2);
          while (str.length < size)
            str = "0" + str;
          var out = [];
          for (var i2 = 0; i2 < size; i2 += group)
            out.push(str.slice(i2, i2 + group));
          return out.join(" ");
        };
        return utils$3;
      }
      var minimalisticAssert;
      var hasRequiredMinimalisticAssert;
      function requireMinimalisticAssert() {
        if (hasRequiredMinimalisticAssert) return minimalisticAssert;
        hasRequiredMinimalisticAssert = 1;
        minimalisticAssert = assert;
        function assert(val, msg) {
          if (!val)
            throw new Error(msg || "Assertion failed");
        }
        assert.equal = function assertEqual(l, r, msg) {
          if (l != r)
            throw new Error(msg || "Assertion failed: " + l + " != " + r);
        };
        return minimalisticAssert;
      }
      var cipher;
      var hasRequiredCipher;
      function requireCipher() {
        if (hasRequiredCipher) return cipher;
        hasRequiredCipher = 1;
        var assert = requireMinimalisticAssert();
        function Cipher(options) {
          this.options = options;
          this.type = this.options.type;
          this.blockSize = 8;
          this._init();
          this.buffer = new Array(this.blockSize);
          this.bufferOff = 0;
          this.padding = options.padding !== false;
        }
        cipher = Cipher;
        Cipher.prototype._init = function _init() {
        };
        Cipher.prototype.update = function update(data) {
          if (data.length === 0)
            return [];
          if (this.type === "decrypt")
            return this._updateDecrypt(data);
          else
            return this._updateEncrypt(data);
        };
        Cipher.prototype._buffer = function _buffer(data, off) {
          var min2 = Math.min(this.buffer.length - this.bufferOff, data.length - off);
          for (var i2 = 0; i2 < min2; i2++)
            this.buffer[this.bufferOff + i2] = data[off + i2];
          this.bufferOff += min2;
          return min2;
        };
        Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
          this._update(this.buffer, 0, out, off);
          this.bufferOff = 0;
          return this.blockSize;
        };
        Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
          var inputOff = 0;
          var outputOff = 0;
          var count = (this.bufferOff + data.length) / this.blockSize | 0;
          var out = new Array(count * this.blockSize);
          if (this.bufferOff !== 0) {
            inputOff += this._buffer(data, inputOff);
            if (this.bufferOff === this.buffer.length)
              outputOff += this._flushBuffer(out, outputOff);
          }
          var max2 = data.length - (data.length - inputOff) % this.blockSize;
          for (; inputOff < max2; inputOff += this.blockSize) {
            this._update(data, inputOff, out, outputOff);
            outputOff += this.blockSize;
          }
          for (; inputOff < data.length; inputOff++, this.bufferOff++)
            this.buffer[this.bufferOff] = data[inputOff];
          return out;
        };
        Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
          var inputOff = 0;
          var outputOff = 0;
          var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
          var out = new Array(count * this.blockSize);
          for (; count > 0; count--) {
            inputOff += this._buffer(data, inputOff);
            outputOff += this._flushBuffer(out, outputOff);
          }
          inputOff += this._buffer(data, inputOff);
          return out;
        };
        Cipher.prototype.final = function final(buffer2) {
          var first;
          if (buffer2)
            first = this.update(buffer2);
          var last;
          if (this.type === "encrypt")
            last = this._finalEncrypt();
          else
            last = this._finalDecrypt();
          if (first)
            return first.concat(last);
          else
            return last;
        };
        Cipher.prototype._pad = function _pad(buffer2, off) {
          if (off === 0)
            return false;
          while (off < buffer2.length)
            buffer2[off++] = 0;
          return true;
        };
        Cipher.prototype._finalEncrypt = function _finalEncrypt() {
          if (!this._pad(this.buffer, this.bufferOff))
            return [];
          var out = new Array(this.blockSize);
          this._update(this.buffer, 0, out, 0);
          return out;
        };
        Cipher.prototype._unpad = function _unpad(buffer2) {
          return buffer2;
        };
        Cipher.prototype._finalDecrypt = function _finalDecrypt() {
          assert.equal(this.bufferOff, this.blockSize, "Not enough data to decrypt");
          var out = new Array(this.blockSize);
          this._flushBuffer(out, 0);
          return this._unpad(out);
        };
        return cipher;
      }
      var des;
      var hasRequiredDes$1;
      function requireDes$1() {
        if (hasRequiredDes$1) return des;
        hasRequiredDes$1 = 1;
        var assert = requireMinimalisticAssert();
        var inherits = requireInherits_browser();
        var utils2 = requireUtils$3();
        var Cipher = requireCipher();
        function DESState() {
          this.tmp = new Array(2);
          this.keys = null;
        }
        function DES(options) {
          Cipher.call(this, options);
          var state2 = new DESState();
          this._desState = state2;
          this.deriveKeys(state2, options.key);
        }
        inherits(DES, Cipher);
        des = DES;
        DES.create = function create(options) {
          return new DES(options);
        };
        var shiftTable = [
          1,
          1,
          2,
          2,
          2,
          2,
          2,
          2,
          1,
          2,
          2,
          2,
          2,
          2,
          2,
          1
        ];
        DES.prototype.deriveKeys = function deriveKeys(state2, key2) {
          state2.keys = new Array(16 * 2);
          assert.equal(key2.length, this.blockSize, "Invalid key length");
          var kL = utils2.readUInt32BE(key2, 0);
          var kR = utils2.readUInt32BE(key2, 4);
          utils2.pc1(kL, kR, state2.tmp, 0);
          kL = state2.tmp[0];
          kR = state2.tmp[1];
          for (var i2 = 0; i2 < state2.keys.length; i2 += 2) {
            var shift = shiftTable[i2 >>> 1];
            kL = utils2.r28shl(kL, shift);
            kR = utils2.r28shl(kR, shift);
            utils2.pc2(kL, kR, state2.keys, i2);
          }
        };
        DES.prototype._update = function _update(inp, inOff, out, outOff) {
          var state2 = this._desState;
          var l = utils2.readUInt32BE(inp, inOff);
          var r = utils2.readUInt32BE(inp, inOff + 4);
          utils2.ip(l, r, state2.tmp, 0);
          l = state2.tmp[0];
          r = state2.tmp[1];
          if (this.type === "encrypt")
            this._encrypt(state2, l, r, state2.tmp, 0);
          else
            this._decrypt(state2, l, r, state2.tmp, 0);
          l = state2.tmp[0];
          r = state2.tmp[1];
          utils2.writeUInt32BE(out, l, outOff);
          utils2.writeUInt32BE(out, r, outOff + 4);
        };
        DES.prototype._pad = function _pad(buffer2, off) {
          if (this.padding === false) {
            return false;
          }
          var value = buffer2.length - off;
          for (var i2 = off; i2 < buffer2.length; i2++)
            buffer2[i2] = value;
          return true;
        };
        DES.prototype._unpad = function _unpad(buffer2) {
          if (this.padding === false) {
            return buffer2;
          }
          var pad = buffer2[buffer2.length - 1];
          for (var i2 = buffer2.length - pad; i2 < buffer2.length; i2++)
            assert.equal(buffer2[i2], pad);
          return buffer2.slice(0, buffer2.length - pad);
        };
        DES.prototype._encrypt = function _encrypt(state2, lStart, rStart, out, off) {
          var l = lStart;
          var r = rStart;
          for (var i2 = 0; i2 < state2.keys.length; i2 += 2) {
            var keyL = state2.keys[i2];
            var keyR = state2.keys[i2 + 1];
            utils2.expand(r, state2.tmp, 0);
            keyL ^= state2.tmp[0];
            keyR ^= state2.tmp[1];
            var s = utils2.substitute(keyL, keyR);
            var f = utils2.permute(s);
            var t = r;
            r = (l ^ f) >>> 0;
            l = t;
          }
          utils2.rip(r, l, out, off);
        };
        DES.prototype._decrypt = function _decrypt(state2, lStart, rStart, out, off) {
          var l = rStart;
          var r = lStart;
          for (var i2 = state2.keys.length - 2; i2 >= 0; i2 -= 2) {
            var keyL = state2.keys[i2];
            var keyR = state2.keys[i2 + 1];
            utils2.expand(l, state2.tmp, 0);
            keyL ^= state2.tmp[0];
            keyR ^= state2.tmp[1];
            var s = utils2.substitute(keyL, keyR);
            var f = utils2.permute(s);
            var t = l;
            l = (r ^ f) >>> 0;
            r = t;
          }
          utils2.rip(l, r, out, off);
        };
        return des;
      }
      var cbc$1 = {};
      var hasRequiredCbc$1;
      function requireCbc$1() {
        if (hasRequiredCbc$1) return cbc$1;
        hasRequiredCbc$1 = 1;
        var assert = requireMinimalisticAssert();
        var inherits = requireInherits_browser();
        var proto = {};
        function CBCState(iv) {
          assert.equal(iv.length, 8, "Invalid IV length");
          this.iv = new Array(8);
          for (var i2 = 0; i2 < this.iv.length; i2++)
            this.iv[i2] = iv[i2];
        }
        function instantiate(Base) {
          function CBC(options) {
            Base.call(this, options);
            this._cbcInit();
          }
          inherits(CBC, Base);
          var keys2 = Object.keys(proto);
          for (var i2 = 0; i2 < keys2.length; i2++) {
            var key2 = keys2[i2];
            CBC.prototype[key2] = proto[key2];
          }
          CBC.create = function create(options) {
            return new CBC(options);
          };
          return CBC;
        }
        cbc$1.instantiate = instantiate;
        proto._cbcInit = function _cbcInit() {
          var state2 = new CBCState(this.options.iv);
          this._cbcState = state2;
        };
        proto._update = function _update(inp, inOff, out, outOff) {
          var state2 = this._cbcState;
          var superProto = this.constructor.super_.prototype;
          var iv = state2.iv;
          if (this.type === "encrypt") {
            for (var i2 = 0; i2 < this.blockSize; i2++)
              iv[i2] ^= inp[inOff + i2];
            superProto._update.call(this, iv, 0, out, outOff);
            for (var i2 = 0; i2 < this.blockSize; i2++)
              iv[i2] = out[outOff + i2];
          } else {
            superProto._update.call(this, inp, inOff, out, outOff);
            for (var i2 = 0; i2 < this.blockSize; i2++)
              out[outOff + i2] ^= iv[i2];
            for (var i2 = 0; i2 < this.blockSize; i2++)
              iv[i2] = inp[inOff + i2];
          }
        };
        return cbc$1;
      }
      var ede;
      var hasRequiredEde;
      function requireEde() {
        if (hasRequiredEde) return ede;
        hasRequiredEde = 1;
        var assert = requireMinimalisticAssert();
        var inherits = requireInherits_browser();
        var Cipher = requireCipher();
        var DES = requireDes$1();
        function EDEState(type2, key2) {
          assert.equal(key2.length, 24, "Invalid key length");
          var k1 = key2.slice(0, 8);
          var k2 = key2.slice(8, 16);
          var k3 = key2.slice(16, 24);
          if (type2 === "encrypt") {
            this.ciphers = [
              DES.create({ type: "encrypt", key: k1 }),
              DES.create({ type: "decrypt", key: k2 }),
              DES.create({ type: "encrypt", key: k3 })
            ];
          } else {
            this.ciphers = [
              DES.create({ type: "decrypt", key: k3 }),
              DES.create({ type: "encrypt", key: k2 }),
              DES.create({ type: "decrypt", key: k1 })
            ];
          }
        }
        function EDE(options) {
          Cipher.call(this, options);
          var state2 = new EDEState(this.type, this.options.key);
          this._edeState = state2;
        }
        inherits(EDE, Cipher);
        ede = EDE;
        EDE.create = function create(options) {
          return new EDE(options);
        };
        EDE.prototype._update = function _update(inp, inOff, out, outOff) {
          var state2 = this._edeState;
          state2.ciphers[0]._update(inp, inOff, out, outOff);
          state2.ciphers[1]._update(out, outOff, out, outOff);
          state2.ciphers[2]._update(out, outOff, out, outOff);
        };
        EDE.prototype._pad = DES.prototype._pad;
        EDE.prototype._unpad = DES.prototype._unpad;
        return ede;
      }
      var hasRequiredDes;
      function requireDes() {
        if (hasRequiredDes) return des$1;
        hasRequiredDes = 1;
        des$1.utils = requireUtils$3();
        des$1.Cipher = requireCipher();
        des$1.DES = requireDes$1();
        des$1.CBC = requireCbc$1();
        des$1.EDE = requireEde();
        return des$1;
      }
      var browserifyDes;
      var hasRequiredBrowserifyDes;
      function requireBrowserifyDes() {
        if (hasRequiredBrowserifyDes) return browserifyDes;
        hasRequiredBrowserifyDes = 1;
        var CipherBase = requireCipherBase();
        var des2 = requireDes();
        var inherits = requireInherits_browser();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var modes2 = {
          "des-ede3-cbc": des2.CBC.instantiate(des2.EDE),
          "des-ede3": des2.EDE,
          "des-ede-cbc": des2.CBC.instantiate(des2.EDE),
          "des-ede": des2.EDE,
          "des-cbc": des2.CBC.instantiate(des2.DES),
          "des-ecb": des2.DES
        };
        modes2.des = modes2["des-cbc"];
        modes2.des3 = modes2["des-ede3-cbc"];
        browserifyDes = DES;
        inherits(DES, CipherBase);
        function DES(opts) {
          CipherBase.call(this);
          var modeName = opts.mode.toLowerCase();
          var mode = modes2[modeName];
          var type2;
          if (opts.decrypt) {
            type2 = "decrypt";
          } else {
            type2 = "encrypt";
          }
          var key2 = opts.key;
          if (!Buffer2.isBuffer(key2)) {
            key2 = Buffer2.from(key2);
          }
          if (modeName === "des-ede" || modeName === "des-ede-cbc") {
            key2 = Buffer2.concat([key2, key2.slice(0, 8)]);
          }
          var iv = opts.iv;
          if (!Buffer2.isBuffer(iv)) {
            iv = Buffer2.from(iv);
          }
          this._des = mode.create({
            key: key2,
            iv,
            type: type2
          });
        }
        DES.prototype._update = function(data) {
          return Buffer2.from(this._des.update(data));
        };
        DES.prototype._final = function() {
          return Buffer2.from(this._des.final());
        };
        return browserifyDes;
      }
      var browser$7 = {};
      var encrypter = {};
      var ecb = {};
      var hasRequiredEcb;
      function requireEcb() {
        if (hasRequiredEcb) return ecb;
        hasRequiredEcb = 1;
        ecb.encrypt = function(self2, block) {
          return self2._cipher.encryptBlock(block);
        };
        ecb.decrypt = function(self2, block) {
          return self2._cipher.decryptBlock(block);
        };
        return ecb;
      }
      var cbc = {};
      var bufferXor;
      var hasRequiredBufferXor;
      function requireBufferXor() {
        if (hasRequiredBufferXor) return bufferXor;
        hasRequiredBufferXor = 1;
        bufferXor = function xor2(a, b) {
          var length = Math.min(a.length, b.length);
          var buffer2 = new Buffer(length);
          for (var i2 = 0; i2 < length; ++i2) {
            buffer2[i2] = a[i2] ^ b[i2];
          }
          return buffer2;
        };
        return bufferXor;
      }
      var hasRequiredCbc;
      function requireCbc() {
        if (hasRequiredCbc) return cbc;
        hasRequiredCbc = 1;
        var xor2 = requireBufferXor();
        cbc.encrypt = function(self2, block) {
          var data = xor2(block, self2._prev);
          self2._prev = self2._cipher.encryptBlock(data);
          return self2._prev;
        };
        cbc.decrypt = function(self2, block) {
          var pad = self2._prev;
          self2._prev = block;
          var out = self2._cipher.decryptBlock(block);
          return xor2(out, pad);
        };
        return cbc;
      }
      var cfb = {};
      var hasRequiredCfb;
      function requireCfb() {
        if (hasRequiredCfb) return cfb;
        hasRequiredCfb = 1;
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var xor2 = requireBufferXor();
        function encryptStart(self2, data, decrypt) {
          var len2 = data.length;
          var out = xor2(data, self2._cache);
          self2._cache = self2._cache.slice(len2);
          self2._prev = Buffer2.concat([self2._prev, decrypt ? data : out]);
          return out;
        }
        cfb.encrypt = function(self2, data, decrypt) {
          var out = Buffer2.allocUnsafe(0);
          var len2;
          while (data.length) {
            if (self2._cache.length === 0) {
              self2._cache = self2._cipher.encryptBlock(self2._prev);
              self2._prev = Buffer2.allocUnsafe(0);
            }
            if (self2._cache.length <= data.length) {
              len2 = self2._cache.length;
              out = Buffer2.concat([out, encryptStart(self2, data.slice(0, len2), decrypt)]);
              data = data.slice(len2);
            } else {
              out = Buffer2.concat([out, encryptStart(self2, data, decrypt)]);
              break;
            }
          }
          return out;
        };
        return cfb;
      }
      var cfb8 = {};
      var hasRequiredCfb8;
      function requireCfb8() {
        if (hasRequiredCfb8) return cfb8;
        hasRequiredCfb8 = 1;
        var Buffer2 = requireSafeBuffer$9().Buffer;
        function encryptByte(self2, byteParam, decrypt) {
          var pad = self2._cipher.encryptBlock(self2._prev);
          var out = pad[0] ^ byteParam;
          self2._prev = Buffer2.concat([
            self2._prev.slice(1),
            Buffer2.from([decrypt ? byteParam : out])
          ]);
          return out;
        }
        cfb8.encrypt = function(self2, chunk, decrypt) {
          var len2 = chunk.length;
          var out = Buffer2.allocUnsafe(len2);
          var i2 = -1;
          while (++i2 < len2) {
            out[i2] = encryptByte(self2, chunk[i2], decrypt);
          }
          return out;
        };
        return cfb8;
      }
      var cfb1 = {};
      var hasRequiredCfb1;
      function requireCfb1() {
        if (hasRequiredCfb1) return cfb1;
        hasRequiredCfb1 = 1;
        var Buffer2 = requireSafeBuffer$9().Buffer;
        function encryptByte(self2, byteParam, decrypt) {
          var pad;
          var i2 = -1;
          var len2 = 8;
          var out = 0;
          var bit, value;
          while (++i2 < len2) {
            pad = self2._cipher.encryptBlock(self2._prev);
            bit = byteParam & 1 << 7 - i2 ? 128 : 0;
            value = pad[0] ^ bit;
            out += (value & 128) >> i2 % 8;
            self2._prev = shiftIn(self2._prev, decrypt ? bit : value);
          }
          return out;
        }
        function shiftIn(buffer2, value) {
          var len2 = buffer2.length;
          var i2 = -1;
          var out = Buffer2.allocUnsafe(buffer2.length);
          buffer2 = Buffer2.concat([buffer2, Buffer2.from([value])]);
          while (++i2 < len2) {
            out[i2] = buffer2[i2] << 1 | buffer2[i2 + 1] >> 7;
          }
          return out;
        }
        cfb1.encrypt = function(self2, chunk, decrypt) {
          var len2 = chunk.length;
          var out = Buffer2.allocUnsafe(len2);
          var i2 = -1;
          while (++i2 < len2) {
            out[i2] = encryptByte(self2, chunk[i2], decrypt);
          }
          return out;
        };
        return cfb1;
      }
      var ofb = {};
      var hasRequiredOfb;
      function requireOfb() {
        if (hasRequiredOfb) return ofb;
        hasRequiredOfb = 1;
        var xor2 = requireBufferXor();
        function getBlock(self2) {
          self2._prev = self2._cipher.encryptBlock(self2._prev);
          return self2._prev;
        }
        ofb.encrypt = function(self2, chunk) {
          while (self2._cache.length < chunk.length) {
            self2._cache = Buffer.concat([self2._cache, getBlock(self2)]);
          }
          var pad = self2._cache.slice(0, chunk.length);
          self2._cache = self2._cache.slice(chunk.length);
          return xor2(chunk, pad);
        };
        return ofb;
      }
      var ctr = {};
      var incr32_1;
      var hasRequiredIncr32;
      function requireIncr32() {
        if (hasRequiredIncr32) return incr32_1;
        hasRequiredIncr32 = 1;
        function incr32(iv) {
          var len2 = iv.length;
          var item;
          while (len2--) {
            item = iv.readUInt8(len2);
            if (item === 255) {
              iv.writeUInt8(0, len2);
            } else {
              item++;
              iv.writeUInt8(item, len2);
              break;
            }
          }
        }
        incr32_1 = incr32;
        return incr32_1;
      }
      var hasRequiredCtr;
      function requireCtr() {
        if (hasRequiredCtr) return ctr;
        hasRequiredCtr = 1;
        var xor2 = requireBufferXor();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var incr32 = requireIncr32();
        function getBlock(self2) {
          var out = self2._cipher.encryptBlockRaw(self2._prev);
          incr32(self2._prev);
          return out;
        }
        var blockSize = 16;
        ctr.encrypt = function(self2, chunk) {
          var chunkNum = Math.ceil(chunk.length / blockSize);
          var start = self2._cache.length;
          self2._cache = Buffer2.concat([
            self2._cache,
            Buffer2.allocUnsafe(chunkNum * blockSize)
          ]);
          for (var i2 = 0; i2 < chunkNum; i2++) {
            var out = getBlock(self2);
            var offset = start + i2 * blockSize;
            self2._cache.writeUInt32BE(out[0], offset + 0);
            self2._cache.writeUInt32BE(out[1], offset + 4);
            self2._cache.writeUInt32BE(out[2], offset + 8);
            self2._cache.writeUInt32BE(out[3], offset + 12);
          }
          var pad = self2._cache.slice(0, chunk.length);
          self2._cache = self2._cache.slice(chunk.length);
          return xor2(chunk, pad);
        };
        return ctr;
      }
      const aes128 = { "cipher": "AES", "key": 128, "iv": 16, "mode": "CBC", "type": "block" };
      const aes192 = { "cipher": "AES", "key": 192, "iv": 16, "mode": "CBC", "type": "block" };
      const aes256 = { "cipher": "AES", "key": 256, "iv": 16, "mode": "CBC", "type": "block" };
      const require$$2 = {
        "aes-128-ecb": { "cipher": "AES", "key": 128, "iv": 0, "mode": "ECB", "type": "block" },
        "aes-192-ecb": { "cipher": "AES", "key": 192, "iv": 0, "mode": "ECB", "type": "block" },
        "aes-256-ecb": { "cipher": "AES", "key": 256, "iv": 0, "mode": "ECB", "type": "block" },
        "aes-128-cbc": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CBC", "type": "block" },
        "aes-192-cbc": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CBC", "type": "block" },
        "aes-256-cbc": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CBC", "type": "block" },
        aes128,
        aes192,
        aes256,
        "aes-128-cfb": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB", "type": "stream" },
        "aes-192-cfb": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB", "type": "stream" },
        "aes-256-cfb": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB", "type": "stream" },
        "aes-128-cfb8": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB8", "type": "stream" },
        "aes-192-cfb8": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB8", "type": "stream" },
        "aes-256-cfb8": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB8", "type": "stream" },
        "aes-128-cfb1": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB1", "type": "stream" },
        "aes-192-cfb1": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB1", "type": "stream" },
        "aes-256-cfb1": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB1", "type": "stream" },
        "aes-128-ofb": { "cipher": "AES", "key": 128, "iv": 16, "mode": "OFB", "type": "stream" },
        "aes-192-ofb": { "cipher": "AES", "key": 192, "iv": 16, "mode": "OFB", "type": "stream" },
        "aes-256-ofb": { "cipher": "AES", "key": 256, "iv": 16, "mode": "OFB", "type": "stream" },
        "aes-128-ctr": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CTR", "type": "stream" },
        "aes-192-ctr": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CTR", "type": "stream" },
        "aes-256-ctr": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CTR", "type": "stream" },
        "aes-128-gcm": { "cipher": "AES", "key": 128, "iv": 12, "mode": "GCM", "type": "auth" },
        "aes-192-gcm": { "cipher": "AES", "key": 192, "iv": 12, "mode": "GCM", "type": "auth" },
        "aes-256-gcm": { "cipher": "AES", "key": 256, "iv": 12, "mode": "GCM", "type": "auth" }
      };
      var modes_1;
      var hasRequiredModes$1;
      function requireModes$1() {
        if (hasRequiredModes$1) return modes_1;
        hasRequiredModes$1 = 1;
        var modeModules = {
          ECB: requireEcb(),
          CBC: requireCbc(),
          CFB: requireCfb(),
          CFB8: requireCfb8(),
          CFB1: requireCfb1(),
          OFB: requireOfb(),
          CTR: requireCtr(),
          GCM: requireCtr()
        };
        var modes2 = require$$2;
        for (var key2 in modes2) {
          modes2[key2].module = modeModules[modes2[key2].mode];
        }
        modes_1 = modes2;
        return modes_1;
      }
      var aes$2 = {};
      var hasRequiredAes$1;
      function requireAes$1() {
        if (hasRequiredAes$1) return aes$2;
        hasRequiredAes$1 = 1;
        var Buffer2 = requireSafeBuffer$9().Buffer;
        function asUInt32Array(buf) {
          if (!Buffer2.isBuffer(buf)) buf = Buffer2.from(buf);
          var len2 = buf.length / 4 | 0;
          var out = new Array(len2);
          for (var i2 = 0; i2 < len2; i2++) {
            out[i2] = buf.readUInt32BE(i2 * 4);
          }
          return out;
        }
        function scrubVec(v) {
          for (var i2 = 0; i2 < v.length; v++) {
            v[i2] = 0;
          }
        }
        function cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) {
          var SUB_MIX0 = SUB_MIX[0];
          var SUB_MIX1 = SUB_MIX[1];
          var SUB_MIX2 = SUB_MIX[2];
          var SUB_MIX3 = SUB_MIX[3];
          var s0 = M[0] ^ keySchedule[0];
          var s1 = M[1] ^ keySchedule[1];
          var s2 = M[2] ^ keySchedule[2];
          var s3 = M[3] ^ keySchedule[3];
          var t0, t1, t2, t3;
          var ksRow = 4;
          for (var round2 = 1; round2 < nRounds; round2++) {
            t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 255] ^ SUB_MIX2[s2 >>> 8 & 255] ^ SUB_MIX3[s3 & 255] ^ keySchedule[ksRow++];
            t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 255] ^ SUB_MIX2[s3 >>> 8 & 255] ^ SUB_MIX3[s0 & 255] ^ keySchedule[ksRow++];
            t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 255] ^ SUB_MIX2[s0 >>> 8 & 255] ^ SUB_MIX3[s1 & 255] ^ keySchedule[ksRow++];
            t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 255] ^ SUB_MIX2[s1 >>> 8 & 255] ^ SUB_MIX3[s2 & 255] ^ keySchedule[ksRow++];
            s0 = t0;
            s1 = t1;
            s2 = t2;
            s3 = t3;
          }
          t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 255] << 16 | SBOX[s2 >>> 8 & 255] << 8 | SBOX[s3 & 255]) ^ keySchedule[ksRow++];
          t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 255] << 16 | SBOX[s3 >>> 8 & 255] << 8 | SBOX[s0 & 255]) ^ keySchedule[ksRow++];
          t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 255] << 16 | SBOX[s0 >>> 8 & 255] << 8 | SBOX[s1 & 255]) ^ keySchedule[ksRow++];
          t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 255] << 16 | SBOX[s1 >>> 8 & 255] << 8 | SBOX[s2 & 255]) ^ keySchedule[ksRow++];
          t0 = t0 >>> 0;
          t1 = t1 >>> 0;
          t2 = t2 >>> 0;
          t3 = t3 >>> 0;
          return [t0, t1, t2, t3];
        }
        var RCON = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
        var G = (function() {
          var d = new Array(256);
          for (var j = 0; j < 256; j++) {
            if (j < 128) {
              d[j] = j << 1;
            } else {
              d[j] = j << 1 ^ 283;
            }
          }
          var SBOX = [];
          var INV_SBOX = [];
          var SUB_MIX = [[], [], [], []];
          var INV_SUB_MIX = [[], [], [], []];
          var x = 0;
          var xi = 0;
          for (var i2 = 0; i2 < 256; ++i2) {
            var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
            sx = sx >>> 8 ^ sx & 255 ^ 99;
            SBOX[x] = sx;
            INV_SBOX[sx] = x;
            var x2 = d[x];
            var x4 = d[x2];
            var x8 = d[x4];
            var t = d[sx] * 257 ^ sx * 16843008;
            SUB_MIX[0][x] = t << 24 | t >>> 8;
            SUB_MIX[1][x] = t << 16 | t >>> 16;
            SUB_MIX[2][x] = t << 8 | t >>> 24;
            SUB_MIX[3][x] = t;
            t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;
            INV_SUB_MIX[0][sx] = t << 24 | t >>> 8;
            INV_SUB_MIX[1][sx] = t << 16 | t >>> 16;
            INV_SUB_MIX[2][sx] = t << 8 | t >>> 24;
            INV_SUB_MIX[3][sx] = t;
            if (x === 0) {
              x = xi = 1;
            } else {
              x = x2 ^ d[d[d[x8 ^ x2]]];
              xi ^= d[d[xi]];
            }
          }
          return {
            SBOX,
            INV_SBOX,
            SUB_MIX,
            INV_SUB_MIX
          };
        })();
        function AES2(key2) {
          this._key = asUInt32Array(key2);
          this._reset();
        }
        AES2.blockSize = 4 * 4;
        AES2.keySize = 256 / 8;
        AES2.prototype.blockSize = AES2.blockSize;
        AES2.prototype.keySize = AES2.keySize;
        AES2.prototype._reset = function() {
          var keyWords = this._key;
          var keySize = keyWords.length;
          var nRounds = keySize + 6;
          var ksRows = (nRounds + 1) * 4;
          var keySchedule = [];
          for (var k = 0; k < keySize; k++) {
            keySchedule[k] = keyWords[k];
          }
          for (k = keySize; k < ksRows; k++) {
            var t = keySchedule[k - 1];
            if (k % keySize === 0) {
              t = t << 8 | t >>> 24;
              t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 255] << 16 | G.SBOX[t >>> 8 & 255] << 8 | G.SBOX[t & 255];
              t ^= RCON[k / keySize | 0] << 24;
            } else if (keySize > 6 && k % keySize === 4) {
              t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 255] << 16 | G.SBOX[t >>> 8 & 255] << 8 | G.SBOX[t & 255];
            }
            keySchedule[k] = keySchedule[k - keySize] ^ t;
          }
          var invKeySchedule = [];
          for (var ik = 0; ik < ksRows; ik++) {
            var ksR = ksRows - ik;
            var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)];
            if (ik < 4 || ksR <= 4) {
              invKeySchedule[ik] = tt;
            } else {
              invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 255]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 255]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 255]];
            }
          }
          this._nRounds = nRounds;
          this._keySchedule = keySchedule;
          this._invKeySchedule = invKeySchedule;
        };
        AES2.prototype.encryptBlockRaw = function(M) {
          M = asUInt32Array(M);
          return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds);
        };
        AES2.prototype.encryptBlock = function(M) {
          var out = this.encryptBlockRaw(M);
          var buf = Buffer2.allocUnsafe(16);
          buf.writeUInt32BE(out[0], 0);
          buf.writeUInt32BE(out[1], 4);
          buf.writeUInt32BE(out[2], 8);
          buf.writeUInt32BE(out[3], 12);
          return buf;
        };
        AES2.prototype.decryptBlock = function(M) {
          M = asUInt32Array(M);
          var m1 = M[1];
          M[1] = M[3];
          M[3] = m1;
          var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds);
          var buf = Buffer2.allocUnsafe(16);
          buf.writeUInt32BE(out[0], 0);
          buf.writeUInt32BE(out[3], 4);
          buf.writeUInt32BE(out[2], 8);
          buf.writeUInt32BE(out[1], 12);
          return buf;
        };
        AES2.prototype.scrub = function() {
          scrubVec(this._keySchedule);
          scrubVec(this._invKeySchedule);
          scrubVec(this._key);
        };
        aes$2.AES = AES2;
        return aes$2;
      }
      var ghash;
      var hasRequiredGhash;
      function requireGhash() {
        if (hasRequiredGhash) return ghash;
        hasRequiredGhash = 1;
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var ZEROES = Buffer2.alloc(16, 0);
        function toArray(buf) {
          return [
            buf.readUInt32BE(0),
            buf.readUInt32BE(4),
            buf.readUInt32BE(8),
            buf.readUInt32BE(12)
          ];
        }
        function fromArray(out) {
          var buf = Buffer2.allocUnsafe(16);
          buf.writeUInt32BE(out[0] >>> 0, 0);
          buf.writeUInt32BE(out[1] >>> 0, 4);
          buf.writeUInt32BE(out[2] >>> 0, 8);
          buf.writeUInt32BE(out[3] >>> 0, 12);
          return buf;
        }
        function GHASH(key2) {
          this.h = key2;
          this.state = Buffer2.alloc(16, 0);
          this.cache = Buffer2.allocUnsafe(0);
        }
        GHASH.prototype.ghash = function(block) {
          var i2 = -1;
          while (++i2 < block.length) {
            this.state[i2] ^= block[i2];
          }
          this._multiply();
        };
        GHASH.prototype._multiply = function() {
          var Vi = toArray(this.h);
          var Zi = [0, 0, 0, 0];
          var j, xi, lsbVi;
          var i2 = -1;
          while (++i2 < 128) {
            xi = (this.state[~~(i2 / 8)] & 1 << 7 - i2 % 8) !== 0;
            if (xi) {
              Zi[0] ^= Vi[0];
              Zi[1] ^= Vi[1];
              Zi[2] ^= Vi[2];
              Zi[3] ^= Vi[3];
            }
            lsbVi = (Vi[3] & 1) !== 0;
            for (j = 3; j > 0; j--) {
              Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31;
            }
            Vi[0] = Vi[0] >>> 1;
            if (lsbVi) {
              Vi[0] = Vi[0] ^ 225 << 24;
            }
          }
          this.state = fromArray(Zi);
        };
        GHASH.prototype.update = function(buf) {
          this.cache = Buffer2.concat([this.cache, buf]);
          var chunk;
          while (this.cache.length >= 16) {
            chunk = this.cache.slice(0, 16);
            this.cache = this.cache.slice(16);
            this.ghash(chunk);
          }
        };
        GHASH.prototype.final = function(abl, bl) {
          if (this.cache.length) {
            this.ghash(Buffer2.concat([this.cache, ZEROES], 16));
          }
          this.ghash(fromArray([0, abl, 0, bl]));
          return this.state;
        };
        ghash = GHASH;
        return ghash;
      }
      var authCipher;
      var hasRequiredAuthCipher;
      function requireAuthCipher() {
        if (hasRequiredAuthCipher) return authCipher;
        hasRequiredAuthCipher = 1;
        var aes2 = requireAes$1();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var Transform = requireCipherBase();
        var inherits = requireInherits_browser();
        var GHASH = requireGhash();
        var xor2 = requireBufferXor();
        var incr32 = requireIncr32();
        function xorTest(a, b) {
          var out = 0;
          if (a.length !== b.length) out++;
          var len2 = Math.min(a.length, b.length);
          for (var i2 = 0; i2 < len2; ++i2) {
            out += a[i2] ^ b[i2];
          }
          return out;
        }
        function calcIv(self2, iv, ck) {
          if (iv.length === 12) {
            self2._finID = Buffer2.concat([iv, Buffer2.from([0, 0, 0, 1])]);
            return Buffer2.concat([iv, Buffer2.from([0, 0, 0, 2])]);
          }
          var ghash2 = new GHASH(ck);
          var len2 = iv.length;
          var toPad = len2 % 16;
          ghash2.update(iv);
          if (toPad) {
            toPad = 16 - toPad;
            ghash2.update(Buffer2.alloc(toPad, 0));
          }
          ghash2.update(Buffer2.alloc(8, 0));
          var ivBits = len2 * 8;
          var tail = Buffer2.alloc(8);
          tail.writeUIntBE(ivBits, 0, 8);
          ghash2.update(tail);
          self2._finID = ghash2.state;
          var out = Buffer2.from(self2._finID);
          incr32(out);
          return out;
        }
        function StreamCipher(mode, key2, iv, decrypt) {
          Transform.call(this);
          var h = Buffer2.alloc(4, 0);
          this._cipher = new aes2.AES(key2);
          var ck = this._cipher.encryptBlock(h);
          this._ghash = new GHASH(ck);
          iv = calcIv(this, iv, ck);
          this._prev = Buffer2.from(iv);
          this._cache = Buffer2.allocUnsafe(0);
          this._secCache = Buffer2.allocUnsafe(0);
          this._decrypt = decrypt;
          this._alen = 0;
          this._len = 0;
          this._mode = mode;
          this._authTag = null;
          this._called = false;
        }
        inherits(StreamCipher, Transform);
        StreamCipher.prototype._update = function(chunk) {
          if (!this._called && this._alen) {
            var rump = 16 - this._alen % 16;
            if (rump < 16) {
              rump = Buffer2.alloc(rump, 0);
              this._ghash.update(rump);
            }
          }
          this._called = true;
          var out = this._mode.encrypt(this, chunk);
          if (this._decrypt) {
            this._ghash.update(chunk);
          } else {
            this._ghash.update(out);
          }
          this._len += chunk.length;
          return out;
        };
        StreamCipher.prototype._final = function() {
          if (this._decrypt && !this._authTag) throw new Error("Unsupported state or unable to authenticate data");
          var tag = xor2(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID));
          if (this._decrypt && xorTest(tag, this._authTag)) throw new Error("Unsupported state or unable to authenticate data");
          this._authTag = tag;
          this._cipher.scrub();
        };
        StreamCipher.prototype.getAuthTag = function getAuthTag() {
          if (this._decrypt || !Buffer2.isBuffer(this._authTag)) throw new Error("Attempting to get auth tag in unsupported state");
          return this._authTag;
        };
        StreamCipher.prototype.setAuthTag = function setAuthTag(tag) {
          if (!this._decrypt) throw new Error("Attempting to set auth tag in unsupported state");
          this._authTag = tag;
        };
        StreamCipher.prototype.setAAD = function setAAD(buf) {
          if (this._called) throw new Error("Attempting to set AAD in unsupported state");
          this._ghash.update(buf);
          this._alen += buf.length;
        };
        authCipher = StreamCipher;
        return authCipher;
      }
      var streamCipher;
      var hasRequiredStreamCipher;
      function requireStreamCipher() {
        if (hasRequiredStreamCipher) return streamCipher;
        hasRequiredStreamCipher = 1;
        var aes2 = requireAes$1();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var Transform = requireCipherBase();
        var inherits = requireInherits_browser();
        function StreamCipher(mode, key2, iv, decrypt) {
          Transform.call(this);
          this._cipher = new aes2.AES(key2);
          this._prev = Buffer2.from(iv);
          this._cache = Buffer2.allocUnsafe(0);
          this._secCache = Buffer2.allocUnsafe(0);
          this._decrypt = decrypt;
          this._mode = mode;
        }
        inherits(StreamCipher, Transform);
        StreamCipher.prototype._update = function(chunk) {
          return this._mode.encrypt(this, chunk, this._decrypt);
        };
        StreamCipher.prototype._final = function() {
          this._cipher.scrub();
        };
        streamCipher = StreamCipher;
        return streamCipher;
      }
      var evp_bytestokey;
      var hasRequiredEvp_bytestokey;
      function requireEvp_bytestokey() {
        if (hasRequiredEvp_bytestokey) return evp_bytestokey;
        hasRequiredEvp_bytestokey = 1;
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var MD5 = requireMd5_js();
        function EVP_BytesToKey(password, salt, keyBits, ivLen) {
          if (!Buffer2.isBuffer(password)) password = Buffer2.from(password, "binary");
          if (salt) {
            if (!Buffer2.isBuffer(salt)) salt = Buffer2.from(salt, "binary");
            if (salt.length !== 8) throw new RangeError("salt should be Buffer with 8 byte length");
          }
          var keyLen = keyBits / 8;
          var key2 = Buffer2.alloc(keyLen);
          var iv = Buffer2.alloc(ivLen || 0);
          var tmp = Buffer2.alloc(0);
          while (keyLen > 0 || ivLen > 0) {
            var hash2 = new MD5();
            hash2.update(tmp);
            hash2.update(password);
            if (salt) hash2.update(salt);
            tmp = hash2.digest();
            var used = 0;
            if (keyLen > 0) {
              var keyStart = key2.length - keyLen;
              used = Math.min(keyLen, tmp.length);
              tmp.copy(key2, keyStart, 0, used);
              keyLen -= used;
            }
            if (used < tmp.length && ivLen > 0) {
              var ivStart = iv.length - ivLen;
              var length = Math.min(ivLen, tmp.length - used);
              tmp.copy(iv, ivStart, used, used + length);
              ivLen -= length;
            }
          }
          tmp.fill(0);
          return { key: key2, iv };
        }
        evp_bytestokey = EVP_BytesToKey;
        return evp_bytestokey;
      }
      var hasRequiredEncrypter;
      function requireEncrypter() {
        if (hasRequiredEncrypter) return encrypter;
        hasRequiredEncrypter = 1;
        var MODES = requireModes$1();
        var AuthCipher = requireAuthCipher();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var StreamCipher = requireStreamCipher();
        var Transform = requireCipherBase();
        var aes2 = requireAes$1();
        var ebtk = requireEvp_bytestokey();
        var inherits = requireInherits_browser();
        function Cipher(mode, key2, iv) {
          Transform.call(this);
          this._cache = new Splitter();
          this._cipher = new aes2.AES(key2);
          this._prev = Buffer2.from(iv);
          this._mode = mode;
          this._autopadding = true;
        }
        inherits(Cipher, Transform);
        Cipher.prototype._update = function(data) {
          this._cache.add(data);
          var chunk;
          var thing;
          var out = [];
          while (chunk = this._cache.get()) {
            thing = this._mode.encrypt(this, chunk);
            out.push(thing);
          }
          return Buffer2.concat(out);
        };
        var PADDING = Buffer2.alloc(16, 16);
        Cipher.prototype._final = function() {
          var chunk = this._cache.flush();
          if (this._autopadding) {
            chunk = this._mode.encrypt(this, chunk);
            this._cipher.scrub();
            return chunk;
          }
          if (!chunk.equals(PADDING)) {
            this._cipher.scrub();
            throw new Error("data not multiple of block length");
          }
        };
        Cipher.prototype.setAutoPadding = function(setTo) {
          this._autopadding = !!setTo;
          return this;
        };
        function Splitter() {
          this.cache = Buffer2.allocUnsafe(0);
        }
        Splitter.prototype.add = function(data) {
          this.cache = Buffer2.concat([this.cache, data]);
        };
        Splitter.prototype.get = function() {
          if (this.cache.length > 15) {
            var out = this.cache.slice(0, 16);
            this.cache = this.cache.slice(16);
            return out;
          }
          return null;
        };
        Splitter.prototype.flush = function() {
          var len2 = 16 - this.cache.length;
          var padBuff = Buffer2.allocUnsafe(len2);
          var i2 = -1;
          while (++i2 < len2) {
            padBuff.writeUInt8(len2, i2);
          }
          return Buffer2.concat([this.cache, padBuff]);
        };
        function createCipheriv(suite, password, iv) {
          var config2 = MODES[suite.toLowerCase()];
          if (!config2) throw new TypeError("invalid suite type");
          if (typeof password === "string") password = Buffer2.from(password);
          if (password.length !== config2.key / 8) throw new TypeError("invalid key length " + password.length);
          if (typeof iv === "string") iv = Buffer2.from(iv);
          if (config2.mode !== "GCM" && iv.length !== config2.iv) throw new TypeError("invalid iv length " + iv.length);
          if (config2.type === "stream") {
            return new StreamCipher(config2.module, password, iv);
          } else if (config2.type === "auth") {
            return new AuthCipher(config2.module, password, iv);
          }
          return new Cipher(config2.module, password, iv);
        }
        function createCipher(suite, password) {
          var config2 = MODES[suite.toLowerCase()];
          if (!config2) throw new TypeError("invalid suite type");
          var keys2 = ebtk(password, false, config2.key, config2.iv);
          return createCipheriv(suite, keys2.key, keys2.iv);
        }
        encrypter.createCipheriv = createCipheriv;
        encrypter.createCipher = createCipher;
        return encrypter;
      }
      var decrypter = {};
      var hasRequiredDecrypter;
      function requireDecrypter() {
        if (hasRequiredDecrypter) return decrypter;
        hasRequiredDecrypter = 1;
        var AuthCipher = requireAuthCipher();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        var MODES = requireModes$1();
        var StreamCipher = requireStreamCipher();
        var Transform = requireCipherBase();
        var aes2 = requireAes$1();
        var ebtk = requireEvp_bytestokey();
        var inherits = requireInherits_browser();
        function Decipher(mode, key2, iv) {
          Transform.call(this);
          this._cache = new Splitter();
          this._last = void 0;
          this._cipher = new aes2.AES(key2);
          this._prev = Buffer2.from(iv);
          this._mode = mode;
          this._autopadding = true;
        }
        inherits(Decipher, Transform);
        Decipher.prototype._update = function(data) {
          this._cache.add(data);
          var chunk;
          var thing;
          var out = [];
          while (chunk = this._cache.get(this._autopadding)) {
            thing = this._mode.decrypt(this, chunk);
            out.push(thing);
          }
          return Buffer2.concat(out);
        };
        Decipher.prototype._final = function() {
          var chunk = this._cache.flush();
          if (this._autopadding) {
            return unpad(this._mode.decrypt(this, chunk));
          } else if (chunk) {
            throw new Error("data not multiple of block length");
          }
        };
        Decipher.prototype.setAutoPadding = function(setTo) {
          this._autopadding = !!setTo;
          return this;
        };
        function Splitter() {
          this.cache = Buffer2.allocUnsafe(0);
        }
        Splitter.prototype.add = function(data) {
          this.cache = Buffer2.concat([this.cache, data]);
        };
        Splitter.prototype.get = function(autoPadding) {
          var out;
          if (autoPadding) {
            if (this.cache.length > 16) {
              out = this.cache.slice(0, 16);
              this.cache = this.cache.slice(16);
              return out;
            }
          } else {
            if (this.cache.length >= 16) {
              out = this.cache.slice(0, 16);
              this.cache = this.cache.slice(16);
              return out;
            }
          }
          return null;
        };
        Splitter.prototype.flush = function() {
          if (this.cache.length) return this.cache;
        };
        function unpad(last) {
          var padded = last[15];
          if (padded < 1 || padded > 16) {
            throw new Error("unable to decrypt data");
          }
          var i2 = -1;
          while (++i2 < padded) {
            if (last[i2 + (16 - padded)] !== padded) {
              throw new Error("unable to decrypt data");
            }
          }
          if (padded === 16) return;
          return last.slice(0, 16 - padded);
        }
        function createDecipheriv(suite, password, iv) {
          var config2 = MODES[suite.toLowerCase()];
          if (!config2) throw new TypeError("invalid suite type");
          if (typeof iv === "string") iv = Buffer2.from(iv);
          if (config2.mode !== "GCM" && iv.length !== config2.iv) throw new TypeError("invalid iv length " + iv.length);
          if (typeof password === "string") password = Buffer2.from(password);
          if (password.length !== config2.key / 8) throw new TypeError("invalid key length " + password.length);
          if (config2.type === "stream") {
            return new StreamCipher(config2.module, password, iv, true);
          } else if (config2.type === "auth") {
            return new AuthCipher(config2.module, password, iv, true);
          }
          return new Decipher(config2.module, password, iv);
        }
        function createDecipher(suite, password) {
          var config2 = MODES[suite.toLowerCase()];
          if (!config2) throw new TypeError("invalid suite type");
          var keys2 = ebtk(password, false, config2.key, config2.iv);
          return createDecipheriv(suite, keys2.key, keys2.iv);
        }
        decrypter.createDecipher = createDecipher;
        decrypter.createDecipheriv = createDecipheriv;
        return decrypter;
      }
      var hasRequiredBrowser$7;
      function requireBrowser$7() {
        if (hasRequiredBrowser$7) return browser$7;
        hasRequiredBrowser$7 = 1;
        var ciphers = requireEncrypter();
        var deciphers = requireDecrypter();
        var modes2 = require$$2;
        function getCiphers() {
          return Object.keys(modes2);
        }
        browser$7.createCipher = browser$7.Cipher = ciphers.createCipher;
        browser$7.createCipheriv = browser$7.Cipheriv = ciphers.createCipheriv;
        browser$7.createDecipher = browser$7.Decipher = deciphers.createDecipher;
        browser$7.createDecipheriv = browser$7.Decipheriv = deciphers.createDecipheriv;
        browser$7.listCiphers = browser$7.getCiphers = getCiphers;
        return browser$7;
      }
      var modes = {};
      var hasRequiredModes;
      function requireModes() {
        if (hasRequiredModes) return modes;
        hasRequiredModes = 1;
        (function(exports$12) {
          exports$12["des-ecb"] = {
            key: 8,
            iv: 0
          };
          exports$12["des-cbc"] = exports$12.des = {
            key: 8,
            iv: 8
          };
          exports$12["des-ede3-cbc"] = exports$12.des3 = {
            key: 24,
            iv: 8
          };
          exports$12["des-ede3"] = {
            key: 24,
            iv: 0
          };
          exports$12["des-ede-cbc"] = {
            key: 16,
            iv: 8
          };
          exports$12["des-ede"] = {
            key: 16,
            iv: 0
          };
        })(modes);
        return modes;
      }
      var hasRequiredBrowser$6;
      function requireBrowser$6() {
        if (hasRequiredBrowser$6) return browser$8;
        hasRequiredBrowser$6 = 1;
        var DES = requireBrowserifyDes();
        var aes2 = requireBrowser$7();
        var aesModes = requireModes$1();
        var desModes = requireModes();
        var ebtk = requireEvp_bytestokey();
        function createCipher(suite, password) {
          suite = suite.toLowerCase();
          var keyLen, ivLen;
          if (aesModes[suite]) {
            keyLen = aesModes[suite].key;
            ivLen = aesModes[suite].iv;
          } else if (desModes[suite]) {
            keyLen = desModes[suite].key * 8;
            ivLen = desModes[suite].iv;
          } else {
            throw new TypeError("invalid suite type");
          }
          var keys2 = ebtk(password, false, keyLen, ivLen);
          return createCipheriv(suite, keys2.key, keys2.iv);
        }
        function createDecipher(suite, password) {
          suite = suite.toLowerCase();
          var keyLen, ivLen;
          if (aesModes[suite]) {
            keyLen = aesModes[suite].key;
            ivLen = aesModes[suite].iv;
          } else if (desModes[suite]) {
            keyLen = desModes[suite].key * 8;
            ivLen = desModes[suite].iv;
          } else {
            throw new TypeError("invalid suite type");
          }
          var keys2 = ebtk(password, false, keyLen, ivLen);
          return createDecipheriv(suite, keys2.key, keys2.iv);
        }
        function createCipheriv(suite, key2, iv) {
          suite = suite.toLowerCase();
          if (aesModes[suite]) return aes2.createCipheriv(suite, key2, iv);
          if (desModes[suite]) return new DES({ key: key2, iv, mode: suite });
          throw new TypeError("invalid suite type");
        }
        function createDecipheriv(suite, key2, iv) {
          suite = suite.toLowerCase();
          if (aesModes[suite]) return aes2.createDecipheriv(suite, key2, iv);
          if (desModes[suite]) return new DES({ key: key2, iv, mode: suite, decrypt: true });
          throw new TypeError("invalid suite type");
        }
        function getCiphers() {
          return Object.keys(desModes).concat(aes2.getCiphers());
        }
        browser$8.createCipher = browser$8.Cipher = createCipher;
        browser$8.createCipheriv = browser$8.Cipheriv = createCipheriv;
        browser$8.createDecipher = browser$8.Decipher = createDecipher;
        browser$8.createDecipheriv = browser$8.Decipheriv = createDecipheriv;
        browser$8.listCiphers = browser$8.getCiphers = getCiphers;
        return browser$8;
      }
      var browser$6 = {};
      var bn$d = { exports: {} };
      var bn$c = bn$d.exports;
      var hasRequiredBn$6;
      function requireBn$6() {
        if (hasRequiredBn$6) return bn$d.exports;
        hasRequiredBn$6 = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this.strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                return c - 48 & 15;
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this.strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  r += c - 49 + 10;
                } else if (c >= 17) {
                  r += c - 17 + 10;
                } else {
                  r += c;
                }
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this.strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype.strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            BN.prototype.inspect = function inspect() {
              return (this.red ? "";
            };
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16);
            };
            BN.prototype.toBuffer = function toBuffer2(endian, length) {
              assert(typeof Buffer2 !== "undefined");
              return this.toArrayLike(Buffer2, endian, length);
            };
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              this.strip();
              var littleEndian = endian === "le";
              var res = new ArrayType(reqLength);
              var b, i2;
              var q = this.clone();
              if (!littleEndian) {
                for (i2 = 0; i2 < reqLength - byteLength2; i2++) {
                  res[i2] = 0;
                }
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[reqLength - i2 - 1] = b;
                }
              } else {
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[i2] = b;
                }
                for (; i2 < reqLength; i2++) {
                  res[i2] = 0;
                }
              }
              return res;
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this.strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this.strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this.strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this.strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this.strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this.strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out.strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out.strip();
            }
            function jumboMulTo(self2, num, out) {
              var fftm = new FFTM();
              return fftm.mulp(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            function FFTM(x, y) {
              this.x = x;
              this.y = y;
            }
            FFTM.prototype.makeRBT = function makeRBT(N) {
              var t = new Array(N);
              var l = BN.prototype._countBits(N) - 1;
              for (var i2 = 0; i2 < N; i2++) {
                t[i2] = this.revBin(i2, l, N);
              }
              return t;
            };
            FFTM.prototype.revBin = function revBin(x, l, N) {
              if (x === 0 || x === N - 1) return x;
              var rb = 0;
              for (var i2 = 0; i2 < l; i2++) {
                rb |= (x & 1) << l - i2 - 1;
                x >>= 1;
              }
              return rb;
            };
            FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
              for (var i2 = 0; i2 < N; i2++) {
                rtws[i2] = rws[rbt[i2]];
                itws[i2] = iws[rbt[i2]];
              }
            };
            FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
              this.permute(rbt, rws, iws, rtws, itws, N);
              for (var s = 1; s < N; s <<= 1) {
                var l = s << 1;
                var rtwdf = Math.cos(2 * Math.PI / l);
                var itwdf = Math.sin(2 * Math.PI / l);
                for (var p = 0; p < N; p += l) {
                  var rtwdf_ = rtwdf;
                  var itwdf_ = itwdf;
                  for (var j = 0; j < s; j++) {
                    var re = rtws[p + j];
                    var ie = itws[p + j];
                    var ro = rtws[p + j + s];
                    var io = itws[p + j + s];
                    var rx = rtwdf_ * ro - itwdf_ * io;
                    io = rtwdf_ * io + itwdf_ * ro;
                    ro = rx;
                    rtws[p + j] = re + ro;
                    itws[p + j] = ie + io;
                    rtws[p + j + s] = re - ro;
                    itws[p + j + s] = ie - io;
                    if (j !== l) {
                      rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                      itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                      rtwdf_ = rx;
                    }
                  }
                }
              }
            };
            FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
              var N = Math.max(m, n) | 1;
              var odd = N & 1;
              var i2 = 0;
              for (N = N / 2 | 0; N; N = N >>> 1) {
                i2++;
              }
              return 1 << i2 + 1 + odd;
            };
            FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
              if (N <= 1) return;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var t = rws[i2];
                rws[i2] = rws[N - i2 - 1];
                rws[N - i2 - 1] = t;
                t = iws[i2];
                iws[i2] = -iws[N - i2 - 1];
                iws[N - i2 - 1] = -t;
              }
            };
            FFTM.prototype.normalize13b = function normalize13b(ws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var w = Math.round(ws[2 * i2 + 1] / N) * 8192 + Math.round(ws[2 * i2] / N) + carry;
                ws[i2] = w & 67108863;
                if (w < 67108864) {
                  carry = 0;
                } else {
                  carry = w / 67108864 | 0;
                }
              }
              return ws;
            };
            FFTM.prototype.convert13b = function convert13b(ws, len2, rws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < len2; i2++) {
                carry = carry + (ws[i2] | 0);
                rws[2 * i2] = carry & 8191;
                carry = carry >>> 13;
                rws[2 * i2 + 1] = carry & 8191;
                carry = carry >>> 13;
              }
              for (i2 = 2 * len2; i2 < N; ++i2) {
                rws[i2] = 0;
              }
              assert(carry === 0);
              assert((carry & -8192) === 0);
            };
            FFTM.prototype.stub = function stub(N) {
              var ph = new Array(N);
              for (var i2 = 0; i2 < N; i2++) {
                ph[i2] = 0;
              }
              return ph;
            };
            FFTM.prototype.mulp = function mulp(x, y, out) {
              var N = 2 * this.guessLen13b(x.length, y.length);
              var rbt = this.makeRBT(N);
              var _ = this.stub(N);
              var rws = new Array(N);
              var rwst = new Array(N);
              var iwst = new Array(N);
              var nrws = new Array(N);
              var nrwst = new Array(N);
              var niwst = new Array(N);
              var rmws = out.words;
              rmws.length = N;
              this.convert13b(x.words, x.length, rws, N);
              this.convert13b(y.words, y.length, nrws, N);
              this.transform(rws, _, rwst, iwst, N, rbt);
              this.transform(nrws, _, nrwst, niwst, N, rbt);
              for (var i2 = 0; i2 < N; i2++) {
                var rx = rwst[i2] * nrwst[i2] - iwst[i2] * niwst[i2];
                iwst[i2] = rwst[i2] * niwst[i2] + iwst[i2] * nrwst[i2];
                rwst[i2] = rx;
              }
              this.conjugate(rwst, iwst, N);
              this.transform(rwst, iwst, rmws, _, N, rbt);
              this.conjugate(rmws, _, N);
              this.normalize13b(rmws, N);
              out.negative = x.negative ^ y.negative;
              out.length = x.length + y.length;
              return out.strip();
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this.strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this.strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this.strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) < num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this.strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this.strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this.strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q.strip();
              }
              a.strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modn = function modn(num) {
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return acc;
            };
            BN.prototype.idivn = function idivn(num) {
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              return this.strip();
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this.strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              return a.umod(this.m)._forceRed(this);
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn$c);
        })(bn$d);
        return bn$d.exports;
      }
      var bn$b = { exports: {} };
      var bn$a = bn$b.exports;
      var hasRequiredBn$5;
      function requireBn$5() {
        if (hasRequiredBn$5) return bn$b.exports;
        hasRequiredBn$5 = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this.strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                return c - 48 & 15;
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this.strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  r += c - 49 + 10;
                } else if (c >= 17) {
                  r += c - 17 + 10;
                } else {
                  r += c;
                }
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this.strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype.strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            BN.prototype.inspect = function inspect() {
              return (this.red ? "";
            };
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16);
            };
            BN.prototype.toBuffer = function toBuffer2(endian, length) {
              assert(typeof Buffer2 !== "undefined");
              return this.toArrayLike(Buffer2, endian, length);
            };
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              this.strip();
              var littleEndian = endian === "le";
              var res = new ArrayType(reqLength);
              var b, i2;
              var q = this.clone();
              if (!littleEndian) {
                for (i2 = 0; i2 < reqLength - byteLength2; i2++) {
                  res[i2] = 0;
                }
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[reqLength - i2 - 1] = b;
                }
              } else {
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[i2] = b;
                }
                for (; i2 < reqLength; i2++) {
                  res[i2] = 0;
                }
              }
              return res;
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this.strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this.strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this.strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this.strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this.strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this.strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out.strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out.strip();
            }
            function jumboMulTo(self2, num, out) {
              var fftm = new FFTM();
              return fftm.mulp(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            function FFTM(x, y) {
              this.x = x;
              this.y = y;
            }
            FFTM.prototype.makeRBT = function makeRBT(N) {
              var t = new Array(N);
              var l = BN.prototype._countBits(N) - 1;
              for (var i2 = 0; i2 < N; i2++) {
                t[i2] = this.revBin(i2, l, N);
              }
              return t;
            };
            FFTM.prototype.revBin = function revBin(x, l, N) {
              if (x === 0 || x === N - 1) return x;
              var rb = 0;
              for (var i2 = 0; i2 < l; i2++) {
                rb |= (x & 1) << l - i2 - 1;
                x >>= 1;
              }
              return rb;
            };
            FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
              for (var i2 = 0; i2 < N; i2++) {
                rtws[i2] = rws[rbt[i2]];
                itws[i2] = iws[rbt[i2]];
              }
            };
            FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
              this.permute(rbt, rws, iws, rtws, itws, N);
              for (var s = 1; s < N; s <<= 1) {
                var l = s << 1;
                var rtwdf = Math.cos(2 * Math.PI / l);
                var itwdf = Math.sin(2 * Math.PI / l);
                for (var p = 0; p < N; p += l) {
                  var rtwdf_ = rtwdf;
                  var itwdf_ = itwdf;
                  for (var j = 0; j < s; j++) {
                    var re = rtws[p + j];
                    var ie = itws[p + j];
                    var ro = rtws[p + j + s];
                    var io = itws[p + j + s];
                    var rx = rtwdf_ * ro - itwdf_ * io;
                    io = rtwdf_ * io + itwdf_ * ro;
                    ro = rx;
                    rtws[p + j] = re + ro;
                    itws[p + j] = ie + io;
                    rtws[p + j + s] = re - ro;
                    itws[p + j + s] = ie - io;
                    if (j !== l) {
                      rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                      itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                      rtwdf_ = rx;
                    }
                  }
                }
              }
            };
            FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
              var N = Math.max(m, n) | 1;
              var odd = N & 1;
              var i2 = 0;
              for (N = N / 2 | 0; N; N = N >>> 1) {
                i2++;
              }
              return 1 << i2 + 1 + odd;
            };
            FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
              if (N <= 1) return;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var t = rws[i2];
                rws[i2] = rws[N - i2 - 1];
                rws[N - i2 - 1] = t;
                t = iws[i2];
                iws[i2] = -iws[N - i2 - 1];
                iws[N - i2 - 1] = -t;
              }
            };
            FFTM.prototype.normalize13b = function normalize13b(ws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var w = Math.round(ws[2 * i2 + 1] / N) * 8192 + Math.round(ws[2 * i2] / N) + carry;
                ws[i2] = w & 67108863;
                if (w < 67108864) {
                  carry = 0;
                } else {
                  carry = w / 67108864 | 0;
                }
              }
              return ws;
            };
            FFTM.prototype.convert13b = function convert13b(ws, len2, rws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < len2; i2++) {
                carry = carry + (ws[i2] | 0);
                rws[2 * i2] = carry & 8191;
                carry = carry >>> 13;
                rws[2 * i2 + 1] = carry & 8191;
                carry = carry >>> 13;
              }
              for (i2 = 2 * len2; i2 < N; ++i2) {
                rws[i2] = 0;
              }
              assert(carry === 0);
              assert((carry & -8192) === 0);
            };
            FFTM.prototype.stub = function stub(N) {
              var ph = new Array(N);
              for (var i2 = 0; i2 < N; i2++) {
                ph[i2] = 0;
              }
              return ph;
            };
            FFTM.prototype.mulp = function mulp(x, y, out) {
              var N = 2 * this.guessLen13b(x.length, y.length);
              var rbt = this.makeRBT(N);
              var _ = this.stub(N);
              var rws = new Array(N);
              var rwst = new Array(N);
              var iwst = new Array(N);
              var nrws = new Array(N);
              var nrwst = new Array(N);
              var niwst = new Array(N);
              var rmws = out.words;
              rmws.length = N;
              this.convert13b(x.words, x.length, rws, N);
              this.convert13b(y.words, y.length, nrws, N);
              this.transform(rws, _, rwst, iwst, N, rbt);
              this.transform(nrws, _, nrwst, niwst, N, rbt);
              for (var i2 = 0; i2 < N; i2++) {
                var rx = rwst[i2] * nrwst[i2] - iwst[i2] * niwst[i2];
                iwst[i2] = rwst[i2] * niwst[i2] + iwst[i2] * nrwst[i2];
                rwst[i2] = rx;
              }
              this.conjugate(rwst, iwst, N);
              this.transform(rwst, iwst, rmws, _, N, rbt);
              this.conjugate(rmws, _, N);
              this.normalize13b(rmws, N);
              out.negative = x.negative ^ y.negative;
              out.length = x.length + y.length;
              return out.strip();
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this.strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this.strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this.strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) < num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this.strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this.strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this.strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q.strip();
              }
              a.strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modn = function modn(num) {
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return acc;
            };
            BN.prototype.idivn = function idivn(num) {
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              return this.strip();
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this.strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              return a.umod(this.m)._forceRed(this);
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn$a);
        })(bn$b);
        return bn$b.exports;
      }
      var brorand = { exports: {} };
      var hasRequiredBrorand;
      function requireBrorand() {
        if (hasRequiredBrorand) return brorand.exports;
        hasRequiredBrorand = 1;
        var r;
        brorand.exports = function rand(len2) {
          if (!r)
            r = new Rand(null);
          return r.generate(len2);
        };
        function Rand(rand) {
          this.rand = rand;
        }
        brorand.exports.Rand = Rand;
        Rand.prototype.generate = function generate(len2) {
          return this._rand(len2);
        };
        Rand.prototype._rand = function _rand(n) {
          if (this.rand.getBytes)
            return this.rand.getBytes(n);
          var res = new Uint8Array(n);
          for (var i2 = 0; i2 < res.length; i2++)
            res[i2] = this.rand.getByte();
          return res;
        };
        if (typeof self === "object") {
          if (self.crypto && self.crypto.getRandomValues) {
            Rand.prototype._rand = function _rand(n) {
              var arr = new Uint8Array(n);
              self.crypto.getRandomValues(arr);
              return arr;
            };
          } else if (self.msCrypto && self.msCrypto.getRandomValues) {
            Rand.prototype._rand = function _rand(n) {
              var arr = new Uint8Array(n);
              self.msCrypto.getRandomValues(arr);
              return arr;
            };
          } else if (typeof window === "object") {
            Rand.prototype._rand = function() {
              throw new Error("Not implemented yet");
            };
          }
        } else {
          try {
            var crypto = requireCryptoBrowserify();
            if (typeof crypto.randomBytes !== "function")
              throw new Error("Not supported");
            Rand.prototype._rand = function _rand(n) {
              return crypto.randomBytes(n);
            };
          } catch (e) {
          }
        }
        return brorand.exports;
      }
      var mr;
      var hasRequiredMr;
      function requireMr() {
        if (hasRequiredMr) return mr;
        hasRequiredMr = 1;
        var bn2 = requireBn$5();
        var brorand2 = requireBrorand();
        function MillerRabin(rand) {
          this.rand = rand || new brorand2.Rand();
        }
        mr = MillerRabin;
        MillerRabin.create = function create(rand) {
          return new MillerRabin(rand);
        };
        MillerRabin.prototype._randbelow = function _randbelow(n) {
          var len2 = n.bitLength();
          var min_bytes = Math.ceil(len2 / 8);
          do
            var a = new bn2(this.rand.generate(min_bytes));
          while (a.cmp(n) >= 0);
          return a;
        };
        MillerRabin.prototype._randrange = function _randrange(start, stop) {
          var size = stop.sub(start);
          return start.add(this._randbelow(size));
        };
        MillerRabin.prototype.test = function test(n, k, cb) {
          var len2 = n.bitLength();
          var red = bn2.mont(n);
          var rone = new bn2(1).toRed(red);
          if (!k)
            k = Math.max(1, len2 / 48 | 0);
          var n1 = n.subn(1);
          for (var s = 0; !n1.testn(s); s++) {
          }
          var d = n.shrn(s);
          var rn1 = n1.toRed(red);
          var prime = true;
          for (; k > 0; k--) {
            var a = this._randrange(new bn2(2), n1);
            if (cb)
              cb(a);
            var x = a.toRed(red).redPow(d);
            if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
              continue;
            for (var i2 = 1; i2 < s; i2++) {
              x = x.redSqr();
              if (x.cmp(rone) === 0)
                return false;
              if (x.cmp(rn1) === 0)
                break;
            }
            if (i2 === s)
              return false;
          }
          return prime;
        };
        MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
          var len2 = n.bitLength();
          var red = bn2.mont(n);
          var rone = new bn2(1).toRed(red);
          if (!k)
            k = Math.max(1, len2 / 48 | 0);
          var n1 = n.subn(1);
          for (var s = 0; !n1.testn(s); s++) {
          }
          var d = n.shrn(s);
          var rn1 = n1.toRed(red);
          for (; k > 0; k--) {
            var a = this._randrange(new bn2(2), n1);
            var g = n.gcd(a);
            if (g.cmpn(1) !== 0)
              return g;
            var x = a.toRed(red).redPow(d);
            if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
              continue;
            for (var i2 = 1; i2 < s; i2++) {
              x = x.redSqr();
              if (x.cmp(rone) === 0)
                return x.fromRed().subn(1).gcd(n);
              if (x.cmp(rn1) === 0)
                break;
            }
            if (i2 === s) {
              x = x.redSqr();
              return x.fromRed().subn(1).gcd(n);
            }
          }
          return false;
        };
        return mr;
      }
      var generatePrime;
      var hasRequiredGeneratePrime;
      function requireGeneratePrime() {
        if (hasRequiredGeneratePrime) return generatePrime;
        hasRequiredGeneratePrime = 1;
        var randomBytes = requireBrowser$b();
        generatePrime = findPrime;
        findPrime.simpleSieve = simpleSieve;
        findPrime.fermatTest = fermatTest;
        var BN = requireBn$6();
        var TWENTYFOUR = new BN(24);
        var MillerRabin = requireMr();
        var millerRabin = new MillerRabin();
        var ONE = new BN(1);
        var TWO = new BN(2);
        var FIVE = new BN(5);
        new BN(16);
        new BN(8);
        var TEN = new BN(10);
        var THREE = new BN(3);
        new BN(7);
        var ELEVEN = new BN(11);
        var FOUR = new BN(4);
        new BN(12);
        var primes = null;
        function _getPrimes() {
          if (primes !== null)
            return primes;
          var limit = 1048576;
          var res = [];
          res[0] = 2;
          for (var i2 = 1, k = 3; k < limit; k += 2) {
            var sqrt = Math.ceil(Math.sqrt(k));
            for (var j = 0; j < i2 && res[j] <= sqrt; j++)
              if (k % res[j] === 0)
                break;
            if (i2 !== j && res[j] <= sqrt)
              continue;
            res[i2++] = k;
          }
          primes = res;
          return res;
        }
        function simpleSieve(p) {
          var primes2 = _getPrimes();
          for (var i2 = 0; i2 < primes2.length; i2++)
            if (p.modn(primes2[i2]) === 0) {
              if (p.cmpn(primes2[i2]) === 0) {
                return true;
              } else {
                return false;
              }
            }
          return true;
        }
        function fermatTest(p) {
          var red = BN.mont(p);
          return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
        }
        function findPrime(bits, gen) {
          if (bits < 16) {
            if (gen === 2 || gen === 5) {
              return new BN([140, 123]);
            } else {
              return new BN([140, 39]);
            }
          }
          gen = new BN(gen);
          var num, n2;
          while (true) {
            num = new BN(randomBytes(Math.ceil(bits / 8)));
            while (num.bitLength() > bits) {
              num.ishrn(1);
            }
            if (num.isEven()) {
              num.iadd(ONE);
            }
            if (!num.testn(1)) {
              num.iadd(TWO);
            }
            if (!gen.cmp(TWO)) {
              while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
                num.iadd(FOUR);
              }
            } else if (!gen.cmp(FIVE)) {
              while (num.mod(TEN).cmp(THREE)) {
                num.iadd(FOUR);
              }
            }
            n2 = num.shrn(1);
            if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) {
              return num;
            }
          }
        }
        return generatePrime;
      }
      const modp1 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" };
      const modp2 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" };
      const modp5 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" };
      const modp14 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" };
      const modp15 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" };
      const modp16 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" };
      const modp17 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" };
      const modp18 = { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" };
      const require$$1$1 = {
        modp1,
        modp2,
        modp5,
        modp14,
        modp15,
        modp16,
        modp17,
        modp18
      };
      var dh;
      var hasRequiredDh;
      function requireDh() {
        if (hasRequiredDh) return dh;
        hasRequiredDh = 1;
        var BN = requireBn$6();
        var MillerRabin = requireMr();
        var millerRabin = new MillerRabin();
        var TWENTYFOUR = new BN(24);
        var ELEVEN = new BN(11);
        var TEN = new BN(10);
        var THREE = new BN(3);
        var SEVEN = new BN(7);
        var primes = requireGeneratePrime();
        var randomBytes = requireBrowser$b();
        dh = DH;
        function setPublicKey(pub, enc) {
          enc = enc || "utf8";
          if (!Buffer.isBuffer(pub)) {
            pub = new Buffer(pub, enc);
          }
          this._pub = new BN(pub);
          return this;
        }
        function setPrivateKey(priv, enc) {
          enc = enc || "utf8";
          if (!Buffer.isBuffer(priv)) {
            priv = new Buffer(priv, enc);
          }
          this._priv = new BN(priv);
          return this;
        }
        var primeCache = {};
        function checkPrime(prime, generator) {
          var gen = generator.toString("hex");
          var hex = [gen, prime.toString(16)].join("_");
          if (hex in primeCache) {
            return primeCache[hex];
          }
          var error = 0;
          if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) {
            error += 1;
            if (gen === "02" || gen === "05") {
              error += 8;
            } else {
              error += 4;
            }
            primeCache[hex] = error;
            return error;
          }
          if (!millerRabin.test(prime.shrn(1))) {
            error += 2;
          }
          var rem;
          switch (gen) {
            case "02":
              if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
                error += 8;
              }
              break;
            case "05":
              rem = prime.mod(TEN);
              if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
                error += 8;
              }
              break;
            default:
              error += 4;
          }
          primeCache[hex] = error;
          return error;
        }
        function DH(prime, generator, malleable) {
          this.setGenerator(generator);
          this.__prime = new BN(prime);
          this._prime = BN.mont(this.__prime);
          this._primeLen = prime.length;
          this._pub = void 0;
          this._priv = void 0;
          this._primeCode = void 0;
          if (malleable) {
            this.setPublicKey = setPublicKey;
            this.setPrivateKey = setPrivateKey;
          } else {
            this._primeCode = 8;
          }
        }
        Object.defineProperty(DH.prototype, "verifyError", {
          enumerable: true,
          get: function() {
            if (typeof this._primeCode !== "number") {
              this._primeCode = checkPrime(this.__prime, this.__gen);
            }
            return this._primeCode;
          }
        });
        DH.prototype.generateKeys = function() {
          if (!this._priv) {
            this._priv = new BN(randomBytes(this._primeLen));
          }
          this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
          return this.getPublicKey();
        };
        DH.prototype.computeSecret = function(other) {
          other = new BN(other);
          other = other.toRed(this._prime);
          var secret = other.redPow(this._priv).fromRed();
          var out = new Buffer(secret.toArray());
          var prime = this.getPrime();
          if (out.length < prime.length) {
            var front = new Buffer(prime.length - out.length);
            front.fill(0);
            out = Buffer.concat([front, out]);
          }
          return out;
        };
        DH.prototype.getPublicKey = function getPublicKey(enc) {
          return formatReturnValue(this._pub, enc);
        };
        DH.prototype.getPrivateKey = function getPrivateKey(enc) {
          return formatReturnValue(this._priv, enc);
        };
        DH.prototype.getPrime = function(enc) {
          return formatReturnValue(this.__prime, enc);
        };
        DH.prototype.getGenerator = function(enc) {
          return formatReturnValue(this._gen, enc);
        };
        DH.prototype.setGenerator = function(gen, enc) {
          enc = enc || "utf8";
          if (!Buffer.isBuffer(gen)) {
            gen = new Buffer(gen, enc);
          }
          this.__gen = gen;
          this._gen = new BN(gen);
          return this;
        };
        function formatReturnValue(bn2, enc) {
          var buf = new Buffer(bn2.toArray());
          if (!enc) {
            return buf;
          } else {
            return buf.toString(enc);
          }
        }
        return dh;
      }
      var hasRequiredBrowser$5;
      function requireBrowser$5() {
        if (hasRequiredBrowser$5) return browser$6;
        hasRequiredBrowser$5 = 1;
        var generatePrime2 = requireGeneratePrime();
        var primes = require$$1$1;
        var DH = requireDh();
        function getDiffieHellman(mod) {
          var prime = new Buffer(primes[mod].prime, "hex");
          var gen = new Buffer(primes[mod].gen, "hex");
          return new DH(prime, gen);
        }
        var ENCODINGS = {
          "binary": true,
          "hex": true,
          "base64": true
        };
        function createDiffieHellman(prime, enc, generator, genc) {
          if (Buffer.isBuffer(enc) || ENCODINGS[enc] === void 0) {
            return createDiffieHellman(prime, "binary", enc, generator);
          }
          enc = enc || "binary";
          genc = genc || "binary";
          generator = generator || new Buffer([2]);
          if (!Buffer.isBuffer(generator)) {
            generator = new Buffer(generator, genc);
          }
          if (typeof prime === "number") {
            return new DH(generatePrime2(prime, generator), generator, true);
          }
          if (!Buffer.isBuffer(prime)) {
            prime = new Buffer(prime, enc);
          }
          return new DH(prime, generator, true);
        }
        browser$6.DiffieHellmanGroup = browser$6.createDiffieHellmanGroup = browser$6.getDiffieHellman = getDiffieHellman;
        browser$6.createDiffieHellman = browser$6.DiffieHellman = createDiffieHellman;
        return browser$6;
      }
      var safeBuffer$3 = { exports: {} };
      var hasRequiredSafeBuffer$3;
      function requireSafeBuffer$3() {
        if (hasRequiredSafeBuffer$3) return safeBuffer$3.exports;
        hasRequiredSafeBuffer$3 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$3, safeBuffer$3.exports);
        return safeBuffer$3.exports;
      }
      var readableBrowser = { exports: {} };
      var processNextickArgs = { exports: {} };
      var hasRequiredProcessNextickArgs;
      function requireProcessNextickArgs() {
        if (hasRequiredProcessNextickArgs) return processNextickArgs.exports;
        hasRequiredProcessNextickArgs = 1;
        if (typeof process$1 === "undefined" || !process$1.version || process$1.version.indexOf("v0.") === 0 || process$1.version.indexOf("v1.") === 0 && process$1.version.indexOf("v1.8.") !== 0) {
          processNextickArgs.exports = { nextTick };
        } else {
          processNextickArgs.exports = process$1;
        }
        function nextTick(fn, arg1, arg2, arg3) {
          if (typeof fn !== "function") {
            throw new TypeError('"callback" argument must be a function');
          }
          var len2 = arguments.length;
          var args, i2;
          switch (len2) {
            case 0:
            case 1:
              return process$1.nextTick(fn);
            case 2:
              return process$1.nextTick(function afterTickOne() {
                fn.call(null, arg1);
              });
            case 3:
              return process$1.nextTick(function afterTickTwo() {
                fn.call(null, arg1, arg2);
              });
            case 4:
              return process$1.nextTick(function afterTickThree() {
                fn.call(null, arg1, arg2, arg3);
              });
            default:
              args = new Array(len2 - 1);
              i2 = 0;
              while (i2 < args.length) {
                args[i2++] = arguments[i2];
              }
              return process$1.nextTick(function afterTick() {
                fn.apply(null, args);
              });
          }
        }
        return processNextickArgs.exports;
      }
      var isarray;
      var hasRequiredIsarray;
      function requireIsarray() {
        if (hasRequiredIsarray) return isarray;
        hasRequiredIsarray = 1;
        var toString2 = {}.toString;
        isarray = Array.isArray || function(arr) {
          return toString2.call(arr) == "[object Array]";
        };
        return isarray;
      }
      var streamBrowser;
      var hasRequiredStreamBrowser;
      function requireStreamBrowser() {
        if (hasRequiredStreamBrowser) return streamBrowser;
        hasRequiredStreamBrowser = 1;
        streamBrowser = requireEvents().EventEmitter;
        return streamBrowser;
      }
      var safeBuffer$2 = { exports: {} };
      var hasRequiredSafeBuffer$2;
      function requireSafeBuffer$2() {
        if (hasRequiredSafeBuffer$2) return safeBuffer$2.exports;
        hasRequiredSafeBuffer$2 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$2, safeBuffer$2.exports);
        return safeBuffer$2.exports;
      }
      var util = {};
      var hasRequiredUtil;
      function requireUtil() {
        if (hasRequiredUtil) return util;
        hasRequiredUtil = 1;
        function isArray(arg) {
          if (Array.isArray) {
            return Array.isArray(arg);
          }
          return objectToString(arg) === "[object Array]";
        }
        util.isArray = isArray;
        function isBoolean(arg) {
          return typeof arg === "boolean";
        }
        util.isBoolean = isBoolean;
        function isNull(arg) {
          return arg === null;
        }
        util.isNull = isNull;
        function isNullOrUndefined(arg) {
          return arg == null;
        }
        util.isNullOrUndefined = isNullOrUndefined;
        function isNumber(arg) {
          return typeof arg === "number";
        }
        util.isNumber = isNumber;
        function isString(arg) {
          return typeof arg === "string";
        }
        util.isString = isString;
        function isSymbol(arg) {
          return typeof arg === "symbol";
        }
        util.isSymbol = isSymbol;
        function isUndefined(arg) {
          return arg === void 0;
        }
        util.isUndefined = isUndefined;
        function isRegExp(re) {
          return objectToString(re) === "[object RegExp]";
        }
        util.isRegExp = isRegExp;
        function isObject(arg) {
          return typeof arg === "object" && arg !== null;
        }
        util.isObject = isObject;
        function isDate(d) {
          return objectToString(d) === "[object Date]";
        }
        util.isDate = isDate;
        function isError(e) {
          return objectToString(e) === "[object Error]" || e instanceof Error;
        }
        util.isError = isError;
        function isFunction(arg) {
          return typeof arg === "function";
        }
        util.isFunction = isFunction;
        function isPrimitive(arg) {
          return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || // ES6 symbol
          typeof arg === "undefined";
        }
        util.isPrimitive = isPrimitive;
        util.isBuffer = requireDist().Buffer.isBuffer;
        function objectToString(o) {
          return Object.prototype.toString.call(o);
        }
        return util;
      }
      var BufferList = { exports: {} };
      var hasRequiredBufferList;
      function requireBufferList() {
        if (hasRequiredBufferList) return BufferList.exports;
        hasRequiredBufferList = 1;
        (function(module) {
          function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
              throw new TypeError("Cannot call a class as a function");
            }
          }
          var Buffer2 = requireSafeBuffer$2().Buffer;
          var util2 = requireUtil$1();
          function copyBuffer(src, target, offset) {
            src.copy(target, offset);
          }
          module.exports = (function() {
            function BufferList2() {
              _classCallCheck(this, BufferList2);
              this.head = null;
              this.tail = null;
              this.length = 0;
            }
            BufferList2.prototype.push = function push(v) {
              var entry = { data: v, next: null };
              if (this.length > 0) this.tail.next = entry;
              else this.head = entry;
              this.tail = entry;
              ++this.length;
            };
            BufferList2.prototype.unshift = function unshift(v) {
              var entry = { data: v, next: this.head };
              if (this.length === 0) this.tail = entry;
              this.head = entry;
              ++this.length;
            };
            BufferList2.prototype.shift = function shift() {
              if (this.length === 0) return;
              var ret = this.head.data;
              if (this.length === 1) this.head = this.tail = null;
              else this.head = this.head.next;
              --this.length;
              return ret;
            };
            BufferList2.prototype.clear = function clear2() {
              this.head = this.tail = null;
              this.length = 0;
            };
            BufferList2.prototype.join = function join(s) {
              if (this.length === 0) return "";
              var p = this.head;
              var ret = "" + p.data;
              while (p = p.next) {
                ret += s + p.data;
              }
              return ret;
            };
            BufferList2.prototype.concat = function concat(n) {
              if (this.length === 0) return Buffer2.alloc(0);
              var ret = Buffer2.allocUnsafe(n >>> 0);
              var p = this.head;
              var i2 = 0;
              while (p) {
                copyBuffer(p.data, ret, i2);
                i2 += p.data.length;
                p = p.next;
              }
              return ret;
            };
            return BufferList2;
          })();
          if (util2 && util2.inspect && util2.inspect.custom) {
            module.exports.prototype[util2.inspect.custom] = function() {
              var obj = util2.inspect({ length: this.length });
              return this.constructor.name + " " + obj;
            };
          }
        })(BufferList);
        return BufferList.exports;
      }
      var destroy_1;
      var hasRequiredDestroy;
      function requireDestroy() {
        if (hasRequiredDestroy) return destroy_1;
        hasRequiredDestroy = 1;
        var pna = requireProcessNextickArgs();
        function destroy(err, cb) {
          var _this = this;
          var readableDestroyed = this._readableState && this._readableState.destroyed;
          var writableDestroyed = this._writableState && this._writableState.destroyed;
          if (readableDestroyed || writableDestroyed) {
            if (cb) {
              cb(err);
            } else if (err) {
              if (!this._writableState) {
                pna.nextTick(emitErrorNT, this, err);
              } else if (!this._writableState.errorEmitted) {
                this._writableState.errorEmitted = true;
                pna.nextTick(emitErrorNT, this, err);
              }
            }
            return this;
          }
          if (this._readableState) {
            this._readableState.destroyed = true;
          }
          if (this._writableState) {
            this._writableState.destroyed = true;
          }
          this._destroy(err || null, function(err2) {
            if (!cb && err2) {
              if (!_this._writableState) {
                pna.nextTick(emitErrorNT, _this, err2);
              } else if (!_this._writableState.errorEmitted) {
                _this._writableState.errorEmitted = true;
                pna.nextTick(emitErrorNT, _this, err2);
              }
            } else if (cb) {
              cb(err2);
            }
          });
          return this;
        }
        function undestroy() {
          if (this._readableState) {
            this._readableState.destroyed = false;
            this._readableState.reading = false;
            this._readableState.ended = false;
            this._readableState.endEmitted = false;
          }
          if (this._writableState) {
            this._writableState.destroyed = false;
            this._writableState.ended = false;
            this._writableState.ending = false;
            this._writableState.finalCalled = false;
            this._writableState.prefinished = false;
            this._writableState.finished = false;
            this._writableState.errorEmitted = false;
          }
        }
        function emitErrorNT(self2, err) {
          self2.emit("error", err);
        }
        destroy_1 = {
          destroy,
          undestroy
        };
        return destroy_1;
      }
      var _stream_writable;
      var hasRequired_stream_writable;
      function require_stream_writable() {
        if (hasRequired_stream_writable) return _stream_writable;
        hasRequired_stream_writable = 1;
        var pna = requireProcessNextickArgs();
        _stream_writable = Writable;
        function CorkedRequest(state2) {
          var _this = this;
          this.next = null;
          this.entry = null;
          this.finish = function() {
            onCorkedFinish(_this, state2);
          };
        }
        var asyncWrite = !process$1.browser && ["v0.10", "v0.9."].indexOf(process$1.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
        var Duplex;
        Writable.WritableState = WritableState;
        var util2 = Object.create(requireUtil());
        util2.inherits = requireInherits_browser();
        var internalUtil = {
          deprecate: requireBrowser$c()
        };
        var Stream = requireStreamBrowser();
        var Buffer2 = requireSafeBuffer$2().Buffer;
        var OurUint8Array = (typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
        };
        function _uint8ArrayToBuffer(chunk) {
          return Buffer2.from(chunk);
        }
        function _isUint8Array(obj) {
          return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array;
        }
        var destroyImpl = requireDestroy();
        util2.inherits(Writable, Stream);
        function nop() {
        }
        function WritableState(options, stream) {
          Duplex = Duplex || require_stream_duplex();
          options = options || {};
          var isDuplex = stream instanceof Duplex;
          this.objectMode = !!options.objectMode;
          if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
          var hwm = options.highWaterMark;
          var writableHwm = options.writableHighWaterMark;
          var defaultHwm = this.objectMode ? 16 : 16 * 1024;
          if (hwm || hwm === 0) this.highWaterMark = hwm;
          else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;
          else this.highWaterMark = defaultHwm;
          this.highWaterMark = Math.floor(this.highWaterMark);
          this.finalCalled = false;
          this.needDrain = false;
          this.ending = false;
          this.ended = false;
          this.finished = false;
          this.destroyed = false;
          var noDecode = options.decodeStrings === false;
          this.decodeStrings = !noDecode;
          this.defaultEncoding = options.defaultEncoding || "utf8";
          this.length = 0;
          this.writing = false;
          this.corked = 0;
          this.sync = true;
          this.bufferProcessing = false;
          this.onwrite = function(er) {
            onwrite(stream, er);
          };
          this.writecb = null;
          this.writelen = 0;
          this.bufferedRequest = null;
          this.lastBufferedRequest = null;
          this.pendingcb = 0;
          this.prefinished = false;
          this.errorEmitted = false;
          this.bufferedRequestCount = 0;
          this.corkedRequestsFree = new CorkedRequest(this);
        }
        WritableState.prototype.getBuffer = function getBuffer() {
          var current = this.bufferedRequest;
          var out = [];
          while (current) {
            out.push(current);
            current = current.next;
          }
          return out;
        };
        (function() {
          try {
            Object.defineProperty(WritableState.prototype, "buffer", {
              get: internalUtil.deprecate(function() {
                return this.getBuffer();
              }, "_writableState.buffer is deprecated. Use _writableState.getBuffer instead.", "DEP0003")
            });
          } catch (_) {
          }
        })();
        var realHasInstance;
        if (typeof Symbol === "function" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === "function") {
          realHasInstance = Function.prototype[Symbol.hasInstance];
          Object.defineProperty(Writable, Symbol.hasInstance, {
            value: function(object) {
              if (realHasInstance.call(this, object)) return true;
              if (this !== Writable) return false;
              return object && object._writableState instanceof WritableState;
            }
          });
        } else {
          realHasInstance = function(object) {
            return object instanceof this;
          };
        }
        function Writable(options) {
          Duplex = Duplex || require_stream_duplex();
          if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
            return new Writable(options);
          }
          this._writableState = new WritableState(options, this);
          this.writable = true;
          if (options) {
            if (typeof options.write === "function") this._write = options.write;
            if (typeof options.writev === "function") this._writev = options.writev;
            if (typeof options.destroy === "function") this._destroy = options.destroy;
            if (typeof options.final === "function") this._final = options.final;
          }
          Stream.call(this);
        }
        Writable.prototype.pipe = function() {
          this.emit("error", new Error("Cannot pipe, not readable"));
        };
        function writeAfterEnd(stream, cb) {
          var er = new Error("write after end");
          stream.emit("error", er);
          pna.nextTick(cb, er);
        }
        function validChunk(stream, state2, chunk, cb) {
          var valid = true;
          var er = false;
          if (chunk === null) {
            er = new TypeError("May not write null values to stream");
          } else if (typeof chunk !== "string" && chunk !== void 0 && !state2.objectMode) {
            er = new TypeError("Invalid non-string/buffer chunk");
          }
          if (er) {
            stream.emit("error", er);
            pna.nextTick(cb, er);
            valid = false;
          }
          return valid;
        }
        Writable.prototype.write = function(chunk, encoding, cb) {
          var state2 = this._writableState;
          var ret = false;
          var isBuf = !state2.objectMode && _isUint8Array(chunk);
          if (isBuf && !Buffer2.isBuffer(chunk)) {
            chunk = _uint8ArrayToBuffer(chunk);
          }
          if (typeof encoding === "function") {
            cb = encoding;
            encoding = null;
          }
          if (isBuf) encoding = "buffer";
          else if (!encoding) encoding = state2.defaultEncoding;
          if (typeof cb !== "function") cb = nop;
          if (state2.ended) writeAfterEnd(this, cb);
          else if (isBuf || validChunk(this, state2, chunk, cb)) {
            state2.pendingcb++;
            ret = writeOrBuffer(this, state2, isBuf, chunk, encoding, cb);
          }
          return ret;
        };
        Writable.prototype.cork = function() {
          var state2 = this._writableState;
          state2.corked++;
        };
        Writable.prototype.uncork = function() {
          var state2 = this._writableState;
          if (state2.corked) {
            state2.corked--;
            if (!state2.writing && !state2.corked && !state2.bufferProcessing && state2.bufferedRequest) clearBuffer(this, state2);
          }
        };
        Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
          if (typeof encoding === "string") encoding = encoding.toLowerCase();
          if (!(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((encoding + "").toLowerCase()) > -1)) throw new TypeError("Unknown encoding: " + encoding);
          this._writableState.defaultEncoding = encoding;
          return this;
        };
        function decodeChunk(state2, chunk, encoding) {
          if (!state2.objectMode && state2.decodeStrings !== false && typeof chunk === "string") {
            chunk = Buffer2.from(chunk, encoding);
          }
          return chunk;
        }
        Object.defineProperty(Writable.prototype, "writableHighWaterMark", {
          // making it explicit this property is not enumerable
          // because otherwise some prototype manipulation in
          // userland will fail
          enumerable: false,
          get: function() {
            return this._writableState.highWaterMark;
          }
        });
        function writeOrBuffer(stream, state2, isBuf, chunk, encoding, cb) {
          if (!isBuf) {
            var newChunk = decodeChunk(state2, chunk, encoding);
            if (chunk !== newChunk) {
              isBuf = true;
              encoding = "buffer";
              chunk = newChunk;
            }
          }
          var len2 = state2.objectMode ? 1 : chunk.length;
          state2.length += len2;
          var ret = state2.length < state2.highWaterMark;
          if (!ret) state2.needDrain = true;
          if (state2.writing || state2.corked) {
            var last = state2.lastBufferedRequest;
            state2.lastBufferedRequest = {
              chunk,
              encoding,
              isBuf,
              callback: cb,
              next: null
            };
            if (last) {
              last.next = state2.lastBufferedRequest;
            } else {
              state2.bufferedRequest = state2.lastBufferedRequest;
            }
            state2.bufferedRequestCount += 1;
          } else {
            doWrite(stream, state2, false, len2, chunk, encoding, cb);
          }
          return ret;
        }
        function doWrite(stream, state2, writev, len2, chunk, encoding, cb) {
          state2.writelen = len2;
          state2.writecb = cb;
          state2.writing = true;
          state2.sync = true;
          if (writev) stream._writev(chunk, state2.onwrite);
          else stream._write(chunk, encoding, state2.onwrite);
          state2.sync = false;
        }
        function onwriteError(stream, state2, sync, er, cb) {
          --state2.pendingcb;
          if (sync) {
            pna.nextTick(cb, er);
            pna.nextTick(finishMaybe, stream, state2);
            stream._writableState.errorEmitted = true;
            stream.emit("error", er);
          } else {
            cb(er);
            stream._writableState.errorEmitted = true;
            stream.emit("error", er);
            finishMaybe(stream, state2);
          }
        }
        function onwriteStateUpdate(state2) {
          state2.writing = false;
          state2.writecb = null;
          state2.length -= state2.writelen;
          state2.writelen = 0;
        }
        function onwrite(stream, er) {
          var state2 = stream._writableState;
          var sync = state2.sync;
          var cb = state2.writecb;
          onwriteStateUpdate(state2);
          if (er) onwriteError(stream, state2, sync, er, cb);
          else {
            var finished = needFinish(state2);
            if (!finished && !state2.corked && !state2.bufferProcessing && state2.bufferedRequest) {
              clearBuffer(stream, state2);
            }
            if (sync) {
              asyncWrite(afterWrite, stream, state2, finished, cb);
            } else {
              afterWrite(stream, state2, finished, cb);
            }
          }
        }
        function afterWrite(stream, state2, finished, cb) {
          if (!finished) onwriteDrain(stream, state2);
          state2.pendingcb--;
          cb();
          finishMaybe(stream, state2);
        }
        function onwriteDrain(stream, state2) {
          if (state2.length === 0 && state2.needDrain) {
            state2.needDrain = false;
            stream.emit("drain");
          }
        }
        function clearBuffer(stream, state2) {
          state2.bufferProcessing = true;
          var entry = state2.bufferedRequest;
          if (stream._writev && entry && entry.next) {
            var l = state2.bufferedRequestCount;
            var buffer2 = new Array(l);
            var holder = state2.corkedRequestsFree;
            holder.entry = entry;
            var count = 0;
            var allBuffers = true;
            while (entry) {
              buffer2[count] = entry;
              if (!entry.isBuf) allBuffers = false;
              entry = entry.next;
              count += 1;
            }
            buffer2.allBuffers = allBuffers;
            doWrite(stream, state2, true, state2.length, buffer2, "", holder.finish);
            state2.pendingcb++;
            state2.lastBufferedRequest = null;
            if (holder.next) {
              state2.corkedRequestsFree = holder.next;
              holder.next = null;
            } else {
              state2.corkedRequestsFree = new CorkedRequest(state2);
            }
            state2.bufferedRequestCount = 0;
          } else {
            while (entry) {
              var chunk = entry.chunk;
              var encoding = entry.encoding;
              var cb = entry.callback;
              var len2 = state2.objectMode ? 1 : chunk.length;
              doWrite(stream, state2, false, len2, chunk, encoding, cb);
              entry = entry.next;
              state2.bufferedRequestCount--;
              if (state2.writing) {
                break;
              }
            }
            if (entry === null) state2.lastBufferedRequest = null;
          }
          state2.bufferedRequest = entry;
          state2.bufferProcessing = false;
        }
        Writable.prototype._write = function(chunk, encoding, cb) {
          cb(new Error("_write() is not implemented"));
        };
        Writable.prototype._writev = null;
        Writable.prototype.end = function(chunk, encoding, cb) {
          var state2 = this._writableState;
          if (typeof chunk === "function") {
            cb = chunk;
            chunk = null;
            encoding = null;
          } else if (typeof encoding === "function") {
            cb = encoding;
            encoding = null;
          }
          if (chunk !== null && chunk !== void 0) this.write(chunk, encoding);
          if (state2.corked) {
            state2.corked = 1;
            this.uncork();
          }
          if (!state2.ending) endWritable(this, state2, cb);
        };
        function needFinish(state2) {
          return state2.ending && state2.length === 0 && state2.bufferedRequest === null && !state2.finished && !state2.writing;
        }
        function callFinal(stream, state2) {
          stream._final(function(err) {
            state2.pendingcb--;
            if (err) {
              stream.emit("error", err);
            }
            state2.prefinished = true;
            stream.emit("prefinish");
            finishMaybe(stream, state2);
          });
        }
        function prefinish(stream, state2) {
          if (!state2.prefinished && !state2.finalCalled) {
            if (typeof stream._final === "function") {
              state2.pendingcb++;
              state2.finalCalled = true;
              pna.nextTick(callFinal, stream, state2);
            } else {
              state2.prefinished = true;
              stream.emit("prefinish");
            }
          }
        }
        function finishMaybe(stream, state2) {
          var need = needFinish(state2);
          if (need) {
            prefinish(stream, state2);
            if (state2.pendingcb === 0) {
              state2.finished = true;
              stream.emit("finish");
            }
          }
          return need;
        }
        function endWritable(stream, state2, cb) {
          state2.ending = true;
          finishMaybe(stream, state2);
          if (cb) {
            if (state2.finished) pna.nextTick(cb);
            else stream.once("finish", cb);
          }
          state2.ended = true;
          stream.writable = false;
        }
        function onCorkedFinish(corkReq, state2, err) {
          var entry = corkReq.entry;
          corkReq.entry = null;
          while (entry) {
            var cb = entry.callback;
            state2.pendingcb--;
            cb(err);
            entry = entry.next;
          }
          state2.corkedRequestsFree.next = corkReq;
        }
        Object.defineProperty(Writable.prototype, "destroyed", {
          get: function() {
            if (this._writableState === void 0) {
              return false;
            }
            return this._writableState.destroyed;
          },
          set: function(value) {
            if (!this._writableState) {
              return;
            }
            this._writableState.destroyed = value;
          }
        });
        Writable.prototype.destroy = destroyImpl.destroy;
        Writable.prototype._undestroy = destroyImpl.undestroy;
        Writable.prototype._destroy = function(err, cb) {
          this.end();
          cb(err);
        };
        return _stream_writable;
      }
      var _stream_duplex;
      var hasRequired_stream_duplex;
      function require_stream_duplex() {
        if (hasRequired_stream_duplex) return _stream_duplex;
        hasRequired_stream_duplex = 1;
        var pna = requireProcessNextickArgs();
        var objectKeys = Object.keys || function(obj) {
          var keys3 = [];
          for (var key2 in obj) {
            keys3.push(key2);
          }
          return keys3;
        };
        _stream_duplex = Duplex;
        var util2 = Object.create(requireUtil());
        util2.inherits = requireInherits_browser();
        var Readable = require_stream_readable();
        var Writable = require_stream_writable();
        util2.inherits(Duplex, Readable);
        {
          var keys2 = objectKeys(Writable.prototype);
          for (var v = 0; v < keys2.length; v++) {
            var method = keys2[v];
            if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
          }
        }
        function Duplex(options) {
          if (!(this instanceof Duplex)) return new Duplex(options);
          Readable.call(this, options);
          Writable.call(this, options);
          if (options && options.readable === false) this.readable = false;
          if (options && options.writable === false) this.writable = false;
          this.allowHalfOpen = true;
          if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
          this.once("end", onend);
        }
        Object.defineProperty(Duplex.prototype, "writableHighWaterMark", {
          // making it explicit this property is not enumerable
          // because otherwise some prototype manipulation in
          // userland will fail
          enumerable: false,
          get: function() {
            return this._writableState.highWaterMark;
          }
        });
        function onend() {
          if (this.allowHalfOpen || this._writableState.ended) return;
          pna.nextTick(onEndNT, this);
        }
        function onEndNT(self2) {
          self2.end();
        }
        Object.defineProperty(Duplex.prototype, "destroyed", {
          get: function() {
            if (this._readableState === void 0 || this._writableState === void 0) {
              return false;
            }
            return this._readableState.destroyed && this._writableState.destroyed;
          },
          set: function(value) {
            if (this._readableState === void 0 || this._writableState === void 0) {
              return;
            }
            this._readableState.destroyed = value;
            this._writableState.destroyed = value;
          }
        });
        Duplex.prototype._destroy = function(err, cb) {
          this.push(null);
          this.end();
          pna.nextTick(cb, err);
        };
        return _stream_duplex;
      }
      var _stream_readable;
      var hasRequired_stream_readable;
      function require_stream_readable() {
        if (hasRequired_stream_readable) return _stream_readable;
        hasRequired_stream_readable = 1;
        var pna = requireProcessNextickArgs();
        _stream_readable = Readable;
        var isArray = requireIsarray();
        var Duplex;
        Readable.ReadableState = ReadableState;
        requireEvents().EventEmitter;
        var EElistenerCount = function(emitter, type2) {
          return emitter.listeners(type2).length;
        };
        var Stream = requireStreamBrowser();
        var Buffer2 = requireSafeBuffer$2().Buffer;
        var OurUint8Array = (typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
        };
        function _uint8ArrayToBuffer(chunk) {
          return Buffer2.from(chunk);
        }
        function _isUint8Array(obj) {
          return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array;
        }
        var util2 = Object.create(requireUtil());
        util2.inherits = requireInherits_browser();
        var debugUtil = requireUtil$1();
        var debug = void 0;
        if (debugUtil && debugUtil.debuglog) {
          debug = debugUtil.debuglog("stream");
        } else {
          debug = function() {
          };
        }
        var BufferList2 = requireBufferList();
        var destroyImpl = requireDestroy();
        var StringDecoder;
        util2.inherits(Readable, Stream);
        var kProxyEvents = ["error", "close", "destroy", "pause", "resume"];
        function prependListener(emitter, event, fn) {
          if (typeof emitter.prependListener === "function") return emitter.prependListener(event, fn);
          if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);
          else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);
          else emitter._events[event] = [fn, emitter._events[event]];
        }
        function ReadableState(options, stream) {
          Duplex = Duplex || require_stream_duplex();
          options = options || {};
          var isDuplex = stream instanceof Duplex;
          this.objectMode = !!options.objectMode;
          if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
          var hwm = options.highWaterMark;
          var readableHwm = options.readableHighWaterMark;
          var defaultHwm = this.objectMode ? 16 : 16 * 1024;
          if (hwm || hwm === 0) this.highWaterMark = hwm;
          else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;
          else this.highWaterMark = defaultHwm;
          this.highWaterMark = Math.floor(this.highWaterMark);
          this.buffer = new BufferList2();
          this.length = 0;
          this.pipes = null;
          this.pipesCount = 0;
          this.flowing = null;
          this.ended = false;
          this.endEmitted = false;
          this.reading = false;
          this.sync = true;
          this.needReadable = false;
          this.emittedReadable = false;
          this.readableListening = false;
          this.resumeScheduled = false;
          this.destroyed = false;
          this.defaultEncoding = options.defaultEncoding || "utf8";
          this.awaitDrain = 0;
          this.readingMore = false;
          this.decoder = null;
          this.encoding = null;
          if (options.encoding) {
            if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;
            this.decoder = new StringDecoder(options.encoding);
            this.encoding = options.encoding;
          }
        }
        function Readable(options) {
          Duplex = Duplex || require_stream_duplex();
          if (!(this instanceof Readable)) return new Readable(options);
          this._readableState = new ReadableState(options, this);
          this.readable = true;
          if (options) {
            if (typeof options.read === "function") this._read = options.read;
            if (typeof options.destroy === "function") this._destroy = options.destroy;
          }
          Stream.call(this);
        }
        Object.defineProperty(Readable.prototype, "destroyed", {
          get: function() {
            if (this._readableState === void 0) {
              return false;
            }
            return this._readableState.destroyed;
          },
          set: function(value) {
            if (!this._readableState) {
              return;
            }
            this._readableState.destroyed = value;
          }
        });
        Readable.prototype.destroy = destroyImpl.destroy;
        Readable.prototype._undestroy = destroyImpl.undestroy;
        Readable.prototype._destroy = function(err, cb) {
          this.push(null);
          cb(err);
        };
        Readable.prototype.push = function(chunk, encoding) {
          var state2 = this._readableState;
          var skipChunkCheck;
          if (!state2.objectMode) {
            if (typeof chunk === "string") {
              encoding = encoding || state2.defaultEncoding;
              if (encoding !== state2.encoding) {
                chunk = Buffer2.from(chunk, encoding);
                encoding = "";
              }
              skipChunkCheck = true;
            }
          } else {
            skipChunkCheck = true;
          }
          return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
        };
        Readable.prototype.unshift = function(chunk) {
          return readableAddChunk(this, chunk, null, true, false);
        };
        function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
          var state2 = stream._readableState;
          if (chunk === null) {
            state2.reading = false;
            onEofChunk(stream, state2);
          } else {
            var er;
            if (!skipChunkCheck) er = chunkInvalid(state2, chunk);
            if (er) {
              stream.emit("error", er);
            } else if (state2.objectMode || chunk && chunk.length > 0) {
              if (typeof chunk !== "string" && !state2.objectMode && Object.getPrototypeOf(chunk) !== Buffer2.prototype) {
                chunk = _uint8ArrayToBuffer(chunk);
              }
              if (addToFront) {
                if (state2.endEmitted) stream.emit("error", new Error("stream.unshift() after end event"));
                else addChunk(stream, state2, chunk, true);
              } else if (state2.ended) {
                stream.emit("error", new Error("stream.push() after EOF"));
              } else {
                state2.reading = false;
                if (state2.decoder && !encoding) {
                  chunk = state2.decoder.write(chunk);
                  if (state2.objectMode || chunk.length !== 0) addChunk(stream, state2, chunk, false);
                  else maybeReadMore(stream, state2);
                } else {
                  addChunk(stream, state2, chunk, false);
                }
              }
            } else if (!addToFront) {
              state2.reading = false;
            }
          }
          return needMoreData(state2);
        }
        function addChunk(stream, state2, chunk, addToFront) {
          if (state2.flowing && state2.length === 0 && !state2.sync) {
            stream.emit("data", chunk);
            stream.read(0);
          } else {
            state2.length += state2.objectMode ? 1 : chunk.length;
            if (addToFront) state2.buffer.unshift(chunk);
            else state2.buffer.push(chunk);
            if (state2.needReadable) emitReadable(stream);
          }
          maybeReadMore(stream, state2);
        }
        function chunkInvalid(state2, chunk) {
          var er;
          if (!_isUint8Array(chunk) && typeof chunk !== "string" && chunk !== void 0 && !state2.objectMode) {
            er = new TypeError("Invalid non-string/buffer chunk");
          }
          return er;
        }
        function needMoreData(state2) {
          return !state2.ended && (state2.needReadable || state2.length < state2.highWaterMark || state2.length === 0);
        }
        Readable.prototype.isPaused = function() {
          return this._readableState.flowing === false;
        };
        Readable.prototype.setEncoding = function(enc) {
          if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;
          this._readableState.decoder = new StringDecoder(enc);
          this._readableState.encoding = enc;
          return this;
        };
        var MAX_HWM = 8388608;
        function computeNewHighWaterMark(n) {
          if (n >= MAX_HWM) {
            n = MAX_HWM;
          } else {
            n--;
            n |= n >>> 1;
            n |= n >>> 2;
            n |= n >>> 4;
            n |= n >>> 8;
            n |= n >>> 16;
            n++;
          }
          return n;
        }
        function howMuchToRead(n, state2) {
          if (n <= 0 || state2.length === 0 && state2.ended) return 0;
          if (state2.objectMode) return 1;
          if (n !== n) {
            if (state2.flowing && state2.length) return state2.buffer.head.data.length;
            else return state2.length;
          }
          if (n > state2.highWaterMark) state2.highWaterMark = computeNewHighWaterMark(n);
          if (n <= state2.length) return n;
          if (!state2.ended) {
            state2.needReadable = true;
            return 0;
          }
          return state2.length;
        }
        Readable.prototype.read = function(n) {
          debug("read", n);
          n = parseInt(n, 10);
          var state2 = this._readableState;
          var nOrig = n;
          if (n !== 0) state2.emittedReadable = false;
          if (n === 0 && state2.needReadable && (state2.length >= state2.highWaterMark || state2.ended)) {
            debug("read: emitReadable", state2.length, state2.ended);
            if (state2.length === 0 && state2.ended) endReadable(this);
            else emitReadable(this);
            return null;
          }
          n = howMuchToRead(n, state2);
          if (n === 0 && state2.ended) {
            if (state2.length === 0) endReadable(this);
            return null;
          }
          var doRead = state2.needReadable;
          debug("need readable", doRead);
          if (state2.length === 0 || state2.length - n < state2.highWaterMark) {
            doRead = true;
            debug("length less than watermark", doRead);
          }
          if (state2.ended || state2.reading) {
            doRead = false;
            debug("reading or ended", doRead);
          } else if (doRead) {
            debug("do read");
            state2.reading = true;
            state2.sync = true;
            if (state2.length === 0) state2.needReadable = true;
            this._read(state2.highWaterMark);
            state2.sync = false;
            if (!state2.reading) n = howMuchToRead(nOrig, state2);
          }
          var ret;
          if (n > 0) ret = fromList(n, state2);
          else ret = null;
          if (ret === null) {
            state2.needReadable = true;
            n = 0;
          } else {
            state2.length -= n;
          }
          if (state2.length === 0) {
            if (!state2.ended) state2.needReadable = true;
            if (nOrig !== n && state2.ended) endReadable(this);
          }
          if (ret !== null) this.emit("data", ret);
          return ret;
        };
        function onEofChunk(stream, state2) {
          if (state2.ended) return;
          if (state2.decoder) {
            var chunk = state2.decoder.end();
            if (chunk && chunk.length) {
              state2.buffer.push(chunk);
              state2.length += state2.objectMode ? 1 : chunk.length;
            }
          }
          state2.ended = true;
          emitReadable(stream);
        }
        function emitReadable(stream) {
          var state2 = stream._readableState;
          state2.needReadable = false;
          if (!state2.emittedReadable) {
            debug("emitReadable", state2.flowing);
            state2.emittedReadable = true;
            if (state2.sync) pna.nextTick(emitReadable_, stream);
            else emitReadable_(stream);
          }
        }
        function emitReadable_(stream) {
          debug("emit readable");
          stream.emit("readable");
          flow(stream);
        }
        function maybeReadMore(stream, state2) {
          if (!state2.readingMore) {
            state2.readingMore = true;
            pna.nextTick(maybeReadMore_, stream, state2);
          }
        }
        function maybeReadMore_(stream, state2) {
          var len2 = state2.length;
          while (!state2.reading && !state2.flowing && !state2.ended && state2.length < state2.highWaterMark) {
            debug("maybeReadMore read 0");
            stream.read(0);
            if (len2 === state2.length)
              break;
            else len2 = state2.length;
          }
          state2.readingMore = false;
        }
        Readable.prototype._read = function(n) {
          this.emit("error", new Error("_read() is not implemented"));
        };
        Readable.prototype.pipe = function(dest, pipeOpts) {
          var src = this;
          var state2 = this._readableState;
          switch (state2.pipesCount) {
            case 0:
              state2.pipes = dest;
              break;
            case 1:
              state2.pipes = [state2.pipes, dest];
              break;
            default:
              state2.pipes.push(dest);
              break;
          }
          state2.pipesCount += 1;
          debug("pipe count=%d opts=%j", state2.pipesCount, pipeOpts);
          var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process$1.stdout && dest !== process$1.stderr;
          var endFn = doEnd ? onend : unpipe;
          if (state2.endEmitted) pna.nextTick(endFn);
          else src.once("end", endFn);
          dest.on("unpipe", onunpipe);
          function onunpipe(readable, unpipeInfo) {
            debug("onunpipe");
            if (readable === src) {
              if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
                unpipeInfo.hasUnpiped = true;
                cleanup();
              }
            }
          }
          function onend() {
            debug("onend");
            dest.end();
          }
          var ondrain = pipeOnDrain(src);
          dest.on("drain", ondrain);
          var cleanedUp = false;
          function cleanup() {
            debug("cleanup");
            dest.removeListener("close", onclose);
            dest.removeListener("finish", onfinish);
            dest.removeListener("drain", ondrain);
            dest.removeListener("error", onerror);
            dest.removeListener("unpipe", onunpipe);
            src.removeListener("end", onend);
            src.removeListener("end", unpipe);
            src.removeListener("data", ondata);
            cleanedUp = true;
            if (state2.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
          }
          var increasedAwaitDrain = false;
          src.on("data", ondata);
          function ondata(chunk) {
            debug("ondata");
            increasedAwaitDrain = false;
            var ret = dest.write(chunk);
            if (false === ret && !increasedAwaitDrain) {
              if ((state2.pipesCount === 1 && state2.pipes === dest || state2.pipesCount > 1 && indexOf2(state2.pipes, dest) !== -1) && !cleanedUp) {
                debug("false write response, pause", state2.awaitDrain);
                state2.awaitDrain++;
                increasedAwaitDrain = true;
              }
              src.pause();
            }
          }
          function onerror(er) {
            debug("onerror", er);
            unpipe();
            dest.removeListener("error", onerror);
            if (EElistenerCount(dest, "error") === 0) dest.emit("error", er);
          }
          prependListener(dest, "error", onerror);
          function onclose() {
            dest.removeListener("finish", onfinish);
            unpipe();
          }
          dest.once("close", onclose);
          function onfinish() {
            debug("onfinish");
            dest.removeListener("close", onclose);
            unpipe();
          }
          dest.once("finish", onfinish);
          function unpipe() {
            debug("unpipe");
            src.unpipe(dest);
          }
          dest.emit("pipe", src);
          if (!state2.flowing) {
            debug("pipe resume");
            src.resume();
          }
          return dest;
        };
        function pipeOnDrain(src) {
          return function() {
            var state2 = src._readableState;
            debug("pipeOnDrain", state2.awaitDrain);
            if (state2.awaitDrain) state2.awaitDrain--;
            if (state2.awaitDrain === 0 && EElistenerCount(src, "data")) {
              state2.flowing = true;
              flow(src);
            }
          };
        }
        Readable.prototype.unpipe = function(dest) {
          var state2 = this._readableState;
          var unpipeInfo = { hasUnpiped: false };
          if (state2.pipesCount === 0) return this;
          if (state2.pipesCount === 1) {
            if (dest && dest !== state2.pipes) return this;
            if (!dest) dest = state2.pipes;
            state2.pipes = null;
            state2.pipesCount = 0;
            state2.flowing = false;
            if (dest) dest.emit("unpipe", this, unpipeInfo);
            return this;
          }
          if (!dest) {
            var dests = state2.pipes;
            var len2 = state2.pipesCount;
            state2.pipes = null;
            state2.pipesCount = 0;
            state2.flowing = false;
            for (var i2 = 0; i2 < len2; i2++) {
              dests[i2].emit("unpipe", this, { hasUnpiped: false });
            }
            return this;
          }
          var index = indexOf2(state2.pipes, dest);
          if (index === -1) return this;
          state2.pipes.splice(index, 1);
          state2.pipesCount -= 1;
          if (state2.pipesCount === 1) state2.pipes = state2.pipes[0];
          dest.emit("unpipe", this, unpipeInfo);
          return this;
        };
        Readable.prototype.on = function(ev, fn) {
          var res = Stream.prototype.on.call(this, ev, fn);
          if (ev === "data") {
            if (this._readableState.flowing !== false) this.resume();
          } else if (ev === "readable") {
            var state2 = this._readableState;
            if (!state2.endEmitted && !state2.readableListening) {
              state2.readableListening = state2.needReadable = true;
              state2.emittedReadable = false;
              if (!state2.reading) {
                pna.nextTick(nReadingNextTick, this);
              } else if (state2.length) {
                emitReadable(this);
              }
            }
          }
          return res;
        };
        Readable.prototype.addListener = Readable.prototype.on;
        function nReadingNextTick(self2) {
          debug("readable nexttick read 0");
          self2.read(0);
        }
        Readable.prototype.resume = function() {
          var state2 = this._readableState;
          if (!state2.flowing) {
            debug("resume");
            state2.flowing = true;
            resume(this, state2);
          }
          return this;
        };
        function resume(stream, state2) {
          if (!state2.resumeScheduled) {
            state2.resumeScheduled = true;
            pna.nextTick(resume_, stream, state2);
          }
        }
        function resume_(stream, state2) {
          if (!state2.reading) {
            debug("resume read 0");
            stream.read(0);
          }
          state2.resumeScheduled = false;
          state2.awaitDrain = 0;
          stream.emit("resume");
          flow(stream);
          if (state2.flowing && !state2.reading) stream.read(0);
        }
        Readable.prototype.pause = function() {
          debug("call pause flowing=%j", this._readableState.flowing);
          if (false !== this._readableState.flowing) {
            debug("pause");
            this._readableState.flowing = false;
            this.emit("pause");
          }
          return this;
        };
        function flow(stream) {
          var state2 = stream._readableState;
          debug("flow", state2.flowing);
          while (state2.flowing && stream.read() !== null) {
          }
        }
        Readable.prototype.wrap = function(stream) {
          var _this = this;
          var state2 = this._readableState;
          var paused = false;
          stream.on("end", function() {
            debug("wrapped end");
            if (state2.decoder && !state2.ended) {
              var chunk = state2.decoder.end();
              if (chunk && chunk.length) _this.push(chunk);
            }
            _this.push(null);
          });
          stream.on("data", function(chunk) {
            debug("wrapped data");
            if (state2.decoder) chunk = state2.decoder.write(chunk);
            if (state2.objectMode && (chunk === null || chunk === void 0)) return;
            else if (!state2.objectMode && (!chunk || !chunk.length)) return;
            var ret = _this.push(chunk);
            if (!ret) {
              paused = true;
              stream.pause();
            }
          });
          for (var i2 in stream) {
            if (this[i2] === void 0 && typeof stream[i2] === "function") {
              this[i2] = /* @__PURE__ */ (function(method) {
                return function() {
                  return stream[method].apply(stream, arguments);
                };
              })(i2);
            }
          }
          for (var n = 0; n < kProxyEvents.length; n++) {
            stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
          }
          this._read = function(n2) {
            debug("wrapped _read", n2);
            if (paused) {
              paused = false;
              stream.resume();
            }
          };
          return this;
        };
        Object.defineProperty(Readable.prototype, "readableHighWaterMark", {
          // making it explicit this property is not enumerable
          // because otherwise some prototype manipulation in
          // userland will fail
          enumerable: false,
          get: function() {
            return this._readableState.highWaterMark;
          }
        });
        Readable._fromList = fromList;
        function fromList(n, state2) {
          if (state2.length === 0) return null;
          var ret;
          if (state2.objectMode) ret = state2.buffer.shift();
          else if (!n || n >= state2.length) {
            if (state2.decoder) ret = state2.buffer.join("");
            else if (state2.buffer.length === 1) ret = state2.buffer.head.data;
            else ret = state2.buffer.concat(state2.length);
            state2.buffer.clear();
          } else {
            ret = fromListPartial(n, state2.buffer, state2.decoder);
          }
          return ret;
        }
        function fromListPartial(n, list, hasStrings) {
          var ret;
          if (n < list.head.data.length) {
            ret = list.head.data.slice(0, n);
            list.head.data = list.head.data.slice(n);
          } else if (n === list.head.data.length) {
            ret = list.shift();
          } else {
            ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
          }
          return ret;
        }
        function copyFromBufferString(n, list) {
          var p = list.head;
          var c = 1;
          var ret = p.data;
          n -= ret.length;
          while (p = p.next) {
            var str = p.data;
            var nb = n > str.length ? str.length : n;
            if (nb === str.length) ret += str;
            else ret += str.slice(0, n);
            n -= nb;
            if (n === 0) {
              if (nb === str.length) {
                ++c;
                if (p.next) list.head = p.next;
                else list.head = list.tail = null;
              } else {
                list.head = p;
                p.data = str.slice(nb);
              }
              break;
            }
            ++c;
          }
          list.length -= c;
          return ret;
        }
        function copyFromBuffer(n, list) {
          var ret = Buffer2.allocUnsafe(n);
          var p = list.head;
          var c = 1;
          p.data.copy(ret);
          n -= p.data.length;
          while (p = p.next) {
            var buf = p.data;
            var nb = n > buf.length ? buf.length : n;
            buf.copy(ret, ret.length - n, 0, nb);
            n -= nb;
            if (n === 0) {
              if (nb === buf.length) {
                ++c;
                if (p.next) list.head = p.next;
                else list.head = list.tail = null;
              } else {
                list.head = p;
                p.data = buf.slice(nb);
              }
              break;
            }
            ++c;
          }
          list.length -= c;
          return ret;
        }
        function endReadable(stream) {
          var state2 = stream._readableState;
          if (state2.length > 0) throw new Error('"endReadable()" called on non-empty stream');
          if (!state2.endEmitted) {
            state2.ended = true;
            pna.nextTick(endReadableNT, state2, stream);
          }
        }
        function endReadableNT(state2, stream) {
          if (!state2.endEmitted && state2.length === 0) {
            state2.endEmitted = true;
            stream.readable = false;
            stream.emit("end");
          }
        }
        function indexOf2(xs, x) {
          for (var i2 = 0, l = xs.length; i2 < l; i2++) {
            if (xs[i2] === x) return i2;
          }
          return -1;
        }
        return _stream_readable;
      }
      var _stream_transform;
      var hasRequired_stream_transform;
      function require_stream_transform() {
        if (hasRequired_stream_transform) return _stream_transform;
        hasRequired_stream_transform = 1;
        _stream_transform = Transform;
        var Duplex = require_stream_duplex();
        var util2 = Object.create(requireUtil());
        util2.inherits = requireInherits_browser();
        util2.inherits(Transform, Duplex);
        function afterTransform(er, data) {
          var ts = this._transformState;
          ts.transforming = false;
          var cb = ts.writecb;
          if (!cb) {
            return this.emit("error", new Error("write callback called multiple times"));
          }
          ts.writechunk = null;
          ts.writecb = null;
          if (data != null)
            this.push(data);
          cb(er);
          var rs = this._readableState;
          rs.reading = false;
          if (rs.needReadable || rs.length < rs.highWaterMark) {
            this._read(rs.highWaterMark);
          }
        }
        function Transform(options) {
          if (!(this instanceof Transform)) return new Transform(options);
          Duplex.call(this, options);
          this._transformState = {
            afterTransform: afterTransform.bind(this),
            needTransform: false,
            transforming: false,
            writecb: null,
            writechunk: null,
            writeencoding: null
          };
          this._readableState.needReadable = true;
          this._readableState.sync = false;
          if (options) {
            if (typeof options.transform === "function") this._transform = options.transform;
            if (typeof options.flush === "function") this._flush = options.flush;
          }
          this.on("prefinish", prefinish);
        }
        function prefinish() {
          var _this = this;
          if (typeof this._flush === "function") {
            this._flush(function(er, data) {
              done(_this, er, data);
            });
          } else {
            done(this, null, null);
          }
        }
        Transform.prototype.push = function(chunk, encoding) {
          this._transformState.needTransform = false;
          return Duplex.prototype.push.call(this, chunk, encoding);
        };
        Transform.prototype._transform = function(chunk, encoding, cb) {
          throw new Error("_transform() is not implemented");
        };
        Transform.prototype._write = function(chunk, encoding, cb) {
          var ts = this._transformState;
          ts.writecb = cb;
          ts.writechunk = chunk;
          ts.writeencoding = encoding;
          if (!ts.transforming) {
            var rs = this._readableState;
            if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
          }
        };
        Transform.prototype._read = function(n) {
          var ts = this._transformState;
          if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
            ts.transforming = true;
            this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
          } else {
            ts.needTransform = true;
          }
        };
        Transform.prototype._destroy = function(err, cb) {
          var _this2 = this;
          Duplex.prototype._destroy.call(this, err, function(err2) {
            cb(err2);
            _this2.emit("close");
          });
        };
        function done(stream, er, data) {
          if (er) return stream.emit("error", er);
          if (data != null)
            stream.push(data);
          if (stream._writableState.length) throw new Error("Calling transform done when ws.length != 0");
          if (stream._transformState.transforming) throw new Error("Calling transform done when still transforming");
          return stream.push(null);
        }
        return _stream_transform;
      }
      var _stream_passthrough;
      var hasRequired_stream_passthrough;
      function require_stream_passthrough() {
        if (hasRequired_stream_passthrough) return _stream_passthrough;
        hasRequired_stream_passthrough = 1;
        _stream_passthrough = PassThrough;
        var Transform = require_stream_transform();
        var util2 = Object.create(requireUtil());
        util2.inherits = requireInherits_browser();
        util2.inherits(PassThrough, Transform);
        function PassThrough(options) {
          if (!(this instanceof PassThrough)) return new PassThrough(options);
          Transform.call(this, options);
        }
        PassThrough.prototype._transform = function(chunk, encoding, cb) {
          cb(null, chunk);
        };
        return _stream_passthrough;
      }
      var hasRequiredReadableBrowser;
      function requireReadableBrowser() {
        if (hasRequiredReadableBrowser) return readableBrowser.exports;
        hasRequiredReadableBrowser = 1;
        (function(module, exports$12) {
          exports$12 = module.exports = require_stream_readable();
          exports$12.Stream = exports$12;
          exports$12.Readable = exports$12;
          exports$12.Writable = require_stream_writable();
          exports$12.Duplex = require_stream_duplex();
          exports$12.Transform = require_stream_transform();
          exports$12.PassThrough = require_stream_passthrough();
        })(readableBrowser, readableBrowser.exports);
        return readableBrowser.exports;
      }
      var sign = { exports: {} };
      var bn$9 = { exports: {} };
      var bn$8 = bn$9.exports;
      var hasRequiredBn$4;
      function requireBn$4() {
        if (hasRequiredBn$4) return bn$9.exports;
        hasRequiredBn$4 = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this._strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 48 && c <= 57) {
                return c - 48;
              } else if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                assert(false, "Invalid character in " + string);
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this._strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var b = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  b = c - 49 + 10;
                } else if (c >= 17) {
                  b = c - 17 + 10;
                } else {
                  b = c;
                }
                assert(c >= 0 && b < mul, "Invalid character");
                r += b;
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this._strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            function move(dest, src) {
              dest.words = src.words;
              dest.length = src.length;
              dest.negative = src.negative;
              dest.red = src.red;
            }
            BN.prototype._move = function _move(dest) {
              move(dest, this);
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype._strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            if (typeof Symbol !== "undefined" && typeof Symbol.for === "function") {
              try {
                BN.prototype[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = inspect;
              } catch (e) {
                BN.prototype.inspect = inspect;
              }
            } else {
              BN.prototype.inspect = inspect;
            }
            function inspect() {
              return (this.red ? "";
            }
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modrn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16, 2);
            };
            if (Buffer2) {
              BN.prototype.toBuffer = function toBuffer2(endian, length) {
                return this.toArrayLike(Buffer2, endian, length);
              };
            }
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            var allocate = function allocate2(ArrayType, size) {
              if (ArrayType.allocUnsafe) {
                return ArrayType.allocUnsafe(size);
              }
              return new ArrayType(size);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              this._strip();
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              var res = allocate(ArrayType, reqLength);
              var postfix = endian === "le" ? "LE" : "BE";
              this["_toArrayLike" + postfix](res, byteLength2);
              return res;
            };
            BN.prototype._toArrayLikeLE = function _toArrayLikeLE(res, byteLength2) {
              var position = 0;
              var carry = 0;
              for (var i2 = 0, shift = 0; i2 < this.length; i2++) {
                var word = this.words[i2] << shift | carry;
                res[position++] = word & 255;
                if (position < res.length) {
                  res[position++] = word >> 8 & 255;
                }
                if (position < res.length) {
                  res[position++] = word >> 16 & 255;
                }
                if (shift === 6) {
                  if (position < res.length) {
                    res[position++] = word >> 24 & 255;
                  }
                  carry = 0;
                  shift = 0;
                } else {
                  carry = word >>> 24;
                  shift += 2;
                }
              }
              if (position < res.length) {
                res[position++] = carry;
                while (position < res.length) {
                  res[position++] = 0;
                }
              }
            };
            BN.prototype._toArrayLikeBE = function _toArrayLikeBE(res, byteLength2) {
              var position = res.length - 1;
              var carry = 0;
              for (var i2 = 0, shift = 0; i2 < this.length; i2++) {
                var word = this.words[i2] << shift | carry;
                res[position--] = word & 255;
                if (position >= 0) {
                  res[position--] = word >> 8 & 255;
                }
                if (position >= 0) {
                  res[position--] = word >> 16 & 255;
                }
                if (shift === 6) {
                  if (position >= 0) {
                    res[position--] = word >> 24 & 255;
                  }
                  carry = 0;
                  shift = 0;
                } else {
                  carry = word >>> 24;
                  shift += 2;
                }
              }
              if (position >= 0) {
                res[position--] = carry;
                while (position >= 0) {
                  res[position--] = 0;
                }
              }
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = num.words[off] >>> wbit & 1;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this._strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this._strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this._strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this._strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this._strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this._strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out._strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out._strip();
            }
            function jumboMulTo(self2, num, out) {
              return bigMulTo(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              var isNegNum = num < 0;
              if (isNegNum) num = -num;
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return isNegNum ? this.ineg() : this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this._strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this._strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this._strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) <= num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this._strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this._strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this._strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q._strip();
              }
              a._strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modrn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modrn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modrn = function modrn(num) {
              var isNegNum = num < 0;
              if (isNegNum) num = -num;
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return isNegNum ? -acc : acc;
            };
            BN.prototype.modn = function modn(num) {
              return this.modrn(num);
            };
            BN.prototype.idivn = function idivn(num) {
              var isNegNum = num < 0;
              if (isNegNum) num = -num;
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              this._strip();
              return isNegNum ? this.ineg() : this;
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this._strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              move(a, a.umod(this.m)._forceRed(this));
              return a;
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn$8);
        })(bn$9);
        return bn$9.exports;
      }
      var safeBuffer$1 = { exports: {} };
      var hasRequiredSafeBuffer$1;
      function requireSafeBuffer$1() {
        if (hasRequiredSafeBuffer$1) return safeBuffer$1.exports;
        hasRequiredSafeBuffer$1 = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer$1, safeBuffer$1.exports);
        return safeBuffer$1.exports;
      }
      var browserifyRsa;
      var hasRequiredBrowserifyRsa;
      function requireBrowserifyRsa() {
        if (hasRequiredBrowserifyRsa) return browserifyRsa;
        hasRequiredBrowserifyRsa = 1;
        var BN = requireBn$4();
        var randomBytes = requireBrowser$b();
        var Buffer2 = requireSafeBuffer$1().Buffer;
        function getr(priv) {
          var len2 = priv.modulus.byteLength();
          var r;
          do {
            r = new BN(randomBytes(len2));
          } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2));
          return r;
        }
        function blind(priv) {
          var r = getr(priv);
          var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed();
          return { blinder, unblinder: r.invm(priv.modulus) };
        }
        function crt(msg, priv) {
          var blinds = blind(priv);
          var len2 = priv.modulus.byteLength();
          var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus);
          var c1 = blinded.toRed(BN.mont(priv.prime1));
          var c2 = blinded.toRed(BN.mont(priv.prime2));
          var qinv = priv.coefficient;
          var p = priv.prime1;
          var q = priv.prime2;
          var m1 = c1.redPow(priv.exponent1).fromRed();
          var m2 = c2.redPow(priv.exponent2).fromRed();
          var h = m1.isub(m2).imul(qinv).umod(p).imul(q);
          return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer2, "be", len2);
        }
        crt.getr = getr;
        browserifyRsa = crt;
        return browserifyRsa;
      }
      var elliptic = {};
      const version = "6.6.1";
      const require$$0 = {
        version
      };
      var utils$2 = {};
      var bn$7 = { exports: {} };
      var bn$6 = bn$7.exports;
      var hasRequiredBn$3;
      function requireBn$3() {
        if (hasRequiredBn$3) return bn$7.exports;
        hasRequiredBn$3 = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this.strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                return c - 48 & 15;
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this.strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  r += c - 49 + 10;
                } else if (c >= 17) {
                  r += c - 17 + 10;
                } else {
                  r += c;
                }
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this.strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype.strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            BN.prototype.inspect = function inspect() {
              return (this.red ? "";
            };
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16);
            };
            BN.prototype.toBuffer = function toBuffer2(endian, length) {
              assert(typeof Buffer2 !== "undefined");
              return this.toArrayLike(Buffer2, endian, length);
            };
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              this.strip();
              var littleEndian = endian === "le";
              var res = new ArrayType(reqLength);
              var b, i2;
              var q = this.clone();
              if (!littleEndian) {
                for (i2 = 0; i2 < reqLength - byteLength2; i2++) {
                  res[i2] = 0;
                }
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[reqLength - i2 - 1] = b;
                }
              } else {
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[i2] = b;
                }
                for (; i2 < reqLength; i2++) {
                  res[i2] = 0;
                }
              }
              return res;
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this.strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this.strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this.strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this.strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this.strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this.strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out.strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out.strip();
            }
            function jumboMulTo(self2, num, out) {
              var fftm = new FFTM();
              return fftm.mulp(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            function FFTM(x, y) {
              this.x = x;
              this.y = y;
            }
            FFTM.prototype.makeRBT = function makeRBT(N) {
              var t = new Array(N);
              var l = BN.prototype._countBits(N) - 1;
              for (var i2 = 0; i2 < N; i2++) {
                t[i2] = this.revBin(i2, l, N);
              }
              return t;
            };
            FFTM.prototype.revBin = function revBin(x, l, N) {
              if (x === 0 || x === N - 1) return x;
              var rb = 0;
              for (var i2 = 0; i2 < l; i2++) {
                rb |= (x & 1) << l - i2 - 1;
                x >>= 1;
              }
              return rb;
            };
            FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
              for (var i2 = 0; i2 < N; i2++) {
                rtws[i2] = rws[rbt[i2]];
                itws[i2] = iws[rbt[i2]];
              }
            };
            FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
              this.permute(rbt, rws, iws, rtws, itws, N);
              for (var s = 1; s < N; s <<= 1) {
                var l = s << 1;
                var rtwdf = Math.cos(2 * Math.PI / l);
                var itwdf = Math.sin(2 * Math.PI / l);
                for (var p = 0; p < N; p += l) {
                  var rtwdf_ = rtwdf;
                  var itwdf_ = itwdf;
                  for (var j = 0; j < s; j++) {
                    var re = rtws[p + j];
                    var ie = itws[p + j];
                    var ro = rtws[p + j + s];
                    var io = itws[p + j + s];
                    var rx = rtwdf_ * ro - itwdf_ * io;
                    io = rtwdf_ * io + itwdf_ * ro;
                    ro = rx;
                    rtws[p + j] = re + ro;
                    itws[p + j] = ie + io;
                    rtws[p + j + s] = re - ro;
                    itws[p + j + s] = ie - io;
                    if (j !== l) {
                      rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                      itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                      rtwdf_ = rx;
                    }
                  }
                }
              }
            };
            FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
              var N = Math.max(m, n) | 1;
              var odd = N & 1;
              var i2 = 0;
              for (N = N / 2 | 0; N; N = N >>> 1) {
                i2++;
              }
              return 1 << i2 + 1 + odd;
            };
            FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
              if (N <= 1) return;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var t = rws[i2];
                rws[i2] = rws[N - i2 - 1];
                rws[N - i2 - 1] = t;
                t = iws[i2];
                iws[i2] = -iws[N - i2 - 1];
                iws[N - i2 - 1] = -t;
              }
            };
            FFTM.prototype.normalize13b = function normalize13b(ws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var w = Math.round(ws[2 * i2 + 1] / N) * 8192 + Math.round(ws[2 * i2] / N) + carry;
                ws[i2] = w & 67108863;
                if (w < 67108864) {
                  carry = 0;
                } else {
                  carry = w / 67108864 | 0;
                }
              }
              return ws;
            };
            FFTM.prototype.convert13b = function convert13b(ws, len2, rws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < len2; i2++) {
                carry = carry + (ws[i2] | 0);
                rws[2 * i2] = carry & 8191;
                carry = carry >>> 13;
                rws[2 * i2 + 1] = carry & 8191;
                carry = carry >>> 13;
              }
              for (i2 = 2 * len2; i2 < N; ++i2) {
                rws[i2] = 0;
              }
              assert(carry === 0);
              assert((carry & -8192) === 0);
            };
            FFTM.prototype.stub = function stub(N) {
              var ph = new Array(N);
              for (var i2 = 0; i2 < N; i2++) {
                ph[i2] = 0;
              }
              return ph;
            };
            FFTM.prototype.mulp = function mulp(x, y, out) {
              var N = 2 * this.guessLen13b(x.length, y.length);
              var rbt = this.makeRBT(N);
              var _ = this.stub(N);
              var rws = new Array(N);
              var rwst = new Array(N);
              var iwst = new Array(N);
              var nrws = new Array(N);
              var nrwst = new Array(N);
              var niwst = new Array(N);
              var rmws = out.words;
              rmws.length = N;
              this.convert13b(x.words, x.length, rws, N);
              this.convert13b(y.words, y.length, nrws, N);
              this.transform(rws, _, rwst, iwst, N, rbt);
              this.transform(nrws, _, nrwst, niwst, N, rbt);
              for (var i2 = 0; i2 < N; i2++) {
                var rx = rwst[i2] * nrwst[i2] - iwst[i2] * niwst[i2];
                iwst[i2] = rwst[i2] * niwst[i2] + iwst[i2] * nrwst[i2];
                rwst[i2] = rx;
              }
              this.conjugate(rwst, iwst, N);
              this.transform(rwst, iwst, rmws, _, N, rbt);
              this.conjugate(rmws, _, N);
              this.normalize13b(rmws, N);
              out.negative = x.negative ^ y.negative;
              out.length = x.length + y.length;
              return out.strip();
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this.strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this.strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this.strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) < num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this.strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this.strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this.strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q.strip();
              }
              a.strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modn = function modn(num) {
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return acc;
            };
            BN.prototype.idivn = function idivn(num) {
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              return this.strip();
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this.strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              return a.umod(this.m)._forceRed(this);
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn$6);
        })(bn$7);
        return bn$7.exports;
      }
      var utils$1 = {};
      var hasRequiredUtils$2;
      function requireUtils$2() {
        if (hasRequiredUtils$2) return utils$1;
        hasRequiredUtils$2 = 1;
        (function(exports$12) {
          var utils2 = exports$12;
          function toArray(msg, enc) {
            if (Array.isArray(msg))
              return msg.slice();
            if (!msg)
              return [];
            var res = [];
            if (typeof msg !== "string") {
              for (var i2 = 0; i2 < msg.length; i2++)
                res[i2] = msg[i2] | 0;
              return res;
            }
            if (enc === "hex") {
              msg = msg.replace(/[^a-z0-9]+/ig, "");
              if (msg.length % 2 !== 0)
                msg = "0" + msg;
              for (var i2 = 0; i2 < msg.length; i2 += 2)
                res.push(parseInt(msg[i2] + msg[i2 + 1], 16));
            } else {
              for (var i2 = 0; i2 < msg.length; i2++) {
                var c = msg.charCodeAt(i2);
                var hi = c >> 8;
                var lo = c & 255;
                if (hi)
                  res.push(hi, lo);
                else
                  res.push(lo);
              }
            }
            return res;
          }
          utils2.toArray = toArray;
          function zero2(word) {
            if (word.length === 1)
              return "0" + word;
            else
              return word;
          }
          utils2.zero2 = zero2;
          function toHex(msg) {
            var res = "";
            for (var i2 = 0; i2 < msg.length; i2++)
              res += zero2(msg[i2].toString(16));
            return res;
          }
          utils2.toHex = toHex;
          utils2.encode = function encode2(arr, enc) {
            if (enc === "hex")
              return toHex(arr);
            else
              return arr;
          };
        })(utils$1);
        return utils$1;
      }
      var hasRequiredUtils$1;
      function requireUtils$1() {
        if (hasRequiredUtils$1) return utils$2;
        hasRequiredUtils$1 = 1;
        (function(exports$12) {
          var utils2 = exports$12;
          var BN = requireBn$3();
          var minAssert = requireMinimalisticAssert();
          var minUtils = requireUtils$2();
          utils2.assert = minAssert;
          utils2.toArray = minUtils.toArray;
          utils2.zero2 = minUtils.zero2;
          utils2.toHex = minUtils.toHex;
          utils2.encode = minUtils.encode;
          function getNAF(num, w, bits) {
            var naf = new Array(Math.max(num.bitLength(), bits) + 1);
            var i2;
            for (i2 = 0; i2 < naf.length; i2 += 1) {
              naf[i2] = 0;
            }
            var ws = 1 << w + 1;
            var k = num.clone();
            for (i2 = 0; i2 < naf.length; i2++) {
              var z;
              var mod = k.andln(ws - 1);
              if (k.isOdd()) {
                if (mod > (ws >> 1) - 1)
                  z = (ws >> 1) - mod;
                else
                  z = mod;
                k.isubn(z);
              } else {
                z = 0;
              }
              naf[i2] = z;
              k.iushrn(1);
            }
            return naf;
          }
          utils2.getNAF = getNAF;
          function getJSF(k1, k2) {
            var jsf = [
              [],
              []
            ];
            k1 = k1.clone();
            k2 = k2.clone();
            var d1 = 0;
            var d2 = 0;
            var m8;
            while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
              var m14 = k1.andln(3) + d1 & 3;
              var m24 = k2.andln(3) + d2 & 3;
              if (m14 === 3)
                m14 = -1;
              if (m24 === 3)
                m24 = -1;
              var u1;
              if ((m14 & 1) === 0) {
                u1 = 0;
              } else {
                m8 = k1.andln(7) + d1 & 7;
                if ((m8 === 3 || m8 === 5) && m24 === 2)
                  u1 = -m14;
                else
                  u1 = m14;
              }
              jsf[0].push(u1);
              var u2;
              if ((m24 & 1) === 0) {
                u2 = 0;
              } else {
                m8 = k2.andln(7) + d2 & 7;
                if ((m8 === 3 || m8 === 5) && m14 === 2)
                  u2 = -m24;
                else
                  u2 = m24;
              }
              jsf[1].push(u2);
              if (2 * d1 === u1 + 1)
                d1 = 1 - d1;
              if (2 * d2 === u2 + 1)
                d2 = 1 - d2;
              k1.iushrn(1);
              k2.iushrn(1);
            }
            return jsf;
          }
          utils2.getJSF = getJSF;
          function cachedProperty(obj, name, computer) {
            var key2 = "_" + name;
            obj.prototype[name] = function cachedProperty2() {
              return this[key2] !== void 0 ? this[key2] : this[key2] = computer.call(this);
            };
          }
          utils2.cachedProperty = cachedProperty;
          function parseBytes(bytes) {
            return typeof bytes === "string" ? utils2.toArray(bytes, "hex") : bytes;
          }
          utils2.parseBytes = parseBytes;
          function intFromLE(bytes) {
            return new BN(bytes, "hex", "le");
          }
          utils2.intFromLE = intFromLE;
        })(utils$2);
        return utils$2;
      }
      var curve = {};
      var base$1;
      var hasRequiredBase$1;
      function requireBase$1() {
        if (hasRequiredBase$1) return base$1;
        hasRequiredBase$1 = 1;
        var BN = requireBn$3();
        var utils2 = requireUtils$1();
        var getNAF = utils2.getNAF;
        var getJSF = utils2.getJSF;
        var assert = utils2.assert;
        function BaseCurve(type2, conf) {
          this.type = type2;
          this.p = new BN(conf.p, 16);
          this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
          this.zero = new BN(0).toRed(this.red);
          this.one = new BN(1).toRed(this.red);
          this.two = new BN(2).toRed(this.red);
          this.n = conf.n && new BN(conf.n, 16);
          this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
          this._wnafT1 = new Array(4);
          this._wnafT2 = new Array(4);
          this._wnafT3 = new Array(4);
          this._wnafT4 = new Array(4);
          this._bitLength = this.n ? this.n.bitLength() : 0;
          var adjustCount = this.n && this.p.div(this.n);
          if (!adjustCount || adjustCount.cmpn(100) > 0) {
            this.redN = null;
          } else {
            this._maxwellTrick = true;
            this.redN = this.n.toRed(this.red);
          }
        }
        base$1 = BaseCurve;
        BaseCurve.prototype.point = function point() {
          throw new Error("Not implemented");
        };
        BaseCurve.prototype.validate = function validate() {
          throw new Error("Not implemented");
        };
        BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
          assert(p.precomputed);
          var doubles = p._getDoubles();
          var naf = getNAF(k, 1, this._bitLength);
          var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1);
          I /= 3;
          var repr = [];
          var j;
          var nafW;
          for (j = 0; j < naf.length; j += doubles.step) {
            nafW = 0;
            for (var l = j + doubles.step - 1; l >= j; l--)
              nafW = (nafW << 1) + naf[l];
            repr.push(nafW);
          }
          var a = this.jpoint(null, null, null);
          var b = this.jpoint(null, null, null);
          for (var i2 = I; i2 > 0; i2--) {
            for (j = 0; j < repr.length; j++) {
              nafW = repr[j];
              if (nafW === i2)
                b = b.mixedAdd(doubles.points[j]);
              else if (nafW === -i2)
                b = b.mixedAdd(doubles.points[j].neg());
            }
            a = a.add(b);
          }
          return a.toP();
        };
        BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
          var w = 4;
          var nafPoints = p._getNAFPoints(w);
          w = nafPoints.wnd;
          var wnd = nafPoints.points;
          var naf = getNAF(k, w, this._bitLength);
          var acc = this.jpoint(null, null, null);
          for (var i2 = naf.length - 1; i2 >= 0; i2--) {
            for (var l = 0; i2 >= 0 && naf[i2] === 0; i2--)
              l++;
            if (i2 >= 0)
              l++;
            acc = acc.dblp(l);
            if (i2 < 0)
              break;
            var z = naf[i2];
            assert(z !== 0);
            if (p.type === "affine") {
              if (z > 0)
                acc = acc.mixedAdd(wnd[z - 1 >> 1]);
              else
                acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg());
            } else {
              if (z > 0)
                acc = acc.add(wnd[z - 1 >> 1]);
              else
                acc = acc.add(wnd[-z - 1 >> 1].neg());
            }
          }
          return p.type === "affine" ? acc.toP() : acc;
        };
        BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len2, jacobianResult) {
          var wndWidth = this._wnafT1;
          var wnd = this._wnafT2;
          var naf = this._wnafT3;
          var max2 = 0;
          var i2;
          var j;
          var p;
          for (i2 = 0; i2 < len2; i2++) {
            p = points[i2];
            var nafPoints = p._getNAFPoints(defW);
            wndWidth[i2] = nafPoints.wnd;
            wnd[i2] = nafPoints.points;
          }
          for (i2 = len2 - 1; i2 >= 1; i2 -= 2) {
            var a = i2 - 1;
            var b = i2;
            if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
              naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);
              naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);
              max2 = Math.max(naf[a].length, max2);
              max2 = Math.max(naf[b].length, max2);
              continue;
            }
            var comb = [
              points[a],
              /* 1 */
              null,
              /* 3 */
              null,
              /* 5 */
              points[b]
              /* 7 */
            ];
            if (points[a].y.cmp(points[b].y) === 0) {
              comb[1] = points[a].add(points[b]);
              comb[2] = points[a].toJ().mixedAdd(points[b].neg());
            } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
              comb[1] = points[a].toJ().mixedAdd(points[b]);
              comb[2] = points[a].add(points[b].neg());
            } else {
              comb[1] = points[a].toJ().mixedAdd(points[b]);
              comb[2] = points[a].toJ().mixedAdd(points[b].neg());
            }
            var index = [
              -3,
              /* -1 -1 */
              -1,
              /* -1 0 */
              -5,
              /* -1 1 */
              -7,
              /* 0 -1 */
              0,
              /* 0 0 */
              7,
              /* 0 1 */
              5,
              /* 1 -1 */
              1,
              /* 1 0 */
              3
              /* 1 1 */
            ];
            var jsf = getJSF(coeffs[a], coeffs[b]);
            max2 = Math.max(jsf[0].length, max2);
            naf[a] = new Array(max2);
            naf[b] = new Array(max2);
            for (j = 0; j < max2; j++) {
              var ja = jsf[0][j] | 0;
              var jb = jsf[1][j] | 0;
              naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
              naf[b][j] = 0;
              wnd[a] = comb;
            }
          }
          var acc = this.jpoint(null, null, null);
          var tmp = this._wnafT4;
          for (i2 = max2; i2 >= 0; i2--) {
            var k = 0;
            while (i2 >= 0) {
              var zero = true;
              for (j = 0; j < len2; j++) {
                tmp[j] = naf[j][i2] | 0;
                if (tmp[j] !== 0)
                  zero = false;
              }
              if (!zero)
                break;
              k++;
              i2--;
            }
            if (i2 >= 0)
              k++;
            acc = acc.dblp(k);
            if (i2 < 0)
              break;
            for (j = 0; j < len2; j++) {
              var z = tmp[j];
              if (z === 0)
                continue;
              else if (z > 0)
                p = wnd[j][z - 1 >> 1];
              else if (z < 0)
                p = wnd[j][-z - 1 >> 1].neg();
              if (p.type === "affine")
                acc = acc.mixedAdd(p);
              else
                acc = acc.add(p);
            }
          }
          for (i2 = 0; i2 < len2; i2++)
            wnd[i2] = null;
          if (jacobianResult)
            return acc;
          else
            return acc.toP();
        };
        function BasePoint(curve2, type2) {
          this.curve = curve2;
          this.type = type2;
          this.precomputed = null;
        }
        BaseCurve.BasePoint = BasePoint;
        BasePoint.prototype.eq = function eq() {
          throw new Error("Not implemented");
        };
        BasePoint.prototype.validate = function validate() {
          return this.curve.validate(this);
        };
        BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
          bytes = utils2.toArray(bytes, enc);
          var len2 = this.p.byteLength();
          if ((bytes[0] === 4 || bytes[0] === 6 || bytes[0] === 7) && bytes.length - 1 === 2 * len2) {
            if (bytes[0] === 6)
              assert(bytes[bytes.length - 1] % 2 === 0);
            else if (bytes[0] === 7)
              assert(bytes[bytes.length - 1] % 2 === 1);
            var res = this.point(
              bytes.slice(1, 1 + len2),
              bytes.slice(1 + len2, 1 + 2 * len2)
            );
            return res;
          } else if ((bytes[0] === 2 || bytes[0] === 3) && bytes.length - 1 === len2) {
            return this.pointFromX(bytes.slice(1, 1 + len2), bytes[0] === 3);
          }
          throw new Error("Unknown point format");
        };
        BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
          return this.encode(enc, true);
        };
        BasePoint.prototype._encode = function _encode(compact) {
          var len2 = this.curve.p.byteLength();
          var x = this.getX().toArray("be", len2);
          if (compact)
            return [this.getY().isEven() ? 2 : 3].concat(x);
          return [4].concat(x, this.getY().toArray("be", len2));
        };
        BasePoint.prototype.encode = function encode2(enc, compact) {
          return utils2.encode(this._encode(compact), enc);
        };
        BasePoint.prototype.precompute = function precompute(power) {
          if (this.precomputed)
            return this;
          var precomputed = {
            doubles: null,
            naf: null,
            beta: null
          };
          precomputed.naf = this._getNAFPoints(8);
          precomputed.doubles = this._getDoubles(4, power);
          precomputed.beta = this._getBeta();
          this.precomputed = precomputed;
          return this;
        };
        BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
          if (!this.precomputed)
            return false;
          var doubles = this.precomputed.doubles;
          if (!doubles)
            return false;
          return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
        };
        BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
          if (this.precomputed && this.precomputed.doubles)
            return this.precomputed.doubles;
          var doubles = [this];
          var acc = this;
          for (var i2 = 0; i2 < power; i2 += step) {
            for (var j = 0; j < step; j++)
              acc = acc.dbl();
            doubles.push(acc);
          }
          return {
            step,
            points: doubles
          };
        };
        BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
          if (this.precomputed && this.precomputed.naf)
            return this.precomputed.naf;
          var res = [this];
          var max2 = (1 << wnd) - 1;
          var dbl = max2 === 1 ? null : this.dbl();
          for (var i2 = 1; i2 < max2; i2++)
            res[i2] = res[i2 - 1].add(dbl);
          return {
            wnd,
            points: res
          };
        };
        BasePoint.prototype._getBeta = function _getBeta() {
          return null;
        };
        BasePoint.prototype.dblp = function dblp(k) {
          var r = this;
          for (var i2 = 0; i2 < k; i2++)
            r = r.dbl();
          return r;
        };
        return base$1;
      }
      var short;
      var hasRequiredShort;
      function requireShort() {
        if (hasRequiredShort) return short;
        hasRequiredShort = 1;
        var utils2 = requireUtils$1();
        var BN = requireBn$3();
        var inherits = requireInherits_browser();
        var Base = requireBase$1();
        var assert = utils2.assert;
        function ShortCurve(conf) {
          Base.call(this, "short", conf);
          this.a = new BN(conf.a, 16).toRed(this.red);
          this.b = new BN(conf.b, 16).toRed(this.red);
          this.tinv = this.two.redInvm();
          this.zeroA = this.a.fromRed().cmpn(0) === 0;
          this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
          this.endo = this._getEndomorphism(conf);
          this._endoWnafT1 = new Array(4);
          this._endoWnafT2 = new Array(4);
        }
        inherits(ShortCurve, Base);
        short = ShortCurve;
        ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
          if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
            return;
          var beta;
          var lambda;
          if (conf.beta) {
            beta = new BN(conf.beta, 16).toRed(this.red);
          } else {
            var betas = this._getEndoRoots(this.p);
            beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
            beta = beta.toRed(this.red);
          }
          if (conf.lambda) {
            lambda = new BN(conf.lambda, 16);
          } else {
            var lambdas = this._getEndoRoots(this.n);
            if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
              lambda = lambdas[0];
            } else {
              lambda = lambdas[1];
              assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
            }
          }
          var basis;
          if (conf.basis) {
            basis = conf.basis.map(function(vec) {
              return {
                a: new BN(vec.a, 16),
                b: new BN(vec.b, 16)
              };
            });
          } else {
            basis = this._getEndoBasis(lambda);
          }
          return {
            beta,
            lambda,
            basis
          };
        };
        ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
          var red = num === this.p ? this.red : BN.mont(num);
          var tinv = new BN(2).toRed(red).redInvm();
          var ntinv = tinv.redNeg();
          var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
          var l1 = ntinv.redAdd(s).fromRed();
          var l2 = ntinv.redSub(s).fromRed();
          return [l1, l2];
        };
        ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
          var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
          var u = lambda;
          var v = this.n.clone();
          var x1 = new BN(1);
          var y1 = new BN(0);
          var x2 = new BN(0);
          var y2 = new BN(1);
          var a0;
          var b0;
          var a1;
          var b1;
          var a2;
          var b2;
          var prevR;
          var i2 = 0;
          var r;
          var x;
          while (u.cmpn(0) !== 0) {
            var q = v.div(u);
            r = v.sub(q.mul(u));
            x = x2.sub(q.mul(x1));
            var y = y2.sub(q.mul(y1));
            if (!a1 && r.cmp(aprxSqrt) < 0) {
              a0 = prevR.neg();
              b0 = x1;
              a1 = r.neg();
              b1 = x;
            } else if (a1 && ++i2 === 2) {
              break;
            }
            prevR = r;
            v = u;
            u = r;
            x2 = x1;
            x1 = x;
            y2 = y1;
            y1 = y;
          }
          a2 = r.neg();
          b2 = x;
          var len1 = a1.sqr().add(b1.sqr());
          var len2 = a2.sqr().add(b2.sqr());
          if (len2.cmp(len1) >= 0) {
            a2 = a0;
            b2 = b0;
          }
          if (a1.negative) {
            a1 = a1.neg();
            b1 = b1.neg();
          }
          if (a2.negative) {
            a2 = a2.neg();
            b2 = b2.neg();
          }
          return [
            { a: a1, b: b1 },
            { a: a2, b: b2 }
          ];
        };
        ShortCurve.prototype._endoSplit = function _endoSplit(k) {
          var basis = this.endo.basis;
          var v1 = basis[0];
          var v2 = basis[1];
          var c1 = v2.b.mul(k).divRound(this.n);
          var c2 = v1.b.neg().mul(k).divRound(this.n);
          var p1 = c1.mul(v1.a);
          var p2 = c2.mul(v2.a);
          var q1 = c1.mul(v1.b);
          var q2 = c2.mul(v2.b);
          var k1 = k.sub(p1).sub(p2);
          var k2 = q1.add(q2).neg();
          return { k1, k2 };
        };
        ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
          x = new BN(x, 16);
          if (!x.red)
            x = x.toRed(this.red);
          var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
          var y = y2.redSqrt();
          if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
            throw new Error("invalid point");
          var isOdd = y.fromRed().isOdd();
          if (odd && !isOdd || !odd && isOdd)
            y = y.redNeg();
          return this.point(x, y);
        };
        ShortCurve.prototype.validate = function validate(point) {
          if (point.inf)
            return true;
          var x = point.x;
          var y = point.y;
          var ax = this.a.redMul(x);
          var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
          return y.redSqr().redISub(rhs).cmpn(0) === 0;
        };
        ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) {
          var npoints = this._endoWnafT1;
          var ncoeffs = this._endoWnafT2;
          for (var i2 = 0; i2 < points.length; i2++) {
            var split = this._endoSplit(coeffs[i2]);
            var p = points[i2];
            var beta = p._getBeta();
            if (split.k1.negative) {
              split.k1.ineg();
              p = p.neg(true);
            }
            if (split.k2.negative) {
              split.k2.ineg();
              beta = beta.neg(true);
            }
            npoints[i2 * 2] = p;
            npoints[i2 * 2 + 1] = beta;
            ncoeffs[i2 * 2] = split.k1;
            ncoeffs[i2 * 2 + 1] = split.k2;
          }
          var res = this._wnafMulAdd(1, npoints, ncoeffs, i2 * 2, jacobianResult);
          for (var j = 0; j < i2 * 2; j++) {
            npoints[j] = null;
            ncoeffs[j] = null;
          }
          return res;
        };
        function Point(curve2, x, y, isRed) {
          Base.BasePoint.call(this, curve2, "affine");
          if (x === null && y === null) {
            this.x = null;
            this.y = null;
            this.inf = true;
          } else {
            this.x = new BN(x, 16);
            this.y = new BN(y, 16);
            if (isRed) {
              this.x.forceRed(this.curve.red);
              this.y.forceRed(this.curve.red);
            }
            if (!this.x.red)
              this.x = this.x.toRed(this.curve.red);
            if (!this.y.red)
              this.y = this.y.toRed(this.curve.red);
            this.inf = false;
          }
        }
        inherits(Point, Base.BasePoint);
        ShortCurve.prototype.point = function point(x, y, isRed) {
          return new Point(this, x, y, isRed);
        };
        ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
          return Point.fromJSON(this, obj, red);
        };
        Point.prototype._getBeta = function _getBeta() {
          if (!this.curve.endo)
            return;
          var pre = this.precomputed;
          if (pre && pre.beta)
            return pre.beta;
          var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
          if (pre) {
            var curve2 = this.curve;
            var endoMul = function(p) {
              return curve2.point(p.x.redMul(curve2.endo.beta), p.y);
            };
            pre.beta = beta;
            beta.precomputed = {
              beta: null,
              naf: pre.naf && {
                wnd: pre.naf.wnd,
                points: pre.naf.points.map(endoMul)
              },
              doubles: pre.doubles && {
                step: pre.doubles.step,
                points: pre.doubles.points.map(endoMul)
              }
            };
          }
          return beta;
        };
        Point.prototype.toJSON = function toJSON() {
          if (!this.precomputed)
            return [this.x, this.y];
          return [this.x, this.y, this.precomputed && {
            doubles: this.precomputed.doubles && {
              step: this.precomputed.doubles.step,
              points: this.precomputed.doubles.points.slice(1)
            },
            naf: this.precomputed.naf && {
              wnd: this.precomputed.naf.wnd,
              points: this.precomputed.naf.points.slice(1)
            }
          }];
        };
        Point.fromJSON = function fromJSON(curve2, obj, red) {
          if (typeof obj === "string")
            obj = JSON.parse(obj);
          var res = curve2.point(obj[0], obj[1], red);
          if (!obj[2])
            return res;
          function obj2point(obj2) {
            return curve2.point(obj2[0], obj2[1], red);
          }
          var pre = obj[2];
          res.precomputed = {
            beta: null,
            doubles: pre.doubles && {
              step: pre.doubles.step,
              points: [res].concat(pre.doubles.points.map(obj2point))
            },
            naf: pre.naf && {
              wnd: pre.naf.wnd,
              points: [res].concat(pre.naf.points.map(obj2point))
            }
          };
          return res;
        };
        Point.prototype.inspect = function inspect() {
          if (this.isInfinity())
            return "";
          return "";
        };
        Point.prototype.isInfinity = function isInfinity() {
          return this.inf;
        };
        Point.prototype.add = function add(p) {
          if (this.inf)
            return p;
          if (p.inf)
            return this;
          if (this.eq(p))
            return this.dbl();
          if (this.neg().eq(p))
            return this.curve.point(null, null);
          if (this.x.cmp(p.x) === 0)
            return this.curve.point(null, null);
          var c = this.y.redSub(p.y);
          if (c.cmpn(0) !== 0)
            c = c.redMul(this.x.redSub(p.x).redInvm());
          var nx = c.redSqr().redISub(this.x).redISub(p.x);
          var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
          return this.curve.point(nx, ny);
        };
        Point.prototype.dbl = function dbl() {
          if (this.inf)
            return this;
          var ys1 = this.y.redAdd(this.y);
          if (ys1.cmpn(0) === 0)
            return this.curve.point(null, null);
          var a = this.curve.a;
          var x2 = this.x.redSqr();
          var dyinv = ys1.redInvm();
          var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
          var nx = c.redSqr().redISub(this.x.redAdd(this.x));
          var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
          return this.curve.point(nx, ny);
        };
        Point.prototype.getX = function getX() {
          return this.x.fromRed();
        };
        Point.prototype.getY = function getY() {
          return this.y.fromRed();
        };
        Point.prototype.mul = function mul(k) {
          k = new BN(k, 16);
          if (this.isInfinity())
            return this;
          else if (this._hasDoubles(k))
            return this.curve._fixedNafMul(this, k);
          else if (this.curve.endo)
            return this.curve._endoWnafMulAdd([this], [k]);
          else
            return this.curve._wnafMul(this, k);
        };
        Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
          var points = [this, p2];
          var coeffs = [k1, k2];
          if (this.curve.endo)
            return this.curve._endoWnafMulAdd(points, coeffs);
          else
            return this.curve._wnafMulAdd(1, points, coeffs, 2);
        };
        Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
          var points = [this, p2];
          var coeffs = [k1, k2];
          if (this.curve.endo)
            return this.curve._endoWnafMulAdd(points, coeffs, true);
          else
            return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
        };
        Point.prototype.eq = function eq(p) {
          return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
        };
        Point.prototype.neg = function neg(_precompute) {
          if (this.inf)
            return this;
          var res = this.curve.point(this.x, this.y.redNeg());
          if (_precompute && this.precomputed) {
            var pre = this.precomputed;
            var negate = function(p) {
              return p.neg();
            };
            res.precomputed = {
              naf: pre.naf && {
                wnd: pre.naf.wnd,
                points: pre.naf.points.map(negate)
              },
              doubles: pre.doubles && {
                step: pre.doubles.step,
                points: pre.doubles.points.map(negate)
              }
            };
          }
          return res;
        };
        Point.prototype.toJ = function toJ() {
          if (this.inf)
            return this.curve.jpoint(null, null, null);
          var res = this.curve.jpoint(this.x, this.y, this.curve.one);
          return res;
        };
        function JPoint(curve2, x, y, z) {
          Base.BasePoint.call(this, curve2, "jacobian");
          if (x === null && y === null && z === null) {
            this.x = this.curve.one;
            this.y = this.curve.one;
            this.z = new BN(0);
          } else {
            this.x = new BN(x, 16);
            this.y = new BN(y, 16);
            this.z = new BN(z, 16);
          }
          if (!this.x.red)
            this.x = this.x.toRed(this.curve.red);
          if (!this.y.red)
            this.y = this.y.toRed(this.curve.red);
          if (!this.z.red)
            this.z = this.z.toRed(this.curve.red);
          this.zOne = this.z === this.curve.one;
        }
        inherits(JPoint, Base.BasePoint);
        ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
          return new JPoint(this, x, y, z);
        };
        JPoint.prototype.toP = function toP() {
          if (this.isInfinity())
            return this.curve.point(null, null);
          var zinv = this.z.redInvm();
          var zinv2 = zinv.redSqr();
          var ax = this.x.redMul(zinv2);
          var ay = this.y.redMul(zinv2).redMul(zinv);
          return this.curve.point(ax, ay);
        };
        JPoint.prototype.neg = function neg() {
          return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
        };
        JPoint.prototype.add = function add(p) {
          if (this.isInfinity())
            return p;
          if (p.isInfinity())
            return this;
          var pz2 = p.z.redSqr();
          var z2 = this.z.redSqr();
          var u1 = this.x.redMul(pz2);
          var u2 = p.x.redMul(z2);
          var s1 = this.y.redMul(pz2.redMul(p.z));
          var s2 = p.y.redMul(z2.redMul(this.z));
          var h = u1.redSub(u2);
          var r = s1.redSub(s2);
          if (h.cmpn(0) === 0) {
            if (r.cmpn(0) !== 0)
              return this.curve.jpoint(null, null, null);
            else
              return this.dbl();
          }
          var h2 = h.redSqr();
          var h3 = h2.redMul(h);
          var v = u1.redMul(h2);
          var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
          var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
          var nz = this.z.redMul(p.z).redMul(h);
          return this.curve.jpoint(nx, ny, nz);
        };
        JPoint.prototype.mixedAdd = function mixedAdd(p) {
          if (this.isInfinity())
            return p.toJ();
          if (p.isInfinity())
            return this;
          var z2 = this.z.redSqr();
          var u1 = this.x;
          var u2 = p.x.redMul(z2);
          var s1 = this.y;
          var s2 = p.y.redMul(z2).redMul(this.z);
          var h = u1.redSub(u2);
          var r = s1.redSub(s2);
          if (h.cmpn(0) === 0) {
            if (r.cmpn(0) !== 0)
              return this.curve.jpoint(null, null, null);
            else
              return this.dbl();
          }
          var h2 = h.redSqr();
          var h3 = h2.redMul(h);
          var v = u1.redMul(h2);
          var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
          var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
          var nz = this.z.redMul(h);
          return this.curve.jpoint(nx, ny, nz);
        };
        JPoint.prototype.dblp = function dblp(pow2) {
          if (pow2 === 0)
            return this;
          if (this.isInfinity())
            return this;
          if (!pow2)
            return this.dbl();
          var i2;
          if (this.curve.zeroA || this.curve.threeA) {
            var r = this;
            for (i2 = 0; i2 < pow2; i2++)
              r = r.dbl();
            return r;
          }
          var a = this.curve.a;
          var tinv = this.curve.tinv;
          var jx = this.x;
          var jy = this.y;
          var jz = this.z;
          var jz4 = jz.redSqr().redSqr();
          var jyd = jy.redAdd(jy);
          for (i2 = 0; i2 < pow2; i2++) {
            var jx2 = jx.redSqr();
            var jyd2 = jyd.redSqr();
            var jyd4 = jyd2.redSqr();
            var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
            var t1 = jx.redMul(jyd2);
            var nx = c.redSqr().redISub(t1.redAdd(t1));
            var t2 = t1.redISub(nx);
            var dny = c.redMul(t2);
            dny = dny.redIAdd(dny).redISub(jyd4);
            var nz = jyd.redMul(jz);
            if (i2 + 1 < pow2)
              jz4 = jz4.redMul(jyd4);
            jx = nx;
            jz = nz;
            jyd = dny;
          }
          return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
        };
        JPoint.prototype.dbl = function dbl() {
          if (this.isInfinity())
            return this;
          if (this.curve.zeroA)
            return this._zeroDbl();
          else if (this.curve.threeA)
            return this._threeDbl();
          else
            return this._dbl();
        };
        JPoint.prototype._zeroDbl = function _zeroDbl() {
          var nx;
          var ny;
          var nz;
          if (this.zOne) {
            var xx = this.x.redSqr();
            var yy = this.y.redSqr();
            var yyyy = yy.redSqr();
            var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
            s = s.redIAdd(s);
            var m = xx.redAdd(xx).redIAdd(xx);
            var t = m.redSqr().redISub(s).redISub(s);
            var yyyy8 = yyyy.redIAdd(yyyy);
            yyyy8 = yyyy8.redIAdd(yyyy8);
            yyyy8 = yyyy8.redIAdd(yyyy8);
            nx = t;
            ny = m.redMul(s.redISub(t)).redISub(yyyy8);
            nz = this.y.redAdd(this.y);
          } else {
            var a = this.x.redSqr();
            var b = this.y.redSqr();
            var c = b.redSqr();
            var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
            d = d.redIAdd(d);
            var e = a.redAdd(a).redIAdd(a);
            var f = e.redSqr();
            var c8 = c.redIAdd(c);
            c8 = c8.redIAdd(c8);
            c8 = c8.redIAdd(c8);
            nx = f.redISub(d).redISub(d);
            ny = e.redMul(d.redISub(nx)).redISub(c8);
            nz = this.y.redMul(this.z);
            nz = nz.redIAdd(nz);
          }
          return this.curve.jpoint(nx, ny, nz);
        };
        JPoint.prototype._threeDbl = function _threeDbl() {
          var nx;
          var ny;
          var nz;
          if (this.zOne) {
            var xx = this.x.redSqr();
            var yy = this.y.redSqr();
            var yyyy = yy.redSqr();
            var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
            s = s.redIAdd(s);
            var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
            var t = m.redSqr().redISub(s).redISub(s);
            nx = t;
            var yyyy8 = yyyy.redIAdd(yyyy);
            yyyy8 = yyyy8.redIAdd(yyyy8);
            yyyy8 = yyyy8.redIAdd(yyyy8);
            ny = m.redMul(s.redISub(t)).redISub(yyyy8);
            nz = this.y.redAdd(this.y);
          } else {
            var delta = this.z.redSqr();
            var gamma = this.y.redSqr();
            var beta = this.x.redMul(gamma);
            var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
            alpha = alpha.redAdd(alpha).redIAdd(alpha);
            var beta4 = beta.redIAdd(beta);
            beta4 = beta4.redIAdd(beta4);
            var beta8 = beta4.redAdd(beta4);
            nx = alpha.redSqr().redISub(beta8);
            nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
            var ggamma8 = gamma.redSqr();
            ggamma8 = ggamma8.redIAdd(ggamma8);
            ggamma8 = ggamma8.redIAdd(ggamma8);
            ggamma8 = ggamma8.redIAdd(ggamma8);
            ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
          }
          return this.curve.jpoint(nx, ny, nz);
        };
        JPoint.prototype._dbl = function _dbl() {
          var a = this.curve.a;
          var jx = this.x;
          var jy = this.y;
          var jz = this.z;
          var jz4 = jz.redSqr().redSqr();
          var jx2 = jx.redSqr();
          var jy2 = jy.redSqr();
          var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
          var jxd4 = jx.redAdd(jx);
          jxd4 = jxd4.redIAdd(jxd4);
          var t1 = jxd4.redMul(jy2);
          var nx = c.redSqr().redISub(t1.redAdd(t1));
          var t2 = t1.redISub(nx);
          var jyd8 = jy2.redSqr();
          jyd8 = jyd8.redIAdd(jyd8);
          jyd8 = jyd8.redIAdd(jyd8);
          jyd8 = jyd8.redIAdd(jyd8);
          var ny = c.redMul(t2).redISub(jyd8);
          var nz = jy.redAdd(jy).redMul(jz);
          return this.curve.jpoint(nx, ny, nz);
        };
        JPoint.prototype.trpl = function trpl() {
          if (!this.curve.zeroA)
            return this.dbl().add(this);
          var xx = this.x.redSqr();
          var yy = this.y.redSqr();
          var zz = this.z.redSqr();
          var yyyy = yy.redSqr();
          var m = xx.redAdd(xx).redIAdd(xx);
          var mm = m.redSqr();
          var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
          e = e.redIAdd(e);
          e = e.redAdd(e).redIAdd(e);
          e = e.redISub(mm);
          var ee = e.redSqr();
          var t = yyyy.redIAdd(yyyy);
          t = t.redIAdd(t);
          t = t.redIAdd(t);
          t = t.redIAdd(t);
          var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
          var yyu4 = yy.redMul(u);
          yyu4 = yyu4.redIAdd(yyu4);
          yyu4 = yyu4.redIAdd(yyu4);
          var nx = this.x.redMul(ee).redISub(yyu4);
          nx = nx.redIAdd(nx);
          nx = nx.redIAdd(nx);
          var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
          ny = ny.redIAdd(ny);
          ny = ny.redIAdd(ny);
          ny = ny.redIAdd(ny);
          var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
          return this.curve.jpoint(nx, ny, nz);
        };
        JPoint.prototype.mul = function mul(k, kbase) {
          k = new BN(k, kbase);
          return this.curve._wnafMul(this, k);
        };
        JPoint.prototype.eq = function eq(p) {
          if (p.type === "affine")
            return this.eq(p.toJ());
          if (this === p)
            return true;
          var z2 = this.z.redSqr();
          var pz2 = p.z.redSqr();
          if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
            return false;
          var z3 = z2.redMul(this.z);
          var pz3 = pz2.redMul(p.z);
          return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
        };
        JPoint.prototype.eqXToP = function eqXToP(x) {
          var zs = this.z.redSqr();
          var rx = x.toRed(this.curve.red).redMul(zs);
          if (this.x.cmp(rx) === 0)
            return true;
          var xc = x.clone();
          var t = this.curve.redN.redMul(zs);
          for (; ; ) {
            xc.iadd(this.curve.n);
            if (xc.cmp(this.curve.p) >= 0)
              return false;
            rx.redIAdd(t);
            if (this.x.cmp(rx) === 0)
              return true;
          }
        };
        JPoint.prototype.inspect = function inspect() {
          if (this.isInfinity())
            return "";
          return "";
        };
        JPoint.prototype.isInfinity = function isInfinity() {
          return this.z.cmpn(0) === 0;
        };
        return short;
      }
      var mont;
      var hasRequiredMont;
      function requireMont() {
        if (hasRequiredMont) return mont;
        hasRequiredMont = 1;
        var BN = requireBn$3();
        var inherits = requireInherits_browser();
        var Base = requireBase$1();
        var utils2 = requireUtils$1();
        function MontCurve(conf) {
          Base.call(this, "mont", conf);
          this.a = new BN(conf.a, 16).toRed(this.red);
          this.b = new BN(conf.b, 16).toRed(this.red);
          this.i4 = new BN(4).toRed(this.red).redInvm();
          this.two = new BN(2).toRed(this.red);
          this.a24 = this.i4.redMul(this.a.redAdd(this.two));
        }
        inherits(MontCurve, Base);
        mont = MontCurve;
        MontCurve.prototype.validate = function validate(point) {
          var x = point.normalize().x;
          var x2 = x.redSqr();
          var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
          var y = rhs.redSqrt();
          return y.redSqr().cmp(rhs) === 0;
        };
        function Point(curve2, x, z) {
          Base.BasePoint.call(this, curve2, "projective");
          if (x === null && z === null) {
            this.x = this.curve.one;
            this.z = this.curve.zero;
          } else {
            this.x = new BN(x, 16);
            this.z = new BN(z, 16);
            if (!this.x.red)
              this.x = this.x.toRed(this.curve.red);
            if (!this.z.red)
              this.z = this.z.toRed(this.curve.red);
          }
        }
        inherits(Point, Base.BasePoint);
        MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
          return this.point(utils2.toArray(bytes, enc), 1);
        };
        MontCurve.prototype.point = function point(x, z) {
          return new Point(this, x, z);
        };
        MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
          return Point.fromJSON(this, obj);
        };
        Point.prototype.precompute = function precompute() {
        };
        Point.prototype._encode = function _encode() {
          return this.getX().toArray("be", this.curve.p.byteLength());
        };
        Point.fromJSON = function fromJSON(curve2, obj) {
          return new Point(curve2, obj[0], obj[1] || curve2.one);
        };
        Point.prototype.inspect = function inspect() {
          if (this.isInfinity())
            return "";
          return "";
        };
        Point.prototype.isInfinity = function isInfinity() {
          return this.z.cmpn(0) === 0;
        };
        Point.prototype.dbl = function dbl() {
          var a = this.x.redAdd(this.z);
          var aa = a.redSqr();
          var b = this.x.redSub(this.z);
          var bb = b.redSqr();
          var c = aa.redSub(bb);
          var nx = aa.redMul(bb);
          var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
          return this.curve.point(nx, nz);
        };
        Point.prototype.add = function add() {
          throw new Error("Not supported on Montgomery curve");
        };
        Point.prototype.diffAdd = function diffAdd(p, diff) {
          var a = this.x.redAdd(this.z);
          var b = this.x.redSub(this.z);
          var c = p.x.redAdd(p.z);
          var d = p.x.redSub(p.z);
          var da = d.redMul(a);
          var cb = c.redMul(b);
          var nx = diff.z.redMul(da.redAdd(cb).redSqr());
          var nz = diff.x.redMul(da.redISub(cb).redSqr());
          return this.curve.point(nx, nz);
        };
        Point.prototype.mul = function mul(k) {
          var t = k.clone();
          var a = this;
          var b = this.curve.point(null, null);
          var c = this;
          for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
            bits.push(t.andln(1));
          for (var i2 = bits.length - 1; i2 >= 0; i2--) {
            if (bits[i2] === 0) {
              a = a.diffAdd(b, c);
              b = b.dbl();
            } else {
              b = a.diffAdd(b, c);
              a = a.dbl();
            }
          }
          return b;
        };
        Point.prototype.mulAdd = function mulAdd() {
          throw new Error("Not supported on Montgomery curve");
        };
        Point.prototype.jumlAdd = function jumlAdd() {
          throw new Error("Not supported on Montgomery curve");
        };
        Point.prototype.eq = function eq(other) {
          return this.getX().cmp(other.getX()) === 0;
        };
        Point.prototype.normalize = function normalize() {
          this.x = this.x.redMul(this.z.redInvm());
          this.z = this.curve.one;
          return this;
        };
        Point.prototype.getX = function getX() {
          this.normalize();
          return this.x.fromRed();
        };
        return mont;
      }
      var edwards;
      var hasRequiredEdwards;
      function requireEdwards() {
        if (hasRequiredEdwards) return edwards;
        hasRequiredEdwards = 1;
        var utils2 = requireUtils$1();
        var BN = requireBn$3();
        var inherits = requireInherits_browser();
        var Base = requireBase$1();
        var assert = utils2.assert;
        function EdwardsCurve(conf) {
          this.twisted = (conf.a | 0) !== 1;
          this.mOneA = this.twisted && (conf.a | 0) === -1;
          this.extended = this.mOneA;
          Base.call(this, "edwards", conf);
          this.a = new BN(conf.a, 16).umod(this.red.m);
          this.a = this.a.toRed(this.red);
          this.c = new BN(conf.c, 16).toRed(this.red);
          this.c2 = this.c.redSqr();
          this.d = new BN(conf.d, 16).toRed(this.red);
          this.dd = this.d.redAdd(this.d);
          assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
          this.oneC = (conf.c | 0) === 1;
        }
        inherits(EdwardsCurve, Base);
        edwards = EdwardsCurve;
        EdwardsCurve.prototype._mulA = function _mulA(num) {
          if (this.mOneA)
            return num.redNeg();
          else
            return this.a.redMul(num);
        };
        EdwardsCurve.prototype._mulC = function _mulC(num) {
          if (this.oneC)
            return num;
          else
            return this.c.redMul(num);
        };
        EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
          return this.point(x, y, z, t);
        };
        EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
          x = new BN(x, 16);
          if (!x.red)
            x = x.toRed(this.red);
          var x2 = x.redSqr();
          var rhs = this.c2.redSub(this.a.redMul(x2));
          var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
          var y2 = rhs.redMul(lhs.redInvm());
          var y = y2.redSqrt();
          if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
            throw new Error("invalid point");
          var isOdd = y.fromRed().isOdd();
          if (odd && !isOdd || !odd && isOdd)
            y = y.redNeg();
          return this.point(x, y);
        };
        EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
          y = new BN(y, 16);
          if (!y.red)
            y = y.toRed(this.red);
          var y2 = y.redSqr();
          var lhs = y2.redSub(this.c2);
          var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
          var x2 = lhs.redMul(rhs.redInvm());
          if (x2.cmp(this.zero) === 0) {
            if (odd)
              throw new Error("invalid point");
            else
              return this.point(this.zero, y);
          }
          var x = x2.redSqrt();
          if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
            throw new Error("invalid point");
          if (x.fromRed().isOdd() !== odd)
            x = x.redNeg();
          return this.point(x, y);
        };
        EdwardsCurve.prototype.validate = function validate(point) {
          if (point.isInfinity())
            return true;
          point.normalize();
          var x2 = point.x.redSqr();
          var y2 = point.y.redSqr();
          var lhs = x2.redMul(this.a).redAdd(y2);
          var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
          return lhs.cmp(rhs) === 0;
        };
        function Point(curve2, x, y, z, t) {
          Base.BasePoint.call(this, curve2, "projective");
          if (x === null && y === null && z === null) {
            this.x = this.curve.zero;
            this.y = this.curve.one;
            this.z = this.curve.one;
            this.t = this.curve.zero;
            this.zOne = true;
          } else {
            this.x = new BN(x, 16);
            this.y = new BN(y, 16);
            this.z = z ? new BN(z, 16) : this.curve.one;
            this.t = t && new BN(t, 16);
            if (!this.x.red)
              this.x = this.x.toRed(this.curve.red);
            if (!this.y.red)
              this.y = this.y.toRed(this.curve.red);
            if (!this.z.red)
              this.z = this.z.toRed(this.curve.red);
            if (this.t && !this.t.red)
              this.t = this.t.toRed(this.curve.red);
            this.zOne = this.z === this.curve.one;
            if (this.curve.extended && !this.t) {
              this.t = this.x.redMul(this.y);
              if (!this.zOne)
                this.t = this.t.redMul(this.z.redInvm());
            }
          }
        }
        inherits(Point, Base.BasePoint);
        EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
          return Point.fromJSON(this, obj);
        };
        EdwardsCurve.prototype.point = function point(x, y, z, t) {
          return new Point(this, x, y, z, t);
        };
        Point.fromJSON = function fromJSON(curve2, obj) {
          return new Point(curve2, obj[0], obj[1], obj[2]);
        };
        Point.prototype.inspect = function inspect() {
          if (this.isInfinity())
            return "";
          return "";
        };
        Point.prototype.isInfinity = function isInfinity() {
          return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0);
        };
        Point.prototype._extDbl = function _extDbl() {
          var a = this.x.redSqr();
          var b = this.y.redSqr();
          var c = this.z.redSqr();
          c = c.redIAdd(c);
          var d = this.curve._mulA(a);
          var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
          var g = d.redAdd(b);
          var f = g.redSub(c);
          var h = d.redSub(b);
          var nx = e.redMul(f);
          var ny = g.redMul(h);
          var nt = e.redMul(h);
          var nz = f.redMul(g);
          return this.curve.point(nx, ny, nz, nt);
        };
        Point.prototype._projDbl = function _projDbl() {
          var b = this.x.redAdd(this.y).redSqr();
          var c = this.x.redSqr();
          var d = this.y.redSqr();
          var nx;
          var ny;
          var nz;
          var e;
          var h;
          var j;
          if (this.curve.twisted) {
            e = this.curve._mulA(c);
            var f = e.redAdd(d);
            if (this.zOne) {
              nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
              ny = f.redMul(e.redSub(d));
              nz = f.redSqr().redSub(f).redSub(f);
            } else {
              h = this.z.redSqr();
              j = f.redSub(h).redISub(h);
              nx = b.redSub(c).redISub(d).redMul(j);
              ny = f.redMul(e.redSub(d));
              nz = f.redMul(j);
            }
          } else {
            e = c.redAdd(d);
            h = this.curve._mulC(this.z).redSqr();
            j = e.redSub(h).redSub(h);
            nx = this.curve._mulC(b.redISub(e)).redMul(j);
            ny = this.curve._mulC(e).redMul(c.redISub(d));
            nz = e.redMul(j);
          }
          return this.curve.point(nx, ny, nz);
        };
        Point.prototype.dbl = function dbl() {
          if (this.isInfinity())
            return this;
          if (this.curve.extended)
            return this._extDbl();
          else
            return this._projDbl();
        };
        Point.prototype._extAdd = function _extAdd(p) {
          var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
          var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
          var c = this.t.redMul(this.curve.dd).redMul(p.t);
          var d = this.z.redMul(p.z.redAdd(p.z));
          var e = b.redSub(a);
          var f = d.redSub(c);
          var g = d.redAdd(c);
          var h = b.redAdd(a);
          var nx = e.redMul(f);
          var ny = g.redMul(h);
          var nt = e.redMul(h);
          var nz = f.redMul(g);
          return this.curve.point(nx, ny, nz, nt);
        };
        Point.prototype._projAdd = function _projAdd(p) {
          var a = this.z.redMul(p.z);
          var b = a.redSqr();
          var c = this.x.redMul(p.x);
          var d = this.y.redMul(p.y);
          var e = this.curve.d.redMul(c).redMul(d);
          var f = b.redSub(e);
          var g = b.redAdd(e);
          var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
          var nx = a.redMul(f).redMul(tmp);
          var ny;
          var nz;
          if (this.curve.twisted) {
            ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
            nz = f.redMul(g);
          } else {
            ny = a.redMul(g).redMul(d.redSub(c));
            nz = this.curve._mulC(f).redMul(g);
          }
          return this.curve.point(nx, ny, nz);
        };
        Point.prototype.add = function add(p) {
          if (this.isInfinity())
            return p;
          if (p.isInfinity())
            return this;
          if (this.curve.extended)
            return this._extAdd(p);
          else
            return this._projAdd(p);
        };
        Point.prototype.mul = function mul(k) {
          if (this._hasDoubles(k))
            return this.curve._fixedNafMul(this, k);
          else
            return this.curve._wnafMul(this, k);
        };
        Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
          return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, false);
        };
        Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
          return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, true);
        };
        Point.prototype.normalize = function normalize() {
          if (this.zOne)
            return this;
          var zi = this.z.redInvm();
          this.x = this.x.redMul(zi);
          this.y = this.y.redMul(zi);
          if (this.t)
            this.t = this.t.redMul(zi);
          this.z = this.curve.one;
          this.zOne = true;
          return this;
        };
        Point.prototype.neg = function neg() {
          return this.curve.point(
            this.x.redNeg(),
            this.y,
            this.z,
            this.t && this.t.redNeg()
          );
        };
        Point.prototype.getX = function getX() {
          this.normalize();
          return this.x.fromRed();
        };
        Point.prototype.getY = function getY() {
          this.normalize();
          return this.y.fromRed();
        };
        Point.prototype.eq = function eq(other) {
          return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0;
        };
        Point.prototype.eqXToP = function eqXToP(x) {
          var rx = x.toRed(this.curve.red).redMul(this.z);
          if (this.x.cmp(rx) === 0)
            return true;
          var xc = x.clone();
          var t = this.curve.redN.redMul(this.z);
          for (; ; ) {
            xc.iadd(this.curve.n);
            if (xc.cmp(this.curve.p) >= 0)
              return false;
            rx.redIAdd(t);
            if (this.x.cmp(rx) === 0)
              return true;
          }
        };
        Point.prototype.toP = Point.prototype.normalize;
        Point.prototype.mixedAdd = Point.prototype.add;
        return edwards;
      }
      var hasRequiredCurve;
      function requireCurve() {
        if (hasRequiredCurve) return curve;
        hasRequiredCurve = 1;
        (function(exports$12) {
          var curve2 = exports$12;
          curve2.base = requireBase$1();
          curve2.short = requireShort();
          curve2.mont = requireMont();
          curve2.edwards = requireEdwards();
        })(curve);
        return curve;
      }
      var curves = {};
      var hash = {};
      var utils = {};
      var hasRequiredUtils;
      function requireUtils() {
        if (hasRequiredUtils) return utils;
        hasRequiredUtils = 1;
        var assert = requireMinimalisticAssert();
        var inherits = requireInherits_browser();
        utils.inherits = inherits;
        function isSurrogatePair(msg, i2) {
          if ((msg.charCodeAt(i2) & 64512) !== 55296) {
            return false;
          }
          if (i2 < 0 || i2 + 1 >= msg.length) {
            return false;
          }
          return (msg.charCodeAt(i2 + 1) & 64512) === 56320;
        }
        function toArray(msg, enc) {
          if (Array.isArray(msg))
            return msg.slice();
          if (!msg)
            return [];
          var res = [];
          if (typeof msg === "string") {
            if (!enc) {
              var p = 0;
              for (var i2 = 0; i2 < msg.length; i2++) {
                var c = msg.charCodeAt(i2);
                if (c < 128) {
                  res[p++] = c;
                } else if (c < 2048) {
                  res[p++] = c >> 6 | 192;
                  res[p++] = c & 63 | 128;
                } else if (isSurrogatePair(msg, i2)) {
                  c = 65536 + ((c & 1023) << 10) + (msg.charCodeAt(++i2) & 1023);
                  res[p++] = c >> 18 | 240;
                  res[p++] = c >> 12 & 63 | 128;
                  res[p++] = c >> 6 & 63 | 128;
                  res[p++] = c & 63 | 128;
                } else {
                  res[p++] = c >> 12 | 224;
                  res[p++] = c >> 6 & 63 | 128;
                  res[p++] = c & 63 | 128;
                }
              }
            } else if (enc === "hex") {
              msg = msg.replace(/[^a-z0-9]+/ig, "");
              if (msg.length % 2 !== 0)
                msg = "0" + msg;
              for (i2 = 0; i2 < msg.length; i2 += 2)
                res.push(parseInt(msg[i2] + msg[i2 + 1], 16));
            }
          } else {
            for (i2 = 0; i2 < msg.length; i2++)
              res[i2] = msg[i2] | 0;
          }
          return res;
        }
        utils.toArray = toArray;
        function toHex(msg) {
          var res = "";
          for (var i2 = 0; i2 < msg.length; i2++)
            res += zero2(msg[i2].toString(16));
          return res;
        }
        utils.toHex = toHex;
        function htonl(w) {
          var res = w >>> 24 | w >>> 8 & 65280 | w << 8 & 16711680 | (w & 255) << 24;
          return res >>> 0;
        }
        utils.htonl = htonl;
        function toHex32(msg, endian) {
          var res = "";
          for (var i2 = 0; i2 < msg.length; i2++) {
            var w = msg[i2];
            if (endian === "little")
              w = htonl(w);
            res += zero8(w.toString(16));
          }
          return res;
        }
        utils.toHex32 = toHex32;
        function zero2(word) {
          if (word.length === 1)
            return "0" + word;
          else
            return word;
        }
        utils.zero2 = zero2;
        function zero8(word) {
          if (word.length === 7)
            return "0" + word;
          else if (word.length === 6)
            return "00" + word;
          else if (word.length === 5)
            return "000" + word;
          else if (word.length === 4)
            return "0000" + word;
          else if (word.length === 3)
            return "00000" + word;
          else if (word.length === 2)
            return "000000" + word;
          else if (word.length === 1)
            return "0000000" + word;
          else
            return word;
        }
        utils.zero8 = zero8;
        function join32(msg, start, end, endian) {
          var len2 = end - start;
          assert(len2 % 4 === 0);
          var res = new Array(len2 / 4);
          for (var i2 = 0, k = start; i2 < res.length; i2++, k += 4) {
            var w;
            if (endian === "big")
              w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];
            else
              w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k];
            res[i2] = w >>> 0;
          }
          return res;
        }
        utils.join32 = join32;
        function split32(msg, endian) {
          var res = new Array(msg.length * 4);
          for (var i2 = 0, k = 0; i2 < msg.length; i2++, k += 4) {
            var m = msg[i2];
            if (endian === "big") {
              res[k] = m >>> 24;
              res[k + 1] = m >>> 16 & 255;
              res[k + 2] = m >>> 8 & 255;
              res[k + 3] = m & 255;
            } else {
              res[k + 3] = m >>> 24;
              res[k + 2] = m >>> 16 & 255;
              res[k + 1] = m >>> 8 & 255;
              res[k] = m & 255;
            }
          }
          return res;
        }
        utils.split32 = split32;
        function rotr32(w, b) {
          return w >>> b | w << 32 - b;
        }
        utils.rotr32 = rotr32;
        function rotl32(w, b) {
          return w << b | w >>> 32 - b;
        }
        utils.rotl32 = rotl32;
        function sum32(a, b) {
          return a + b >>> 0;
        }
        utils.sum32 = sum32;
        function sum32_3(a, b, c) {
          return a + b + c >>> 0;
        }
        utils.sum32_3 = sum32_3;
        function sum32_4(a, b, c, d) {
          return a + b + c + d >>> 0;
        }
        utils.sum32_4 = sum32_4;
        function sum32_5(a, b, c, d, e) {
          return a + b + c + d + e >>> 0;
        }
        utils.sum32_5 = sum32_5;
        function sum64(buf, pos, ah, al) {
          var bh = buf[pos];
          var bl = buf[pos + 1];
          var lo = al + bl >>> 0;
          var hi = (lo < al ? 1 : 0) + ah + bh;
          buf[pos] = hi >>> 0;
          buf[pos + 1] = lo;
        }
        utils.sum64 = sum64;
        function sum64_hi(ah, al, bh, bl) {
          var lo = al + bl >>> 0;
          var hi = (lo < al ? 1 : 0) + ah + bh;
          return hi >>> 0;
        }
        utils.sum64_hi = sum64_hi;
        function sum64_lo(ah, al, bh, bl) {
          var lo = al + bl;
          return lo >>> 0;
        }
        utils.sum64_lo = sum64_lo;
        function sum64_4_hi(ah, al, bh, bl, ch, cl, dh2, dl) {
          var carry = 0;
          var lo = al;
          lo = lo + bl >>> 0;
          carry += lo < al ? 1 : 0;
          lo = lo + cl >>> 0;
          carry += lo < cl ? 1 : 0;
          lo = lo + dl >>> 0;
          carry += lo < dl ? 1 : 0;
          var hi = ah + bh + ch + dh2 + carry;
          return hi >>> 0;
        }
        utils.sum64_4_hi = sum64_4_hi;
        function sum64_4_lo(ah, al, bh, bl, ch, cl, dh2, dl) {
          var lo = al + bl + cl + dl;
          return lo >>> 0;
        }
        utils.sum64_4_lo = sum64_4_lo;
        function sum64_5_hi(ah, al, bh, bl, ch, cl, dh2, dl, eh, el) {
          var carry = 0;
          var lo = al;
          lo = lo + bl >>> 0;
          carry += lo < al ? 1 : 0;
          lo = lo + cl >>> 0;
          carry += lo < cl ? 1 : 0;
          lo = lo + dl >>> 0;
          carry += lo < dl ? 1 : 0;
          lo = lo + el >>> 0;
          carry += lo < el ? 1 : 0;
          var hi = ah + bh + ch + dh2 + eh + carry;
          return hi >>> 0;
        }
        utils.sum64_5_hi = sum64_5_hi;
        function sum64_5_lo(ah, al, bh, bl, ch, cl, dh2, dl, eh, el) {
          var lo = al + bl + cl + dl + el;
          return lo >>> 0;
        }
        utils.sum64_5_lo = sum64_5_lo;
        function rotr64_hi(ah, al, num) {
          var r = al << 32 - num | ah >>> num;
          return r >>> 0;
        }
        utils.rotr64_hi = rotr64_hi;
        function rotr64_lo(ah, al, num) {
          var r = ah << 32 - num | al >>> num;
          return r >>> 0;
        }
        utils.rotr64_lo = rotr64_lo;
        function shr64_hi(ah, al, num) {
          return ah >>> num;
        }
        utils.shr64_hi = shr64_hi;
        function shr64_lo(ah, al, num) {
          var r = ah << 32 - num | al >>> num;
          return r >>> 0;
        }
        utils.shr64_lo = shr64_lo;
        return utils;
      }
      var common$1 = {};
      var hasRequiredCommon$1;
      function requireCommon$1() {
        if (hasRequiredCommon$1) return common$1;
        hasRequiredCommon$1 = 1;
        var utils2 = requireUtils();
        var assert = requireMinimalisticAssert();
        function BlockHash() {
          this.pending = null;
          this.pendingTotal = 0;
          this.blockSize = this.constructor.blockSize;
          this.outSize = this.constructor.outSize;
          this.hmacStrength = this.constructor.hmacStrength;
          this.padLength = this.constructor.padLength / 8;
          this.endian = "big";
          this._delta8 = this.blockSize / 8;
          this._delta32 = this.blockSize / 32;
        }
        common$1.BlockHash = BlockHash;
        BlockHash.prototype.update = function update(msg, enc) {
          msg = utils2.toArray(msg, enc);
          if (!this.pending)
            this.pending = msg;
          else
            this.pending = this.pending.concat(msg);
          this.pendingTotal += msg.length;
          if (this.pending.length >= this._delta8) {
            msg = this.pending;
            var r = msg.length % this._delta8;
            this.pending = msg.slice(msg.length - r, msg.length);
            if (this.pending.length === 0)
              this.pending = null;
            msg = utils2.join32(msg, 0, msg.length - r, this.endian);
            for (var i2 = 0; i2 < msg.length; i2 += this._delta32)
              this._update(msg, i2, i2 + this._delta32);
          }
          return this;
        };
        BlockHash.prototype.digest = function digest(enc) {
          this.update(this._pad());
          assert(this.pending === null);
          return this._digest(enc);
        };
        BlockHash.prototype._pad = function pad() {
          var len2 = this.pendingTotal;
          var bytes = this._delta8;
          var k = bytes - (len2 + this.padLength) % bytes;
          var res = new Array(k + this.padLength);
          res[0] = 128;
          for (var i2 = 1; i2 < k; i2++)
            res[i2] = 0;
          len2 <<= 3;
          if (this.endian === "big") {
            for (var t = 8; t < this.padLength; t++)
              res[i2++] = 0;
            res[i2++] = 0;
            res[i2++] = 0;
            res[i2++] = 0;
            res[i2++] = 0;
            res[i2++] = len2 >>> 24 & 255;
            res[i2++] = len2 >>> 16 & 255;
            res[i2++] = len2 >>> 8 & 255;
            res[i2++] = len2 & 255;
          } else {
            res[i2++] = len2 & 255;
            res[i2++] = len2 >>> 8 & 255;
            res[i2++] = len2 >>> 16 & 255;
            res[i2++] = len2 >>> 24 & 255;
            res[i2++] = 0;
            res[i2++] = 0;
            res[i2++] = 0;
            res[i2++] = 0;
            for (t = 8; t < this.padLength; t++)
              res[i2++] = 0;
          }
          return res;
        };
        return common$1;
      }
      var sha = {};
      var common = {};
      var hasRequiredCommon;
      function requireCommon() {
        if (hasRequiredCommon) return common;
        hasRequiredCommon = 1;
        var utils2 = requireUtils();
        var rotr32 = utils2.rotr32;
        function ft_1(s, x, y, z) {
          if (s === 0)
            return ch32(x, y, z);
          if (s === 1 || s === 3)
            return p32(x, y, z);
          if (s === 2)
            return maj32(x, y, z);
        }
        common.ft_1 = ft_1;
        function ch32(x, y, z) {
          return x & y ^ ~x & z;
        }
        common.ch32 = ch32;
        function maj32(x, y, z) {
          return x & y ^ x & z ^ y & z;
        }
        common.maj32 = maj32;
        function p32(x, y, z) {
          return x ^ y ^ z;
        }
        common.p32 = p32;
        function s0_256(x) {
          return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
        }
        common.s0_256 = s0_256;
        function s1_256(x) {
          return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
        }
        common.s1_256 = s1_256;
        function g0_256(x) {
          return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3;
        }
        common.g0_256 = g0_256;
        function g1_256(x) {
          return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10;
        }
        common.g1_256 = g1_256;
        return common;
      }
      var _1;
      var hasRequired_1;
      function require_1() {
        if (hasRequired_1) return _1;
        hasRequired_1 = 1;
        var utils2 = requireUtils();
        var common2 = requireCommon$1();
        var shaCommon = requireCommon();
        var rotl32 = utils2.rotl32;
        var sum32 = utils2.sum32;
        var sum32_5 = utils2.sum32_5;
        var ft_1 = shaCommon.ft_1;
        var BlockHash = common2.BlockHash;
        var sha1_K = [
          1518500249,
          1859775393,
          2400959708,
          3395469782
        ];
        function SHA1() {
          if (!(this instanceof SHA1))
            return new SHA1();
          BlockHash.call(this);
          this.h = [
            1732584193,
            4023233417,
            2562383102,
            271733878,
            3285377520
          ];
          this.W = new Array(80);
        }
        utils2.inherits(SHA1, BlockHash);
        _1 = SHA1;
        SHA1.blockSize = 512;
        SHA1.outSize = 160;
        SHA1.hmacStrength = 80;
        SHA1.padLength = 64;
        SHA1.prototype._update = function _update(msg, start) {
          var W = this.W;
          for (var i2 = 0; i2 < 16; i2++)
            W[i2] = msg[start + i2];
          for (; i2 < W.length; i2++)
            W[i2] = rotl32(W[i2 - 3] ^ W[i2 - 8] ^ W[i2 - 14] ^ W[i2 - 16], 1);
          var a = this.h[0];
          var b = this.h[1];
          var c = this.h[2];
          var d = this.h[3];
          var e = this.h[4];
          for (i2 = 0; i2 < W.length; i2++) {
            var s = ~~(i2 / 20);
            var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i2], sha1_K[s]);
            e = d;
            d = c;
            c = rotl32(b, 30);
            b = a;
            a = t;
          }
          this.h[0] = sum32(this.h[0], a);
          this.h[1] = sum32(this.h[1], b);
          this.h[2] = sum32(this.h[2], c);
          this.h[3] = sum32(this.h[3], d);
          this.h[4] = sum32(this.h[4], e);
        };
        SHA1.prototype._digest = function digest(enc) {
          if (enc === "hex")
            return utils2.toHex32(this.h, "big");
          else
            return utils2.split32(this.h, "big");
        };
        return _1;
      }
      var _256;
      var hasRequired_256;
      function require_256() {
        if (hasRequired_256) return _256;
        hasRequired_256 = 1;
        var utils2 = requireUtils();
        var common2 = requireCommon$1();
        var shaCommon = requireCommon();
        var assert = requireMinimalisticAssert();
        var sum32 = utils2.sum32;
        var sum32_4 = utils2.sum32_4;
        var sum32_5 = utils2.sum32_5;
        var ch32 = shaCommon.ch32;
        var maj32 = shaCommon.maj32;
        var s0_256 = shaCommon.s0_256;
        var s1_256 = shaCommon.s1_256;
        var g0_256 = shaCommon.g0_256;
        var g1_256 = shaCommon.g1_256;
        var BlockHash = common2.BlockHash;
        var sha256_K = [
          1116352408,
          1899447441,
          3049323471,
          3921009573,
          961987163,
          1508970993,
          2453635748,
          2870763221,
          3624381080,
          310598401,
          607225278,
          1426881987,
          1925078388,
          2162078206,
          2614888103,
          3248222580,
          3835390401,
          4022224774,
          264347078,
          604807628,
          770255983,
          1249150122,
          1555081692,
          1996064986,
          2554220882,
          2821834349,
          2952996808,
          3210313671,
          3336571891,
          3584528711,
          113926993,
          338241895,
          666307205,
          773529912,
          1294757372,
          1396182291,
          1695183700,
          1986661051,
          2177026350,
          2456956037,
          2730485921,
          2820302411,
          3259730800,
          3345764771,
          3516065817,
          3600352804,
          4094571909,
          275423344,
          430227734,
          506948616,
          659060556,
          883997877,
          958139571,
          1322822218,
          1537002063,
          1747873779,
          1955562222,
          2024104815,
          2227730452,
          2361852424,
          2428436474,
          2756734187,
          3204031479,
          3329325298
        ];
        function SHA256() {
          if (!(this instanceof SHA256))
            return new SHA256();
          BlockHash.call(this);
          this.h = [
            1779033703,
            3144134277,
            1013904242,
            2773480762,
            1359893119,
            2600822924,
            528734635,
            1541459225
          ];
          this.k = sha256_K;
          this.W = new Array(64);
        }
        utils2.inherits(SHA256, BlockHash);
        _256 = SHA256;
        SHA256.blockSize = 512;
        SHA256.outSize = 256;
        SHA256.hmacStrength = 192;
        SHA256.padLength = 64;
        SHA256.prototype._update = function _update(msg, start) {
          var W = this.W;
          for (var i2 = 0; i2 < 16; i2++)
            W[i2] = msg[start + i2];
          for (; i2 < W.length; i2++)
            W[i2] = sum32_4(g1_256(W[i2 - 2]), W[i2 - 7], g0_256(W[i2 - 15]), W[i2 - 16]);
          var a = this.h[0];
          var b = this.h[1];
          var c = this.h[2];
          var d = this.h[3];
          var e = this.h[4];
          var f = this.h[5];
          var g = this.h[6];
          var h = this.h[7];
          assert(this.k.length === W.length);
          for (i2 = 0; i2 < W.length; i2++) {
            var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i2], W[i2]);
            var T2 = sum32(s0_256(a), maj32(a, b, c));
            h = g;
            g = f;
            f = e;
            e = sum32(d, T1);
            d = c;
            c = b;
            b = a;
            a = sum32(T1, T2);
          }
          this.h[0] = sum32(this.h[0], a);
          this.h[1] = sum32(this.h[1], b);
          this.h[2] = sum32(this.h[2], c);
          this.h[3] = sum32(this.h[3], d);
          this.h[4] = sum32(this.h[4], e);
          this.h[5] = sum32(this.h[5], f);
          this.h[6] = sum32(this.h[6], g);
          this.h[7] = sum32(this.h[7], h);
        };
        SHA256.prototype._digest = function digest(enc) {
          if (enc === "hex")
            return utils2.toHex32(this.h, "big");
          else
            return utils2.split32(this.h, "big");
        };
        return _256;
      }
      var _224;
      var hasRequired_224;
      function require_224() {
        if (hasRequired_224) return _224;
        hasRequired_224 = 1;
        var utils2 = requireUtils();
        var SHA256 = require_256();
        function SHA224() {
          if (!(this instanceof SHA224))
            return new SHA224();
          SHA256.call(this);
          this.h = [
            3238371032,
            914150663,
            812702999,
            4144912697,
            4290775857,
            1750603025,
            1694076839,
            3204075428
          ];
        }
        utils2.inherits(SHA224, SHA256);
        _224 = SHA224;
        SHA224.blockSize = 512;
        SHA224.outSize = 224;
        SHA224.hmacStrength = 192;
        SHA224.padLength = 64;
        SHA224.prototype._digest = function digest(enc) {
          if (enc === "hex")
            return utils2.toHex32(this.h.slice(0, 7), "big");
          else
            return utils2.split32(this.h.slice(0, 7), "big");
        };
        return _224;
      }
      var _512;
      var hasRequired_512;
      function require_512() {
        if (hasRequired_512) return _512;
        hasRequired_512 = 1;
        var utils2 = requireUtils();
        var common2 = requireCommon$1();
        var assert = requireMinimalisticAssert();
        var rotr64_hi = utils2.rotr64_hi;
        var rotr64_lo = utils2.rotr64_lo;
        var shr64_hi = utils2.shr64_hi;
        var shr64_lo = utils2.shr64_lo;
        var sum64 = utils2.sum64;
        var sum64_hi = utils2.sum64_hi;
        var sum64_lo = utils2.sum64_lo;
        var sum64_4_hi = utils2.sum64_4_hi;
        var sum64_4_lo = utils2.sum64_4_lo;
        var sum64_5_hi = utils2.sum64_5_hi;
        var sum64_5_lo = utils2.sum64_5_lo;
        var BlockHash = common2.BlockHash;
        var sha512_K = [
          1116352408,
          3609767458,
          1899447441,
          602891725,
          3049323471,
          3964484399,
          3921009573,
          2173295548,
          961987163,
          4081628472,
          1508970993,
          3053834265,
          2453635748,
          2937671579,
          2870763221,
          3664609560,
          3624381080,
          2734883394,
          310598401,
          1164996542,
          607225278,
          1323610764,
          1426881987,
          3590304994,
          1925078388,
          4068182383,
          2162078206,
          991336113,
          2614888103,
          633803317,
          3248222580,
          3479774868,
          3835390401,
          2666613458,
          4022224774,
          944711139,
          264347078,
          2341262773,
          604807628,
          2007800933,
          770255983,
          1495990901,
          1249150122,
          1856431235,
          1555081692,
          3175218132,
          1996064986,
          2198950837,
          2554220882,
          3999719339,
          2821834349,
          766784016,
          2952996808,
          2566594879,
          3210313671,
          3203337956,
          3336571891,
          1034457026,
          3584528711,
          2466948901,
          113926993,
          3758326383,
          338241895,
          168717936,
          666307205,
          1188179964,
          773529912,
          1546045734,
          1294757372,
          1522805485,
          1396182291,
          2643833823,
          1695183700,
          2343527390,
          1986661051,
          1014477480,
          2177026350,
          1206759142,
          2456956037,
          344077627,
          2730485921,
          1290863460,
          2820302411,
          3158454273,
          3259730800,
          3505952657,
          3345764771,
          106217008,
          3516065817,
          3606008344,
          3600352804,
          1432725776,
          4094571909,
          1467031594,
          275423344,
          851169720,
          430227734,
          3100823752,
          506948616,
          1363258195,
          659060556,
          3750685593,
          883997877,
          3785050280,
          958139571,
          3318307427,
          1322822218,
          3812723403,
          1537002063,
          2003034995,
          1747873779,
          3602036899,
          1955562222,
          1575990012,
          2024104815,
          1125592928,
          2227730452,
          2716904306,
          2361852424,
          442776044,
          2428436474,
          593698344,
          2756734187,
          3733110249,
          3204031479,
          2999351573,
          3329325298,
          3815920427,
          3391569614,
          3928383900,
          3515267271,
          566280711,
          3940187606,
          3454069534,
          4118630271,
          4000239992,
          116418474,
          1914138554,
          174292421,
          2731055270,
          289380356,
          3203993006,
          460393269,
          320620315,
          685471733,
          587496836,
          852142971,
          1086792851,
          1017036298,
          365543100,
          1126000580,
          2618297676,
          1288033470,
          3409855158,
          1501505948,
          4234509866,
          1607167915,
          987167468,
          1816402316,
          1246189591
        ];
        function SHA512() {
          if (!(this instanceof SHA512))
            return new SHA512();
          BlockHash.call(this);
          this.h = [
            1779033703,
            4089235720,
            3144134277,
            2227873595,
            1013904242,
            4271175723,
            2773480762,
            1595750129,
            1359893119,
            2917565137,
            2600822924,
            725511199,
            528734635,
            4215389547,
            1541459225,
            327033209
          ];
          this.k = sha512_K;
          this.W = new Array(160);
        }
        utils2.inherits(SHA512, BlockHash);
        _512 = SHA512;
        SHA512.blockSize = 1024;
        SHA512.outSize = 512;
        SHA512.hmacStrength = 192;
        SHA512.padLength = 128;
        SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
          var W = this.W;
          for (var i2 = 0; i2 < 32; i2++)
            W[i2] = msg[start + i2];
          for (; i2 < W.length; i2 += 2) {
            var c0_hi = g1_512_hi(W[i2 - 4], W[i2 - 3]);
            var c0_lo = g1_512_lo(W[i2 - 4], W[i2 - 3]);
            var c1_hi = W[i2 - 14];
            var c1_lo = W[i2 - 13];
            var c2_hi = g0_512_hi(W[i2 - 30], W[i2 - 29]);
            var c2_lo = g0_512_lo(W[i2 - 30], W[i2 - 29]);
            var c3_hi = W[i2 - 32];
            var c3_lo = W[i2 - 31];
            W[i2] = sum64_4_hi(
              c0_hi,
              c0_lo,
              c1_hi,
              c1_lo,
              c2_hi,
              c2_lo,
              c3_hi,
              c3_lo
            );
            W[i2 + 1] = sum64_4_lo(
              c0_hi,
              c0_lo,
              c1_hi,
              c1_lo,
              c2_hi,
              c2_lo,
              c3_hi,
              c3_lo
            );
          }
        };
        SHA512.prototype._update = function _update(msg, start) {
          this._prepareBlock(msg, start);
          var W = this.W;
          var ah = this.h[0];
          var al = this.h[1];
          var bh = this.h[2];
          var bl = this.h[3];
          var ch = this.h[4];
          var cl = this.h[5];
          var dh2 = this.h[6];
          var dl = this.h[7];
          var eh = this.h[8];
          var el = this.h[9];
          var fh = this.h[10];
          var fl = this.h[11];
          var gh = this.h[12];
          var gl = this.h[13];
          var hh = this.h[14];
          var hl = this.h[15];
          assert(this.k.length === W.length);
          for (var i2 = 0; i2 < W.length; i2 += 2) {
            var c0_hi = hh;
            var c0_lo = hl;
            var c1_hi = s1_512_hi(eh, el);
            var c1_lo = s1_512_lo(eh, el);
            var c2_hi = ch64_hi(eh, el, fh, fl, gh);
            var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
            var c3_hi = this.k[i2];
            var c3_lo = this.k[i2 + 1];
            var c4_hi = W[i2];
            var c4_lo = W[i2 + 1];
            var T1_hi = sum64_5_hi(
              c0_hi,
              c0_lo,
              c1_hi,
              c1_lo,
              c2_hi,
              c2_lo,
              c3_hi,
              c3_lo,
              c4_hi,
              c4_lo
            );
            var T1_lo = sum64_5_lo(
              c0_hi,
              c0_lo,
              c1_hi,
              c1_lo,
              c2_hi,
              c2_lo,
              c3_hi,
              c3_lo,
              c4_hi,
              c4_lo
            );
            c0_hi = s0_512_hi(ah, al);
            c0_lo = s0_512_lo(ah, al);
            c1_hi = maj64_hi(ah, al, bh, bl, ch);
            c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
            var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
            var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
            hh = gh;
            hl = gl;
            gh = fh;
            gl = fl;
            fh = eh;
            fl = el;
            eh = sum64_hi(dh2, dl, T1_hi, T1_lo);
            el = sum64_lo(dl, dl, T1_hi, T1_lo);
            dh2 = ch;
            dl = cl;
            ch = bh;
            cl = bl;
            bh = ah;
            bl = al;
            ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
            al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
          }
          sum64(this.h, 0, ah, al);
          sum64(this.h, 2, bh, bl);
          sum64(this.h, 4, ch, cl);
          sum64(this.h, 6, dh2, dl);
          sum64(this.h, 8, eh, el);
          sum64(this.h, 10, fh, fl);
          sum64(this.h, 12, gh, gl);
          sum64(this.h, 14, hh, hl);
        };
        SHA512.prototype._digest = function digest(enc) {
          if (enc === "hex")
            return utils2.toHex32(this.h, "big");
          else
            return utils2.split32(this.h, "big");
        };
        function ch64_hi(xh, xl, yh, yl, zh) {
          var r = xh & yh ^ ~xh & zh;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function ch64_lo(xh, xl, yh, yl, zh, zl) {
          var r = xl & yl ^ ~xl & zl;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function maj64_hi(xh, xl, yh, yl, zh) {
          var r = xh & yh ^ xh & zh ^ yh & zh;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function maj64_lo(xh, xl, yh, yl, zh, zl) {
          var r = xl & yl ^ xl & zl ^ yl & zl;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function s0_512_hi(xh, xl) {
          var c0_hi = rotr64_hi(xh, xl, 28);
          var c1_hi = rotr64_hi(xl, xh, 2);
          var c2_hi = rotr64_hi(xl, xh, 7);
          var r = c0_hi ^ c1_hi ^ c2_hi;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function s0_512_lo(xh, xl) {
          var c0_lo = rotr64_lo(xh, xl, 28);
          var c1_lo = rotr64_lo(xl, xh, 2);
          var c2_lo = rotr64_lo(xl, xh, 7);
          var r = c0_lo ^ c1_lo ^ c2_lo;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function s1_512_hi(xh, xl) {
          var c0_hi = rotr64_hi(xh, xl, 14);
          var c1_hi = rotr64_hi(xh, xl, 18);
          var c2_hi = rotr64_hi(xl, xh, 9);
          var r = c0_hi ^ c1_hi ^ c2_hi;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function s1_512_lo(xh, xl) {
          var c0_lo = rotr64_lo(xh, xl, 14);
          var c1_lo = rotr64_lo(xh, xl, 18);
          var c2_lo = rotr64_lo(xl, xh, 9);
          var r = c0_lo ^ c1_lo ^ c2_lo;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function g0_512_hi(xh, xl) {
          var c0_hi = rotr64_hi(xh, xl, 1);
          var c1_hi = rotr64_hi(xh, xl, 8);
          var c2_hi = shr64_hi(xh, xl, 7);
          var r = c0_hi ^ c1_hi ^ c2_hi;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function g0_512_lo(xh, xl) {
          var c0_lo = rotr64_lo(xh, xl, 1);
          var c1_lo = rotr64_lo(xh, xl, 8);
          var c2_lo = shr64_lo(xh, xl, 7);
          var r = c0_lo ^ c1_lo ^ c2_lo;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function g1_512_hi(xh, xl) {
          var c0_hi = rotr64_hi(xh, xl, 19);
          var c1_hi = rotr64_hi(xl, xh, 29);
          var c2_hi = shr64_hi(xh, xl, 6);
          var r = c0_hi ^ c1_hi ^ c2_hi;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        function g1_512_lo(xh, xl) {
          var c0_lo = rotr64_lo(xh, xl, 19);
          var c1_lo = rotr64_lo(xl, xh, 29);
          var c2_lo = shr64_lo(xh, xl, 6);
          var r = c0_lo ^ c1_lo ^ c2_lo;
          if (r < 0)
            r += 4294967296;
          return r;
        }
        return _512;
      }
      var _384;
      var hasRequired_384;
      function require_384() {
        if (hasRequired_384) return _384;
        hasRequired_384 = 1;
        var utils2 = requireUtils();
        var SHA512 = require_512();
        function SHA384() {
          if (!(this instanceof SHA384))
            return new SHA384();
          SHA512.call(this);
          this.h = [
            3418070365,
            3238371032,
            1654270250,
            914150663,
            2438529370,
            812702999,
            355462360,
            4144912697,
            1731405415,
            4290775857,
            2394180231,
            1750603025,
            3675008525,
            1694076839,
            1203062813,
            3204075428
          ];
        }
        utils2.inherits(SHA384, SHA512);
        _384 = SHA384;
        SHA384.blockSize = 1024;
        SHA384.outSize = 384;
        SHA384.hmacStrength = 192;
        SHA384.padLength = 128;
        SHA384.prototype._digest = function digest(enc) {
          if (enc === "hex")
            return utils2.toHex32(this.h.slice(0, 12), "big");
          else
            return utils2.split32(this.h.slice(0, 12), "big");
        };
        return _384;
      }
      var hasRequiredSha;
      function requireSha() {
        if (hasRequiredSha) return sha;
        hasRequiredSha = 1;
        sha.sha1 = require_1();
        sha.sha224 = require_224();
        sha.sha256 = require_256();
        sha.sha384 = require_384();
        sha.sha512 = require_512();
        return sha;
      }
      var ripemd = {};
      var hasRequiredRipemd;
      function requireRipemd() {
        if (hasRequiredRipemd) return ripemd;
        hasRequiredRipemd = 1;
        var utils2 = requireUtils();
        var common2 = requireCommon$1();
        var rotl32 = utils2.rotl32;
        var sum32 = utils2.sum32;
        var sum32_3 = utils2.sum32_3;
        var sum32_4 = utils2.sum32_4;
        var BlockHash = common2.BlockHash;
        function RIPEMD160() {
          if (!(this instanceof RIPEMD160))
            return new RIPEMD160();
          BlockHash.call(this);
          this.h = [1732584193, 4023233417, 2562383102, 271733878, 3285377520];
          this.endian = "little";
        }
        utils2.inherits(RIPEMD160, BlockHash);
        ripemd.ripemd160 = RIPEMD160;
        RIPEMD160.blockSize = 512;
        RIPEMD160.outSize = 160;
        RIPEMD160.hmacStrength = 192;
        RIPEMD160.padLength = 64;
        RIPEMD160.prototype._update = function update(msg, start) {
          var A = this.h[0];
          var B = this.h[1];
          var C = this.h[2];
          var D = this.h[3];
          var E = this.h[4];
          var Ah = A;
          var Bh = B;
          var Ch = C;
          var Dh = D;
          var Eh = E;
          for (var j = 0; j < 80; j++) {
            var T = sum32(
              rotl32(
                sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
                s[j]
              ),
              E
            );
            A = E;
            E = D;
            D = rotl32(C, 10);
            C = B;
            B = T;
            T = sum32(
              rotl32(
                sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
                sh[j]
              ),
              Eh
            );
            Ah = Eh;
            Eh = Dh;
            Dh = rotl32(Ch, 10);
            Ch = Bh;
            Bh = T;
          }
          T = sum32_3(this.h[1], C, Dh);
          this.h[1] = sum32_3(this.h[2], D, Eh);
          this.h[2] = sum32_3(this.h[3], E, Ah);
          this.h[3] = sum32_3(this.h[4], A, Bh);
          this.h[4] = sum32_3(this.h[0], B, Ch);
          this.h[0] = T;
        };
        RIPEMD160.prototype._digest = function digest(enc) {
          if (enc === "hex")
            return utils2.toHex32(this.h, "little");
          else
            return utils2.split32(this.h, "little");
        };
        function f(j, x, y, z) {
          if (j <= 15)
            return x ^ y ^ z;
          else if (j <= 31)
            return x & y | ~x & z;
          else if (j <= 47)
            return (x | ~y) ^ z;
          else if (j <= 63)
            return x & z | y & ~z;
          else
            return x ^ (y | ~z);
        }
        function K(j) {
          if (j <= 15)
            return 0;
          else if (j <= 31)
            return 1518500249;
          else if (j <= 47)
            return 1859775393;
          else if (j <= 63)
            return 2400959708;
          else
            return 2840853838;
        }
        function Kh(j) {
          if (j <= 15)
            return 1352829926;
          else if (j <= 31)
            return 1548603684;
          else if (j <= 47)
            return 1836072691;
          else if (j <= 63)
            return 2053994217;
          else
            return 0;
        }
        var r = [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          7,
          4,
          13,
          1,
          10,
          6,
          15,
          3,
          12,
          0,
          9,
          5,
          2,
          14,
          11,
          8,
          3,
          10,
          14,
          4,
          9,
          15,
          8,
          1,
          2,
          7,
          0,
          6,
          13,
          11,
          5,
          12,
          1,
          9,
          11,
          10,
          0,
          8,
          12,
          4,
          13,
          3,
          7,
          15,
          14,
          5,
          6,
          2,
          4,
          0,
          5,
          9,
          7,
          12,
          2,
          10,
          14,
          1,
          3,
          8,
          11,
          6,
          15,
          13
        ];
        var rh = [
          5,
          14,
          7,
          0,
          9,
          2,
          11,
          4,
          13,
          6,
          15,
          8,
          1,
          10,
          3,
          12,
          6,
          11,
          3,
          7,
          0,
          13,
          5,
          10,
          14,
          15,
          8,
          12,
          4,
          9,
          1,
          2,
          15,
          5,
          1,
          3,
          7,
          14,
          6,
          9,
          11,
          8,
          12,
          2,
          10,
          0,
          4,
          13,
          8,
          6,
          4,
          1,
          3,
          11,
          15,
          0,
          5,
          12,
          2,
          13,
          9,
          7,
          10,
          14,
          12,
          15,
          10,
          4,
          1,
          5,
          8,
          7,
          6,
          2,
          13,
          14,
          0,
          3,
          9,
          11
        ];
        var s = [
          11,
          14,
          15,
          12,
          5,
          8,
          7,
          9,
          11,
          13,
          14,
          15,
          6,
          7,
          9,
          8,
          7,
          6,
          8,
          13,
          11,
          9,
          7,
          15,
          7,
          12,
          15,
          9,
          11,
          7,
          13,
          12,
          11,
          13,
          6,
          7,
          14,
          9,
          13,
          15,
          14,
          8,
          13,
          6,
          5,
          12,
          7,
          5,
          11,
          12,
          14,
          15,
          14,
          15,
          9,
          8,
          9,
          14,
          5,
          6,
          8,
          6,
          5,
          12,
          9,
          15,
          5,
          11,
          6,
          8,
          13,
          12,
          5,
          12,
          13,
          14,
          11,
          8,
          5,
          6
        ];
        var sh = [
          8,
          9,
          9,
          11,
          13,
          15,
          15,
          5,
          7,
          7,
          8,
          11,
          14,
          14,
          12,
          6,
          9,
          13,
          15,
          7,
          12,
          8,
          9,
          11,
          7,
          7,
          12,
          7,
          6,
          15,
          13,
          11,
          9,
          7,
          15,
          11,
          8,
          6,
          6,
          14,
          12,
          13,
          5,
          14,
          13,
          13,
          7,
          5,
          15,
          5,
          8,
          11,
          14,
          14,
          6,
          14,
          6,
          9,
          12,
          9,
          12,
          5,
          15,
          8,
          8,
          5,
          12,
          9,
          12,
          5,
          14,
          6,
          8,
          13,
          6,
          5,
          15,
          13,
          11,
          11
        ];
        return ripemd;
      }
      var hmac$2;
      var hasRequiredHmac$1;
      function requireHmac$1() {
        if (hasRequiredHmac$1) return hmac$2;
        hasRequiredHmac$1 = 1;
        var utils2 = requireUtils();
        var assert = requireMinimalisticAssert();
        function Hmac(hash2, key2, enc) {
          if (!(this instanceof Hmac))
            return new Hmac(hash2, key2, enc);
          this.Hash = hash2;
          this.blockSize = hash2.blockSize / 8;
          this.outSize = hash2.outSize / 8;
          this.inner = null;
          this.outer = null;
          this._init(utils2.toArray(key2, enc));
        }
        hmac$2 = Hmac;
        Hmac.prototype._init = function init(key2) {
          if (key2.length > this.blockSize)
            key2 = new this.Hash().update(key2).digest();
          assert(key2.length <= this.blockSize);
          for (var i2 = key2.length; i2 < this.blockSize; i2++)
            key2.push(0);
          for (i2 = 0; i2 < key2.length; i2++)
            key2[i2] ^= 54;
          this.inner = new this.Hash().update(key2);
          for (i2 = 0; i2 < key2.length; i2++)
            key2[i2] ^= 106;
          this.outer = new this.Hash().update(key2);
        };
        Hmac.prototype.update = function update(msg, enc) {
          this.inner.update(msg, enc);
          return this;
        };
        Hmac.prototype.digest = function digest(enc) {
          this.outer.update(this.inner.digest());
          return this.outer.digest(enc);
        };
        return hmac$2;
      }
      var hasRequiredHash;
      function requireHash() {
        if (hasRequiredHash) return hash;
        hasRequiredHash = 1;
        (function(exports$12) {
          var hash2 = exports$12;
          hash2.utils = requireUtils();
          hash2.common = requireCommon$1();
          hash2.sha = requireSha();
          hash2.ripemd = requireRipemd();
          hash2.hmac = requireHmac$1();
          hash2.sha1 = hash2.sha.sha1;
          hash2.sha256 = hash2.sha.sha256;
          hash2.sha224 = hash2.sha.sha224;
          hash2.sha384 = hash2.sha.sha384;
          hash2.sha512 = hash2.sha.sha512;
          hash2.ripemd160 = hash2.ripemd.ripemd160;
        })(hash);
        return hash;
      }
      var secp256k1;
      var hasRequiredSecp256k1;
      function requireSecp256k1() {
        if (hasRequiredSecp256k1) return secp256k1;
        hasRequiredSecp256k1 = 1;
        secp256k1 = {
          doubles: {
            step: 4,
            points: [
              [
                "e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a",
                "f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"
              ],
              [
                "8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508",
                "11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"
              ],
              [
                "175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739",
                "d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"
              ],
              [
                "363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640",
                "4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"
              ],
              [
                "8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c",
                "4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"
              ],
              [
                "723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda",
                "96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"
              ],
              [
                "eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa",
                "5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"
              ],
              [
                "100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0",
                "cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"
              ],
              [
                "e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d",
                "9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"
              ],
              [
                "feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d",
                "e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"
              ],
              [
                "da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1",
                "9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"
              ],
              [
                "53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0",
                "5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"
              ],
              [
                "8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047",
                "10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"
              ],
              [
                "385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862",
                "283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"
              ],
              [
                "6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7",
                "7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"
              ],
              [
                "3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd",
                "56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"
              ],
              [
                "85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83",
                "7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"
              ],
              [
                "948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a",
                "53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"
              ],
              [
                "6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8",
                "bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"
              ],
              [
                "e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d",
                "4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"
              ],
              [
                "e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725",
                "7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"
              ],
              [
                "213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754",
                "4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"
              ],
              [
                "4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c",
                "17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"
              ],
              [
                "fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6",
                "6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"
              ],
              [
                "76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39",
                "c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"
              ],
              [
                "c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891",
                "893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"
              ],
              [
                "d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b",
                "febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"
              ],
              [
                "b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03",
                "2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"
              ],
              [
                "e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d",
                "eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"
              ],
              [
                "a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070",
                "7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"
              ],
              [
                "90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4",
                "e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"
              ],
              [
                "8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da",
                "662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"
              ],
              [
                "e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11",
                "1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"
              ],
              [
                "8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e",
                "efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"
              ],
              [
                "e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41",
                "2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"
              ],
              [
                "b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef",
                "67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"
              ],
              [
                "d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8",
                "db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"
              ],
              [
                "324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d",
                "648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"
              ],
              [
                "4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96",
                "35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"
              ],
              [
                "9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd",
                "ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"
              ],
              [
                "6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5",
                "9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"
              ],
              [
                "a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266",
                "40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"
              ],
              [
                "7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71",
                "34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"
              ],
              [
                "928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac",
                "c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"
              ],
              [
                "85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751",
                "1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"
              ],
              [
                "ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e",
                "493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"
              ],
              [
                "827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241",
                "c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"
              ],
              [
                "eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3",
                "be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"
              ],
              [
                "e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f",
                "4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"
              ],
              [
                "1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19",
                "aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"
              ],
              [
                "146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be",
                "b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"
              ],
              [
                "fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9",
                "6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"
              ],
              [
                "da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2",
                "8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"
              ],
              [
                "a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13",
                "7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"
              ],
              [
                "174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c",
                "ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"
              ],
              [
                "959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba",
                "2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"
              ],
              [
                "d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151",
                "e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"
              ],
              [
                "64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073",
                "d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"
              ],
              [
                "8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458",
                "38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"
              ],
              [
                "13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b",
                "69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"
              ],
              [
                "bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366",
                "d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"
              ],
              [
                "8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa",
                "40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"
              ],
              [
                "8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0",
                "620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"
              ],
              [
                "dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787",
                "7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"
              ],
              [
                "f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e",
                "ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"
              ]
            ]
          },
          naf: {
            wnd: 7,
            points: [
              [
                "f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9",
                "388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"
              ],
              [
                "2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4",
                "d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"
              ],
              [
                "5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc",
                "6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"
              ],
              [
                "acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe",
                "cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"
              ],
              [
                "774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb",
                "d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"
              ],
              [
                "f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8",
                "ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"
              ],
              [
                "d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e",
                "581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"
              ],
              [
                "defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34",
                "4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"
              ],
              [
                "2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c",
                "85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"
              ],
              [
                "352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5",
                "321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"
              ],
              [
                "2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f",
                "2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"
              ],
              [
                "9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714",
                "73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"
              ],
              [
                "daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729",
                "a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"
              ],
              [
                "c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db",
                "2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"
              ],
              [
                "6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4",
                "e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"
              ],
              [
                "1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5",
                "b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"
              ],
              [
                "605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479",
                "2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"
              ],
              [
                "62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d",
                "80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"
              ],
              [
                "80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f",
                "1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"
              ],
              [
                "7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb",
                "d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"
              ],
              [
                "d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9",
                "eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"
              ],
              [
                "49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963",
                "758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"
              ],
              [
                "77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74",
                "958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"
              ],
              [
                "f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530",
                "e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"
              ],
              [
                "463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b",
                "5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"
              ],
              [
                "f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247",
                "cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"
              ],
              [
                "caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1",
                "cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"
              ],
              [
                "2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120",
                "4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"
              ],
              [
                "7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435",
                "91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"
              ],
              [
                "754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18",
                "673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"
              ],
              [
                "e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8",
                "59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"
              ],
              [
                "186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb",
                "3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"
              ],
              [
                "df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f",
                "55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"
              ],
              [
                "5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143",
                "efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"
              ],
              [
                "290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba",
                "e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"
              ],
              [
                "af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45",
                "f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"
              ],
              [
                "766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a",
                "744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"
              ],
              [
                "59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e",
                "c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"
              ],
              [
                "f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8",
                "e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"
              ],
              [
                "7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c",
                "30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"
              ],
              [
                "948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519",
                "e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"
              ],
              [
                "7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab",
                "100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"
              ],
              [
                "3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca",
                "ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"
              ],
              [
                "d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf",
                "8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"
              ],
              [
                "1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610",
                "68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"
              ],
              [
                "733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4",
                "f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"
              ],
              [
                "15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c",
                "d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"
              ],
              [
                "a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940",
                "edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"
              ],
              [
                "e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980",
                "a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"
              ],
              [
                "311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3",
                "66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"
              ],
              [
                "34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf",
                "9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"
              ],
              [
                "f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63",
                "4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"
              ],
              [
                "d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448",
                "fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"
              ],
              [
                "32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf",
                "5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"
              ],
              [
                "7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5",
                "8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"
              ],
              [
                "ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6",
                "8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"
              ],
              [
                "16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5",
                "5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"
              ],
              [
                "eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99",
                "f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"
              ],
              [
                "78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51",
                "f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"
              ],
              [
                "494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5",
                "42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"
              ],
              [
                "a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5",
                "204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"
              ],
              [
                "c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997",
                "4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"
              ],
              [
                "841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881",
                "73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"
              ],
              [
                "5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5",
                "39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"
              ],
              [
                "36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66",
                "d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"
              ],
              [
                "336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726",
                "ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"
              ],
              [
                "8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede",
                "6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"
              ],
              [
                "1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94",
                "60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"
              ],
              [
                "85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31",
                "3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"
              ],
              [
                "29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51",
                "b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"
              ],
              [
                "a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252",
                "ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"
              ],
              [
                "4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5",
                "cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"
              ],
              [
                "d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b",
                "6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"
              ],
              [
                "ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4",
                "322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"
              ],
              [
                "af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f",
                "6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"
              ],
              [
                "e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889",
                "2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"
              ],
              [
                "591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246",
                "b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"
              ],
              [
                "11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984",
                "998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"
              ],
              [
                "3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a",
                "b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"
              ],
              [
                "cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030",
                "bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"
              ],
              [
                "c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197",
                "6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"
              ],
              [
                "c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593",
                "c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"
              ],
              [
                "a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef",
                "21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"
              ],
              [
                "347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38",
                "60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"
              ],
              [
                "da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a",
                "49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"
              ],
              [
                "c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111",
                "5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"
              ],
              [
                "4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502",
                "7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"
              ],
              [
                "3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea",
                "be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"
              ],
              [
                "cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26",
                "8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"
              ],
              [
                "b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986",
                "39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"
              ],
              [
                "d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e",
                "62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"
              ],
              [
                "48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4",
                "25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"
              ],
              [
                "dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda",
                "ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"
              ],
              [
                "6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859",
                "cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"
              ],
              [
                "e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f",
                "f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"
              ],
              [
                "eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c",
                "6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"
              ],
              [
                "13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942",
                "fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"
              ],
              [
                "ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a",
                "1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"
              ],
              [
                "b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80",
                "5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"
              ],
              [
                "ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d",
                "438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"
              ],
              [
                "8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1",
                "cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"
              ],
              [
                "52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63",
                "c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"
              ],
              [
                "e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352",
                "6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"
              ],
              [
                "7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193",
                "ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"
              ],
              [
                "5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00",
                "9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"
              ],
              [
                "32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58",
                "ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"
              ],
              [
                "e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7",
                "d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"
              ],
              [
                "8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8",
                "c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"
              ],
              [
                "4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e",
                "67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"
              ],
              [
                "3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d",
                "cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"
              ],
              [
                "674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b",
                "299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"
              ],
              [
                "d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f",
                "f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"
              ],
              [
                "30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6",
                "462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"
              ],
              [
                "be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297",
                "62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"
              ],
              [
                "93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a",
                "7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"
              ],
              [
                "b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c",
                "ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"
              ],
              [
                "d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52",
                "4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"
              ],
              [
                "d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb",
                "bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"
              ],
              [
                "463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065",
                "bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"
              ],
              [
                "7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917",
                "603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"
              ],
              [
                "74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9",
                "cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"
              ],
              [
                "30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3",
                "553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"
              ],
              [
                "9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57",
                "712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"
              ],
              [
                "176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66",
                "ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"
              ],
              [
                "75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8",
                "9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"
              ],
              [
                "809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721",
                "9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"
              ],
              [
                "1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180",
                "4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"
              ]
            ]
          }
        };
        return secp256k1;
      }
      var hasRequiredCurves;
      function requireCurves() {
        if (hasRequiredCurves) return curves;
        hasRequiredCurves = 1;
        (function(exports$12) {
          var curves2 = exports$12;
          var hash2 = requireHash();
          var curve2 = requireCurve();
          var utils2 = requireUtils$1();
          var assert = utils2.assert;
          function PresetCurve(options) {
            if (options.type === "short")
              this.curve = new curve2.short(options);
            else if (options.type === "edwards")
              this.curve = new curve2.edwards(options);
            else
              this.curve = new curve2.mont(options);
            this.g = this.curve.g;
            this.n = this.curve.n;
            this.hash = options.hash;
            assert(this.g.validate(), "Invalid curve");
            assert(this.g.mul(this.n).isInfinity(), "Invalid curve, G*N != O");
          }
          curves2.PresetCurve = PresetCurve;
          function defineCurve(name, options) {
            Object.defineProperty(curves2, name, {
              configurable: true,
              enumerable: true,
              get: function() {
                var curve3 = new PresetCurve(options);
                Object.defineProperty(curves2, name, {
                  configurable: true,
                  enumerable: true,
                  value: curve3
                });
                return curve3;
              }
            });
          }
          defineCurve("p192", {
            type: "short",
            prime: "p192",
            p: "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",
            a: "ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",
            b: "64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",
            n: "ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",
            hash: hash2.sha256,
            gRed: false,
            g: [
              "188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012",
              "07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"
            ]
          });
          defineCurve("p224", {
            type: "short",
            prime: "p224",
            p: "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",
            a: "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",
            b: "b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",
            n: "ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",
            hash: hash2.sha256,
            gRed: false,
            g: [
              "b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21",
              "bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"
            ]
          });
          defineCurve("p256", {
            type: "short",
            prime: null,
            p: "ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",
            a: "ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",
            b: "5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",
            n: "ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",
            hash: hash2.sha256,
            gRed: false,
            g: [
              "6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296",
              "4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"
            ]
          });
          defineCurve("p384", {
            type: "short",
            prime: null,
            p: "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",
            a: "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",
            b: "b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",
            n: "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",
            hash: hash2.sha384,
            gRed: false,
            g: [
              "aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7",
              "3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"
            ]
          });
          defineCurve("p521", {
            type: "short",
            prime: null,
            p: "000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",
            a: "000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",
            b: "00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",
            n: "000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",
            hash: hash2.sha512,
            gRed: false,
            g: [
              "000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66",
              "00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"
            ]
          });
          defineCurve("curve25519", {
            type: "mont",
            prime: "p25519",
            p: "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",
            a: "76d06",
            b: "1",
            n: "1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",
            hash: hash2.sha256,
            gRed: false,
            g: [
              "9"
            ]
          });
          defineCurve("ed25519", {
            type: "edwards",
            prime: "p25519",
            p: "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",
            a: "-1",
            c: "1",
            // -121665 * (121666^(-1)) (mod P)
            d: "52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",
            n: "1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",
            hash: hash2.sha256,
            gRed: false,
            g: [
              "216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a",
              // 4/5
              "6666666666666666666666666666666666666666666666666666666666666658"
            ]
          });
          var pre;
          try {
            pre = requireSecp256k1();
          } catch (e) {
            pre = void 0;
          }
          defineCurve("secp256k1", {
            type: "short",
            prime: "k256",
            p: "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",
            a: "0",
            b: "7",
            n: "ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",
            h: "1",
            hash: hash2.sha256,
            // Precomputed endomorphism
            beta: "7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",
            lambda: "5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",
            basis: [
              {
                a: "3086d221a7d46bcde86c90e49284eb15",
                b: "-e4437ed6010e88286f547fa90abfe4c3"
              },
              {
                a: "114ca50f7a8e2f3f657c1108d9d44cfd8",
                b: "3086d221a7d46bcde86c90e49284eb15"
              }
            ],
            gRed: false,
            g: [
              "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
              "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
              pre
            ]
          });
        })(curves);
        return curves;
      }
      var hmacDrbg;
      var hasRequiredHmacDrbg;
      function requireHmacDrbg() {
        if (hasRequiredHmacDrbg) return hmacDrbg;
        hasRequiredHmacDrbg = 1;
        var hash2 = requireHash();
        var utils2 = requireUtils$2();
        var assert = requireMinimalisticAssert();
        function HmacDRBG(options) {
          if (!(this instanceof HmacDRBG))
            return new HmacDRBG(options);
          this.hash = options.hash;
          this.predResist = !!options.predResist;
          this.outLen = this.hash.outSize;
          this.minEntropy = options.minEntropy || this.hash.hmacStrength;
          this._reseed = null;
          this.reseedInterval = null;
          this.K = null;
          this.V = null;
          var entropy = utils2.toArray(options.entropy, options.entropyEnc || "hex");
          var nonce = utils2.toArray(options.nonce, options.nonceEnc || "hex");
          var pers = utils2.toArray(options.pers, options.persEnc || "hex");
          assert(
            entropy.length >= this.minEntropy / 8,
            "Not enough entropy. Minimum is: " + this.minEntropy + " bits"
          );
          this._init(entropy, nonce, pers);
        }
        hmacDrbg = HmacDRBG;
        HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
          var seed = entropy.concat(nonce).concat(pers);
          this.K = new Array(this.outLen / 8);
          this.V = new Array(this.outLen / 8);
          for (var i2 = 0; i2 < this.V.length; i2++) {
            this.K[i2] = 0;
            this.V[i2] = 1;
          }
          this._update(seed);
          this._reseed = 1;
          this.reseedInterval = 281474976710656;
        };
        HmacDRBG.prototype._hmac = function hmac2() {
          return new hash2.hmac(this.hash, this.K);
        };
        HmacDRBG.prototype._update = function update(seed) {
          var kmac = this._hmac().update(this.V).update([0]);
          if (seed)
            kmac = kmac.update(seed);
          this.K = kmac.digest();
          this.V = this._hmac().update(this.V).digest();
          if (!seed)
            return;
          this.K = this._hmac().update(this.V).update([1]).update(seed).digest();
          this.V = this._hmac().update(this.V).digest();
        };
        HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
          if (typeof entropyEnc !== "string") {
            addEnc = add;
            add = entropyEnc;
            entropyEnc = null;
          }
          entropy = utils2.toArray(entropy, entropyEnc);
          add = utils2.toArray(add, addEnc);
          assert(
            entropy.length >= this.minEntropy / 8,
            "Not enough entropy. Minimum is: " + this.minEntropy + " bits"
          );
          this._update(entropy.concat(add || []));
          this._reseed = 1;
        };
        HmacDRBG.prototype.generate = function generate(len2, enc, add, addEnc) {
          if (this._reseed > this.reseedInterval)
            throw new Error("Reseed is required");
          if (typeof enc !== "string") {
            addEnc = add;
            add = enc;
            enc = null;
          }
          if (add) {
            add = utils2.toArray(add, addEnc || "hex");
            this._update(add);
          }
          var temp = [];
          while (temp.length < len2) {
            this.V = this._hmac().update(this.V).digest();
            temp = temp.concat(this.V);
          }
          var res = temp.slice(0, len2);
          this._update(add);
          this._reseed++;
          return utils2.encode(res, enc);
        };
        return hmacDrbg;
      }
      var key$1;
      var hasRequiredKey$1;
      function requireKey$1() {
        if (hasRequiredKey$1) return key$1;
        hasRequiredKey$1 = 1;
        var BN = requireBn$3();
        var utils2 = requireUtils$1();
        var assert = utils2.assert;
        function KeyPair(ec2, options) {
          this.ec = ec2;
          this.priv = null;
          this.pub = null;
          if (options.priv)
            this._importPrivate(options.priv, options.privEnc);
          if (options.pub)
            this._importPublic(options.pub, options.pubEnc);
        }
        key$1 = KeyPair;
        KeyPair.fromPublic = function fromPublic(ec2, pub, enc) {
          if (pub instanceof KeyPair)
            return pub;
          return new KeyPair(ec2, {
            pub,
            pubEnc: enc
          });
        };
        KeyPair.fromPrivate = function fromPrivate(ec2, priv, enc) {
          if (priv instanceof KeyPair)
            return priv;
          return new KeyPair(ec2, {
            priv,
            privEnc: enc
          });
        };
        KeyPair.prototype.validate = function validate() {
          var pub = this.getPublic();
          if (pub.isInfinity())
            return { result: false, reason: "Invalid public key" };
          if (!pub.validate())
            return { result: false, reason: "Public key is not a point" };
          if (!pub.mul(this.ec.curve.n).isInfinity())
            return { result: false, reason: "Public key * N != O" };
          return { result: true, reason: null };
        };
        KeyPair.prototype.getPublic = function getPublic(compact, enc) {
          if (typeof compact === "string") {
            enc = compact;
            compact = null;
          }
          if (!this.pub)
            this.pub = this.ec.g.mul(this.priv);
          if (!enc)
            return this.pub;
          return this.pub.encode(enc, compact);
        };
        KeyPair.prototype.getPrivate = function getPrivate(enc) {
          if (enc === "hex")
            return this.priv.toString(16, 2);
          else
            return this.priv;
        };
        KeyPair.prototype._importPrivate = function _importPrivate(key2, enc) {
          this.priv = new BN(key2, enc || 16);
          this.priv = this.priv.umod(this.ec.curve.n);
        };
        KeyPair.prototype._importPublic = function _importPublic(key2, enc) {
          if (key2.x || key2.y) {
            if (this.ec.curve.type === "mont") {
              assert(key2.x, "Need x coordinate");
            } else if (this.ec.curve.type === "short" || this.ec.curve.type === "edwards") {
              assert(key2.x && key2.y, "Need both x and y coordinate");
            }
            this.pub = this.ec.curve.point(key2.x, key2.y);
            return;
          }
          this.pub = this.ec.curve.decodePoint(key2, enc);
        };
        KeyPair.prototype.derive = function derive(pub) {
          if (!pub.validate()) {
            assert(pub.validate(), "public point not validated");
          }
          return pub.mul(this.priv).getX();
        };
        KeyPair.prototype.sign = function sign2(msg, enc, options) {
          return this.ec.sign(msg, this, enc, options);
        };
        KeyPair.prototype.verify = function verify(msg, signature2, options) {
          return this.ec.verify(msg, signature2, this, void 0, options);
        };
        KeyPair.prototype.inspect = function inspect() {
          return "";
        };
        return key$1;
      }
      var signature$1;
      var hasRequiredSignature$1;
      function requireSignature$1() {
        if (hasRequiredSignature$1) return signature$1;
        hasRequiredSignature$1 = 1;
        var BN = requireBn$3();
        var utils2 = requireUtils$1();
        var assert = utils2.assert;
        function Signature(options, enc) {
          if (options instanceof Signature)
            return options;
          if (this._importDER(options, enc))
            return;
          assert(options.r && options.s, "Signature without r or s");
          this.r = new BN(options.r, 16);
          this.s = new BN(options.s, 16);
          if (options.recoveryParam === void 0)
            this.recoveryParam = null;
          else
            this.recoveryParam = options.recoveryParam;
        }
        signature$1 = Signature;
        function Position() {
          this.place = 0;
        }
        function getLength(buf, p) {
          var initial = buf[p.place++];
          if (!(initial & 128)) {
            return initial;
          }
          var octetLen = initial & 15;
          if (octetLen === 0 || octetLen > 4) {
            return false;
          }
          if (buf[p.place] === 0) {
            return false;
          }
          var val = 0;
          for (var i2 = 0, off = p.place; i2 < octetLen; i2++, off++) {
            val <<= 8;
            val |= buf[off];
            val >>>= 0;
          }
          if (val <= 127) {
            return false;
          }
          p.place = off;
          return val;
        }
        function rmPadding(buf) {
          var i2 = 0;
          var len2 = buf.length - 1;
          while (!buf[i2] && !(buf[i2 + 1] & 128) && i2 < len2) {
            i2++;
          }
          if (i2 === 0) {
            return buf;
          }
          return buf.slice(i2);
        }
        Signature.prototype._importDER = function _importDER(data, enc) {
          data = utils2.toArray(data, enc);
          var p = new Position();
          if (data[p.place++] !== 48) {
            return false;
          }
          var len2 = getLength(data, p);
          if (len2 === false) {
            return false;
          }
          if (len2 + p.place !== data.length) {
            return false;
          }
          if (data[p.place++] !== 2) {
            return false;
          }
          var rlen = getLength(data, p);
          if (rlen === false) {
            return false;
          }
          if ((data[p.place] & 128) !== 0) {
            return false;
          }
          var r = data.slice(p.place, rlen + p.place);
          p.place += rlen;
          if (data[p.place++] !== 2) {
            return false;
          }
          var slen = getLength(data, p);
          if (slen === false) {
            return false;
          }
          if (data.length !== slen + p.place) {
            return false;
          }
          if ((data[p.place] & 128) !== 0) {
            return false;
          }
          var s = data.slice(p.place, slen + p.place);
          if (r[0] === 0) {
            if (r[1] & 128) {
              r = r.slice(1);
            } else {
              return false;
            }
          }
          if (s[0] === 0) {
            if (s[1] & 128) {
              s = s.slice(1);
            } else {
              return false;
            }
          }
          this.r = new BN(r);
          this.s = new BN(s);
          this.recoveryParam = null;
          return true;
        };
        function constructLength(arr, len2) {
          if (len2 < 128) {
            arr.push(len2);
            return;
          }
          var octets = 1 + (Math.log(len2) / Math.LN2 >>> 3);
          arr.push(octets | 128);
          while (--octets) {
            arr.push(len2 >>> (octets << 3) & 255);
          }
          arr.push(len2);
        }
        Signature.prototype.toDER = function toDER(enc) {
          var r = this.r.toArray();
          var s = this.s.toArray();
          if (r[0] & 128)
            r = [0].concat(r);
          if (s[0] & 128)
            s = [0].concat(s);
          r = rmPadding(r);
          s = rmPadding(s);
          while (!s[0] && !(s[1] & 128)) {
            s = s.slice(1);
          }
          var arr = [2];
          constructLength(arr, r.length);
          arr = arr.concat(r);
          arr.push(2);
          constructLength(arr, s.length);
          var backHalf = arr.concat(s);
          var res = [48];
          constructLength(res, backHalf.length);
          res = res.concat(backHalf);
          return utils2.encode(res, enc);
        };
        return signature$1;
      }
      var ec;
      var hasRequiredEc;
      function requireEc() {
        if (hasRequiredEc) return ec;
        hasRequiredEc = 1;
        var BN = requireBn$3();
        var HmacDRBG = requireHmacDrbg();
        var utils2 = requireUtils$1();
        var curves2 = requireCurves();
        var rand = requireBrorand();
        var assert = utils2.assert;
        var KeyPair = requireKey$1();
        var Signature = requireSignature$1();
        function EC(options) {
          if (!(this instanceof EC))
            return new EC(options);
          if (typeof options === "string") {
            assert(
              Object.prototype.hasOwnProperty.call(curves2, options),
              "Unknown curve " + options
            );
            options = curves2[options];
          }
          if (options instanceof curves2.PresetCurve)
            options = { curve: options };
          this.curve = options.curve.curve;
          this.n = this.curve.n;
          this.nh = this.n.ushrn(1);
          this.g = this.curve.g;
          this.g = options.curve.g;
          this.g.precompute(options.curve.n.bitLength() + 1);
          this.hash = options.hash || options.curve.hash;
        }
        ec = EC;
        EC.prototype.keyPair = function keyPair(options) {
          return new KeyPair(this, options);
        };
        EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
          return KeyPair.fromPrivate(this, priv, enc);
        };
        EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
          return KeyPair.fromPublic(this, pub, enc);
        };
        EC.prototype.genKeyPair = function genKeyPair(options) {
          if (!options)
            options = {};
          var drbg = new HmacDRBG({
            hash: this.hash,
            pers: options.pers,
            persEnc: options.persEnc || "utf8",
            entropy: options.entropy || rand(this.hash.hmacStrength),
            entropyEnc: options.entropy && options.entropyEnc || "utf8",
            nonce: this.n.toArray()
          });
          var bytes = this.n.byteLength();
          var ns2 = this.n.sub(new BN(2));
          for (; ; ) {
            var priv = new BN(drbg.generate(bytes));
            if (priv.cmp(ns2) > 0)
              continue;
            priv.iaddn(1);
            return this.keyFromPrivate(priv);
          }
        };
        EC.prototype._truncateToN = function _truncateToN(msg, truncOnly, bitLength) {
          var byteLength2;
          if (BN.isBN(msg) || typeof msg === "number") {
            msg = new BN(msg, 16);
            byteLength2 = msg.byteLength();
          } else if (typeof msg === "object") {
            byteLength2 = msg.length;
            msg = new BN(msg, 16);
          } else {
            var str = msg.toString();
            byteLength2 = str.length + 1 >>> 1;
            msg = new BN(str, 16);
          }
          if (typeof bitLength !== "number") {
            bitLength = byteLength2 * 8;
          }
          var delta = bitLength - this.n.bitLength();
          if (delta > 0)
            msg = msg.ushrn(delta);
          if (!truncOnly && msg.cmp(this.n) >= 0)
            return msg.sub(this.n);
          else
            return msg;
        };
        EC.prototype.sign = function sign2(msg, key2, enc, options) {
          if (typeof enc === "object") {
            options = enc;
            enc = null;
          }
          if (!options)
            options = {};
          if (typeof msg !== "string" && typeof msg !== "number" && !BN.isBN(msg)) {
            assert(
              typeof msg === "object" && msg && typeof msg.length === "number",
              "Expected message to be an array-like, a hex string, or a BN instance"
            );
            assert(msg.length >>> 0 === msg.length);
            for (var i2 = 0; i2 < msg.length; i2++) assert((msg[i2] & 255) === msg[i2]);
          }
          key2 = this.keyFromPrivate(key2, enc);
          msg = this._truncateToN(msg, false, options.msgBitLength);
          assert(!msg.isNeg(), "Can not sign a negative message");
          var bytes = this.n.byteLength();
          var bkey = key2.getPrivate().toArray("be", bytes);
          var nonce = msg.toArray("be", bytes);
          assert(new BN(nonce).eq(msg), "Can not sign message");
          var drbg = new HmacDRBG({
            hash: this.hash,
            entropy: bkey,
            nonce,
            pers: options.pers,
            persEnc: options.persEnc || "utf8"
          });
          var ns1 = this.n.sub(new BN(1));
          for (var iter = 0; ; iter++) {
            var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength()));
            k = this._truncateToN(k, true);
            if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
              continue;
            var kp = this.g.mul(k);
            if (kp.isInfinity())
              continue;
            var kpX = kp.getX();
            var r = kpX.umod(this.n);
            if (r.cmpn(0) === 0)
              continue;
            var s = k.invm(this.n).mul(r.mul(key2.getPrivate()).iadd(msg));
            s = s.umod(this.n);
            if (s.cmpn(0) === 0)
              continue;
            var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0);
            if (options.canonical && s.cmp(this.nh) > 0) {
              s = this.n.sub(s);
              recoveryParam ^= 1;
            }
            return new Signature({ r, s, recoveryParam });
          }
        };
        EC.prototype.verify = function verify(msg, signature2, key2, enc, options) {
          if (!options)
            options = {};
          msg = this._truncateToN(msg, false, options.msgBitLength);
          key2 = this.keyFromPublic(key2, enc);
          signature2 = new Signature(signature2, "hex");
          var r = signature2.r;
          var s = signature2.s;
          if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
            return false;
          if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
            return false;
          var sinv = s.invm(this.n);
          var u1 = sinv.mul(msg).umod(this.n);
          var u2 = sinv.mul(r).umod(this.n);
          var p;
          if (!this.curve._maxwellTrick) {
            p = this.g.mulAdd(u1, key2.getPublic(), u2);
            if (p.isInfinity())
              return false;
            return p.getX().umod(this.n).cmp(r) === 0;
          }
          p = this.g.jmulAdd(u1, key2.getPublic(), u2);
          if (p.isInfinity())
            return false;
          return p.eqXToP(r);
        };
        EC.prototype.recoverPubKey = function(msg, signature2, j, enc) {
          assert((3 & j) === j, "The recovery param is more than two bits");
          signature2 = new Signature(signature2, enc);
          var n = this.n;
          var e = new BN(msg);
          var r = signature2.r;
          var s = signature2.s;
          var isYOdd = j & 1;
          var isSecondKey = j >> 1;
          if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
            throw new Error("Unable to find sencond key candinate");
          if (isSecondKey)
            r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
          else
            r = this.curve.pointFromX(r, isYOdd);
          var rInv = signature2.r.invm(n);
          var s1 = n.sub(e).mul(rInv).umod(n);
          var s2 = s.mul(rInv).umod(n);
          return this.g.mulAdd(s1, r, s2);
        };
        EC.prototype.getKeyRecoveryParam = function(e, signature2, Q, enc) {
          signature2 = new Signature(signature2, enc);
          if (signature2.recoveryParam !== null)
            return signature2.recoveryParam;
          for (var i2 = 0; i2 < 4; i2++) {
            var Qprime;
            try {
              Qprime = this.recoverPubKey(e, signature2, i2);
            } catch (e2) {
              continue;
            }
            if (Qprime.eq(Q))
              return i2;
          }
          throw new Error("Unable to find valid recovery factor");
        };
        return ec;
      }
      var key;
      var hasRequiredKey;
      function requireKey() {
        if (hasRequiredKey) return key;
        hasRequiredKey = 1;
        var utils2 = requireUtils$1();
        var assert = utils2.assert;
        var parseBytes = utils2.parseBytes;
        var cachedProperty = utils2.cachedProperty;
        function KeyPair(eddsa2, params) {
          this.eddsa = eddsa2;
          this._secret = parseBytes(params.secret);
          if (eddsa2.isPoint(params.pub))
            this._pub = params.pub;
          else
            this._pubBytes = parseBytes(params.pub);
        }
        KeyPair.fromPublic = function fromPublic(eddsa2, pub) {
          if (pub instanceof KeyPair)
            return pub;
          return new KeyPair(eddsa2, { pub });
        };
        KeyPair.fromSecret = function fromSecret(eddsa2, secret) {
          if (secret instanceof KeyPair)
            return secret;
          return new KeyPair(eddsa2, { secret });
        };
        KeyPair.prototype.secret = function secret() {
          return this._secret;
        };
        cachedProperty(KeyPair, "pubBytes", function pubBytes() {
          return this.eddsa.encodePoint(this.pub());
        });
        cachedProperty(KeyPair, "pub", function pub() {
          if (this._pubBytes)
            return this.eddsa.decodePoint(this._pubBytes);
          return this.eddsa.g.mul(this.priv());
        });
        cachedProperty(KeyPair, "privBytes", function privBytes() {
          var eddsa2 = this.eddsa;
          var hash2 = this.hash();
          var lastIx = eddsa2.encodingLength - 1;
          var a = hash2.slice(0, eddsa2.encodingLength);
          a[0] &= 248;
          a[lastIx] &= 127;
          a[lastIx] |= 64;
          return a;
        });
        cachedProperty(KeyPair, "priv", function priv() {
          return this.eddsa.decodeInt(this.privBytes());
        });
        cachedProperty(KeyPair, "hash", function hash2() {
          return this.eddsa.hash().update(this.secret()).digest();
        });
        cachedProperty(KeyPair, "messagePrefix", function messagePrefix() {
          return this.hash().slice(this.eddsa.encodingLength);
        });
        KeyPair.prototype.sign = function sign2(message) {
          assert(this._secret, "KeyPair can only verify");
          return this.eddsa.sign(message, this);
        };
        KeyPair.prototype.verify = function verify(message, sig) {
          return this.eddsa.verify(message, sig, this);
        };
        KeyPair.prototype.getSecret = function getSecret(enc) {
          assert(this._secret, "KeyPair is public only");
          return utils2.encode(this.secret(), enc);
        };
        KeyPair.prototype.getPublic = function getPublic(enc) {
          return utils2.encode(this.pubBytes(), enc);
        };
        key = KeyPair;
        return key;
      }
      var signature;
      var hasRequiredSignature;
      function requireSignature() {
        if (hasRequiredSignature) return signature;
        hasRequiredSignature = 1;
        var BN = requireBn$3();
        var utils2 = requireUtils$1();
        var assert = utils2.assert;
        var cachedProperty = utils2.cachedProperty;
        var parseBytes = utils2.parseBytes;
        function Signature(eddsa2, sig) {
          this.eddsa = eddsa2;
          if (typeof sig !== "object")
            sig = parseBytes(sig);
          if (Array.isArray(sig)) {
            assert(sig.length === eddsa2.encodingLength * 2, "Signature has invalid size");
            sig = {
              R: sig.slice(0, eddsa2.encodingLength),
              S: sig.slice(eddsa2.encodingLength)
            };
          }
          assert(sig.R && sig.S, "Signature without R or S");
          if (eddsa2.isPoint(sig.R))
            this._R = sig.R;
          if (sig.S instanceof BN)
            this._S = sig.S;
          this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
          this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
        }
        cachedProperty(Signature, "S", function S() {
          return this.eddsa.decodeInt(this.Sencoded());
        });
        cachedProperty(Signature, "R", function R() {
          return this.eddsa.decodePoint(this.Rencoded());
        });
        cachedProperty(Signature, "Rencoded", function Rencoded() {
          return this.eddsa.encodePoint(this.R());
        });
        cachedProperty(Signature, "Sencoded", function Sencoded() {
          return this.eddsa.encodeInt(this.S());
        });
        Signature.prototype.toBytes = function toBytes() {
          return this.Rencoded().concat(this.Sencoded());
        };
        Signature.prototype.toHex = function toHex() {
          return utils2.encode(this.toBytes(), "hex").toUpperCase();
        };
        signature = Signature;
        return signature;
      }
      var eddsa;
      var hasRequiredEddsa;
      function requireEddsa() {
        if (hasRequiredEddsa) return eddsa;
        hasRequiredEddsa = 1;
        var hash2 = requireHash();
        var curves2 = requireCurves();
        var utils2 = requireUtils$1();
        var assert = utils2.assert;
        var parseBytes = utils2.parseBytes;
        var KeyPair = requireKey();
        var Signature = requireSignature();
        function EDDSA(curve2) {
          assert(curve2 === "ed25519", "only tested with ed25519 so far");
          if (!(this instanceof EDDSA))
            return new EDDSA(curve2);
          curve2 = curves2[curve2].curve;
          this.curve = curve2;
          this.g = curve2.g;
          this.g.precompute(curve2.n.bitLength() + 1);
          this.pointClass = curve2.point().constructor;
          this.encodingLength = Math.ceil(curve2.n.bitLength() / 8);
          this.hash = hash2.sha512;
        }
        eddsa = EDDSA;
        EDDSA.prototype.sign = function sign2(message, secret) {
          message = parseBytes(message);
          var key2 = this.keyFromSecret(secret);
          var r = this.hashInt(key2.messagePrefix(), message);
          var R = this.g.mul(r);
          var Rencoded = this.encodePoint(R);
          var s_ = this.hashInt(Rencoded, key2.pubBytes(), message).mul(key2.priv());
          var S = r.add(s_).umod(this.curve.n);
          return this.makeSignature({ R, S, Rencoded });
        };
        EDDSA.prototype.verify = function verify(message, sig, pub) {
          message = parseBytes(message);
          sig = this.makeSignature(sig);
          if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {
            return false;
          }
          var key2 = this.keyFromPublic(pub);
          var h = this.hashInt(sig.Rencoded(), key2.pubBytes(), message);
          var SG = this.g.mul(sig.S());
          var RplusAh = sig.R().add(key2.pub().mul(h));
          return RplusAh.eq(SG);
        };
        EDDSA.prototype.hashInt = function hashInt() {
          var hash3 = this.hash();
          for (var i2 = 0; i2 < arguments.length; i2++)
            hash3.update(arguments[i2]);
          return utils2.intFromLE(hash3.digest()).umod(this.curve.n);
        };
        EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
          return KeyPair.fromPublic(this, pub);
        };
        EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
          return KeyPair.fromSecret(this, secret);
        };
        EDDSA.prototype.makeSignature = function makeSignature(sig) {
          if (sig instanceof Signature)
            return sig;
          return new Signature(this, sig);
        };
        EDDSA.prototype.encodePoint = function encodePoint(point) {
          var enc = point.getY().toArray("le", this.encodingLength);
          enc[this.encodingLength - 1] |= point.getX().isOdd() ? 128 : 0;
          return enc;
        };
        EDDSA.prototype.decodePoint = function decodePoint(bytes) {
          bytes = utils2.parseBytes(bytes);
          var lastIx = bytes.length - 1;
          var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & -129);
          var xIsOdd = (bytes[lastIx] & 128) !== 0;
          var y = utils2.intFromLE(normed);
          return this.curve.pointFromY(y, xIsOdd);
        };
        EDDSA.prototype.encodeInt = function encodeInt(num) {
          return num.toArray("le", this.encodingLength);
        };
        EDDSA.prototype.decodeInt = function decodeInt(bytes) {
          return utils2.intFromLE(bytes);
        };
        EDDSA.prototype.isPoint = function isPoint(val) {
          return val instanceof this.pointClass;
        };
        return eddsa;
      }
      var hasRequiredElliptic;
      function requireElliptic() {
        if (hasRequiredElliptic) return elliptic;
        hasRequiredElliptic = 1;
        (function(exports$12) {
          var elliptic2 = exports$12;
          elliptic2.version = require$$0.version;
          elliptic2.utils = requireUtils$1();
          elliptic2.rand = requireBrorand();
          elliptic2.curve = requireCurve();
          elliptic2.curves = requireCurves();
          elliptic2.ec = requireEc();
          elliptic2.eddsa = requireEddsa();
        })(elliptic);
        return elliptic;
      }
      var asn1$1 = {};
      var asn1 = {};
      var bn$5 = { exports: {} };
      var bn$4 = bn$5.exports;
      var hasRequiredBn$2;
      function requireBn$2() {
        if (hasRequiredBn$2) return bn$5.exports;
        hasRequiredBn$2 = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this.strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                return c - 48 & 15;
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this.strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  r += c - 49 + 10;
                } else if (c >= 17) {
                  r += c - 17 + 10;
                } else {
                  r += c;
                }
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this.strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype.strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            BN.prototype.inspect = function inspect() {
              return (this.red ? "";
            };
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16);
            };
            BN.prototype.toBuffer = function toBuffer2(endian, length) {
              assert(typeof Buffer2 !== "undefined");
              return this.toArrayLike(Buffer2, endian, length);
            };
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              this.strip();
              var littleEndian = endian === "le";
              var res = new ArrayType(reqLength);
              var b, i2;
              var q = this.clone();
              if (!littleEndian) {
                for (i2 = 0; i2 < reqLength - byteLength2; i2++) {
                  res[i2] = 0;
                }
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[reqLength - i2 - 1] = b;
                }
              } else {
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[i2] = b;
                }
                for (; i2 < reqLength; i2++) {
                  res[i2] = 0;
                }
              }
              return res;
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this.strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this.strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this.strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this.strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this.strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this.strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out.strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out.strip();
            }
            function jumboMulTo(self2, num, out) {
              var fftm = new FFTM();
              return fftm.mulp(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            function FFTM(x, y) {
              this.x = x;
              this.y = y;
            }
            FFTM.prototype.makeRBT = function makeRBT(N) {
              var t = new Array(N);
              var l = BN.prototype._countBits(N) - 1;
              for (var i2 = 0; i2 < N; i2++) {
                t[i2] = this.revBin(i2, l, N);
              }
              return t;
            };
            FFTM.prototype.revBin = function revBin(x, l, N) {
              if (x === 0 || x === N - 1) return x;
              var rb = 0;
              for (var i2 = 0; i2 < l; i2++) {
                rb |= (x & 1) << l - i2 - 1;
                x >>= 1;
              }
              return rb;
            };
            FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
              for (var i2 = 0; i2 < N; i2++) {
                rtws[i2] = rws[rbt[i2]];
                itws[i2] = iws[rbt[i2]];
              }
            };
            FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
              this.permute(rbt, rws, iws, rtws, itws, N);
              for (var s = 1; s < N; s <<= 1) {
                var l = s << 1;
                var rtwdf = Math.cos(2 * Math.PI / l);
                var itwdf = Math.sin(2 * Math.PI / l);
                for (var p = 0; p < N; p += l) {
                  var rtwdf_ = rtwdf;
                  var itwdf_ = itwdf;
                  for (var j = 0; j < s; j++) {
                    var re = rtws[p + j];
                    var ie = itws[p + j];
                    var ro = rtws[p + j + s];
                    var io = itws[p + j + s];
                    var rx = rtwdf_ * ro - itwdf_ * io;
                    io = rtwdf_ * io + itwdf_ * ro;
                    ro = rx;
                    rtws[p + j] = re + ro;
                    itws[p + j] = ie + io;
                    rtws[p + j + s] = re - ro;
                    itws[p + j + s] = ie - io;
                    if (j !== l) {
                      rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                      itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                      rtwdf_ = rx;
                    }
                  }
                }
              }
            };
            FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
              var N = Math.max(m, n) | 1;
              var odd = N & 1;
              var i2 = 0;
              for (N = N / 2 | 0; N; N = N >>> 1) {
                i2++;
              }
              return 1 << i2 + 1 + odd;
            };
            FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
              if (N <= 1) return;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var t = rws[i2];
                rws[i2] = rws[N - i2 - 1];
                rws[N - i2 - 1] = t;
                t = iws[i2];
                iws[i2] = -iws[N - i2 - 1];
                iws[N - i2 - 1] = -t;
              }
            };
            FFTM.prototype.normalize13b = function normalize13b(ws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var w = Math.round(ws[2 * i2 + 1] / N) * 8192 + Math.round(ws[2 * i2] / N) + carry;
                ws[i2] = w & 67108863;
                if (w < 67108864) {
                  carry = 0;
                } else {
                  carry = w / 67108864 | 0;
                }
              }
              return ws;
            };
            FFTM.prototype.convert13b = function convert13b(ws, len2, rws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < len2; i2++) {
                carry = carry + (ws[i2] | 0);
                rws[2 * i2] = carry & 8191;
                carry = carry >>> 13;
                rws[2 * i2 + 1] = carry & 8191;
                carry = carry >>> 13;
              }
              for (i2 = 2 * len2; i2 < N; ++i2) {
                rws[i2] = 0;
              }
              assert(carry === 0);
              assert((carry & -8192) === 0);
            };
            FFTM.prototype.stub = function stub(N) {
              var ph = new Array(N);
              for (var i2 = 0; i2 < N; i2++) {
                ph[i2] = 0;
              }
              return ph;
            };
            FFTM.prototype.mulp = function mulp(x, y, out) {
              var N = 2 * this.guessLen13b(x.length, y.length);
              var rbt = this.makeRBT(N);
              var _ = this.stub(N);
              var rws = new Array(N);
              var rwst = new Array(N);
              var iwst = new Array(N);
              var nrws = new Array(N);
              var nrwst = new Array(N);
              var niwst = new Array(N);
              var rmws = out.words;
              rmws.length = N;
              this.convert13b(x.words, x.length, rws, N);
              this.convert13b(y.words, y.length, nrws, N);
              this.transform(rws, _, rwst, iwst, N, rbt);
              this.transform(nrws, _, nrwst, niwst, N, rbt);
              for (var i2 = 0; i2 < N; i2++) {
                var rx = rwst[i2] * nrwst[i2] - iwst[i2] * niwst[i2];
                iwst[i2] = rwst[i2] * niwst[i2] + iwst[i2] * nrwst[i2];
                rwst[i2] = rx;
              }
              this.conjugate(rwst, iwst, N);
              this.transform(rwst, iwst, rmws, _, N, rbt);
              this.conjugate(rmws, _, N);
              this.normalize13b(rmws, N);
              out.negative = x.negative ^ y.negative;
              out.length = x.length + y.length;
              return out.strip();
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this.strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this.strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this.strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) < num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this.strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this.strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this.strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q.strip();
              }
              a.strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modn = function modn(num) {
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return acc;
            };
            BN.prototype.idivn = function idivn(num) {
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              return this.strip();
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this.strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              return a.umod(this.m)._forceRed(this);
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn$4);
        })(bn$5);
        return bn$5.exports;
      }
      var api = {};
      var vmBrowserify = {};
      var hasRequiredVmBrowserify;
      function requireVmBrowserify() {
        if (hasRequiredVmBrowserify) return vmBrowserify;
        hasRequiredVmBrowserify = 1;
        (function(exports$1) {
          var indexOf = function(xs, item) {
            if (xs.indexOf) return xs.indexOf(item);
            else for (var i2 = 0; i2 < xs.length; i2++) {
              if (xs[i2] === item) return i2;
            }
            return -1;
          };
          var Object_keys = function(obj) {
            if (Object.keys) return Object.keys(obj);
            else {
              var res = [];
              for (var key2 in obj) res.push(key2);
              return res;
            }
          };
          var forEach = function(xs, fn) {
            if (xs.forEach) return xs.forEach(fn);
            else for (var i2 = 0; i2 < xs.length; i2++) {
              fn(xs[i2], i2, xs);
            }
          };
          var defineProp = (function() {
            try {
              Object.defineProperty({}, "_", {});
              return function(obj, name, value) {
                Object.defineProperty(obj, name, {
                  writable: true,
                  enumerable: false,
                  configurable: true,
                  value
                });
              };
            } catch (e) {
              return function(obj, name, value) {
                obj[name] = value;
              };
            }
          })();
          var globals = [
            "Array",
            "Boolean",
            "Date",
            "Error",
            "EvalError",
            "Function",
            "Infinity",
            "JSON",
            "Math",
            "NaN",
            "Number",
            "Object",
            "RangeError",
            "ReferenceError",
            "RegExp",
            "String",
            "SyntaxError",
            "TypeError",
            "URIError",
            "decodeURI",
            "decodeURIComponent",
            "encodeURI",
            "encodeURIComponent",
            "escape",
            "eval",
            "isFinite",
            "isNaN",
            "parseFloat",
            "parseInt",
            "undefined",
            "unescape"
          ];
          function Context() {
          }
          Context.prototype = {};
          var Script = exports$1.Script = function NodeScript(code2) {
            if (!(this instanceof Script)) return new Script(code2);
            this.code = code2;
          };
          Script.prototype.runInContext = function(context) {
            if (!(context instanceof Context)) {
              throw new TypeError("needs a 'context' argument.");
            }
            var iframe = document.createElement("iframe");
            if (!iframe.style) iframe.style = {};
            iframe.style.display = "none";
            document.body.appendChild(iframe);
            var win = iframe.contentWindow;
            var wEval = win.eval, wExecScript = win.execScript;
            if (!wEval && wExecScript) {
              wExecScript.call(win, "null");
              wEval = win.eval;
            }
            forEach(Object_keys(context), function(key2) {
              win[key2] = context[key2];
            });
            forEach(globals, function(key2) {
              if (context[key2]) {
                win[key2] = context[key2];
              }
            });
            var winKeys = Object_keys(win);
            var res = wEval.call(win, this.code);
            forEach(Object_keys(win), function(key2) {
              if (key2 in context || indexOf(winKeys, key2) === -1) {
                context[key2] = win[key2];
              }
            });
            forEach(globals, function(key2) {
              if (!(key2 in context)) {
                defineProp(context, key2, win[key2]);
              }
            });
            document.body.removeChild(iframe);
            return res;
          };
          Script.prototype.runInThisContext = function() {
            return eval(this.code);
          };
          Script.prototype.runInNewContext = function(context) {
            var ctx = Script.createContext(context);
            var res = this.runInContext(ctx);
            if (context) {
              forEach(Object_keys(ctx), function(key2) {
                context[key2] = ctx[key2];
              });
            }
            return res;
          };
          forEach(Object_keys(Script.prototype), function(name) {
            exports$1[name] = Script[name] = function(code2) {
              var s = Script(code2);
              return s[name].apply(s, [].slice.call(arguments, 1));
            };
          });
          exports$1.isContext = function(context) {
            return context instanceof Context;
          };
          exports$1.createScript = function(code2) {
            return exports$1.Script(code2);
          };
          exports$1.createContext = Script.createContext = function(context) {
            var copy = new Context();
            if (typeof context === "object") {
              forEach(Object_keys(context), function(key2) {
                copy[key2] = context[key2];
              });
            }
            return copy;
          };
        })(vmBrowserify);
        return vmBrowserify;
      }
      var hasRequiredApi;
      function requireApi() {
        if (hasRequiredApi) return api;
        hasRequiredApi = 1;
        (function(exports$12) {
          var asn12 = requireAsn1$1();
          var inherits = requireInherits_browser();
          var api2 = exports$12;
          api2.define = function define2(name, body) {
            return new Entity(name, body);
          };
          function Entity(name, body) {
            this.name = name;
            this.body = body;
            this.decoders = {};
            this.encoders = {};
          }
          Entity.prototype._createNamed = function createNamed(base2) {
            var named;
            try {
              named = requireVmBrowserify().runInThisContext(
                "(function " + this.name + "(entity) {\n  this._initNamed(entity);\n})"
              );
            } catch (e) {
              named = function(entity) {
                this._initNamed(entity);
              };
            }
            inherits(named, base2);
            named.prototype._initNamed = function initnamed(entity) {
              base2.call(this, entity);
            };
            return new named(this);
          };
          Entity.prototype._getDecoder = function _getDecoder(enc) {
            enc = enc || "der";
            if (!this.decoders.hasOwnProperty(enc))
              this.decoders[enc] = this._createNamed(asn12.decoders[enc]);
            return this.decoders[enc];
          };
          Entity.prototype.decode = function decode2(data, enc, options) {
            return this._getDecoder(enc).decode(data, options);
          };
          Entity.prototype._getEncoder = function _getEncoder(enc) {
            enc = enc || "der";
            if (!this.encoders.hasOwnProperty(enc))
              this.encoders[enc] = this._createNamed(asn12.encoders[enc]);
            return this.encoders[enc];
          };
          Entity.prototype.encode = function encode2(data, enc, reporter2) {
            return this._getEncoder(enc).encode(data, reporter2);
          };
        })(api);
        return api;
      }
      var base = {};
      var reporter = {};
      var hasRequiredReporter;
      function requireReporter() {
        if (hasRequiredReporter) return reporter;
        hasRequiredReporter = 1;
        var inherits = requireInherits_browser();
        function Reporter(options) {
          this._reporterState = {
            obj: null,
            path: [],
            options: options || {},
            errors: []
          };
        }
        reporter.Reporter = Reporter;
        Reporter.prototype.isError = function isError(obj) {
          return obj instanceof ReporterError;
        };
        Reporter.prototype.save = function save() {
          var state2 = this._reporterState;
          return { obj: state2.obj, pathLen: state2.path.length };
        };
        Reporter.prototype.restore = function restore(data) {
          var state2 = this._reporterState;
          state2.obj = data.obj;
          state2.path = state2.path.slice(0, data.pathLen);
        };
        Reporter.prototype.enterKey = function enterKey(key2) {
          return this._reporterState.path.push(key2);
        };
        Reporter.prototype.exitKey = function exitKey(index) {
          var state2 = this._reporterState;
          state2.path = state2.path.slice(0, index - 1);
        };
        Reporter.prototype.leaveKey = function leaveKey(index, key2, value) {
          var state2 = this._reporterState;
          this.exitKey(index);
          if (state2.obj !== null)
            state2.obj[key2] = value;
        };
        Reporter.prototype.path = function path() {
          return this._reporterState.path.join("/");
        };
        Reporter.prototype.enterObject = function enterObject() {
          var state2 = this._reporterState;
          var prev = state2.obj;
          state2.obj = {};
          return prev;
        };
        Reporter.prototype.leaveObject = function leaveObject(prev) {
          var state2 = this._reporterState;
          var now = state2.obj;
          state2.obj = prev;
          return now;
        };
        Reporter.prototype.error = function error(msg) {
          var err;
          var state2 = this._reporterState;
          var inherited = msg instanceof ReporterError;
          if (inherited) {
            err = msg;
          } else {
            err = new ReporterError(state2.path.map(function(elem) {
              return "[" + JSON.stringify(elem) + "]";
            }).join(""), msg.message || msg, msg.stack);
          }
          if (!state2.options.partial)
            throw err;
          if (!inherited)
            state2.errors.push(err);
          return err;
        };
        Reporter.prototype.wrapResult = function wrapResult(result) {
          var state2 = this._reporterState;
          if (!state2.options.partial)
            return result;
          return {
            result: this.isError(result) ? null : result,
            errors: state2.errors
          };
        };
        function ReporterError(path, msg) {
          this.path = path;
          this.rethrow(msg);
        }
        inherits(ReporterError, Error);
        ReporterError.prototype.rethrow = function rethrow(msg) {
          this.message = msg + " at: " + (this.path || "(shallow)");
          if (Error.captureStackTrace)
            Error.captureStackTrace(this, ReporterError);
          if (!this.stack) {
            try {
              throw new Error(this.message);
            } catch (e) {
              this.stack = e.stack;
            }
          }
          return this;
        };
        return reporter;
      }
      var buffer = {};
      var hasRequiredBuffer;
      function requireBuffer() {
        if (hasRequiredBuffer) return buffer;
        hasRequiredBuffer = 1;
        var inherits = requireInherits_browser();
        var Reporter = requireBase().Reporter;
        var Buffer2 = requireDist().Buffer;
        function DecoderBuffer(base2, options) {
          Reporter.call(this, options);
          if (!Buffer2.isBuffer(base2)) {
            this.error("Input not Buffer");
            return;
          }
          this.base = base2;
          this.offset = 0;
          this.length = base2.length;
        }
        inherits(DecoderBuffer, Reporter);
        buffer.DecoderBuffer = DecoderBuffer;
        DecoderBuffer.prototype.save = function save() {
          return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
        };
        DecoderBuffer.prototype.restore = function restore(save) {
          var res = new DecoderBuffer(this.base);
          res.offset = save.offset;
          res.length = this.offset;
          this.offset = save.offset;
          Reporter.prototype.restore.call(this, save.reporter);
          return res;
        };
        DecoderBuffer.prototype.isEmpty = function isEmpty() {
          return this.offset === this.length;
        };
        DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
          if (this.offset + 1 <= this.length)
            return this.base.readUInt8(this.offset++, true);
          else
            return this.error(fail || "DecoderBuffer overrun");
        };
        DecoderBuffer.prototype.skip = function skip(bytes, fail) {
          if (!(this.offset + bytes <= this.length))
            return this.error(fail || "DecoderBuffer overrun");
          var res = new DecoderBuffer(this.base);
          res._reporterState = this._reporterState;
          res.offset = this.offset;
          res.length = this.offset + bytes;
          this.offset += bytes;
          return res;
        };
        DecoderBuffer.prototype.raw = function raw(save) {
          return this.base.slice(save ? save.offset : this.offset, this.length);
        };
        function EncoderBuffer(value, reporter2) {
          if (Array.isArray(value)) {
            this.length = 0;
            this.value = value.map(function(item) {
              if (!(item instanceof EncoderBuffer))
                item = new EncoderBuffer(item, reporter2);
              this.length += item.length;
              return item;
            }, this);
          } else if (typeof value === "number") {
            if (!(0 <= value && value <= 255))
              return reporter2.error("non-byte EncoderBuffer value");
            this.value = value;
            this.length = 1;
          } else if (typeof value === "string") {
            this.value = value;
            this.length = Buffer2.byteLength(value);
          } else if (Buffer2.isBuffer(value)) {
            this.value = value;
            this.length = value.length;
          } else {
            return reporter2.error("Unsupported type: " + typeof value);
          }
        }
        buffer.EncoderBuffer = EncoderBuffer;
        EncoderBuffer.prototype.join = function join(out, offset) {
          if (!out)
            out = new Buffer2(this.length);
          if (!offset)
            offset = 0;
          if (this.length === 0)
            return out;
          if (Array.isArray(this.value)) {
            this.value.forEach(function(item) {
              item.join(out, offset);
              offset += item.length;
            });
          } else {
            if (typeof this.value === "number")
              out[offset] = this.value;
            else if (typeof this.value === "string")
              out.write(this.value, offset);
            else if (Buffer2.isBuffer(this.value))
              this.value.copy(out, offset);
            offset += this.length;
          }
          return out;
        };
        return buffer;
      }
      var node;
      var hasRequiredNode;
      function requireNode() {
        if (hasRequiredNode) return node;
        hasRequiredNode = 1;
        var Reporter = requireBase().Reporter;
        var EncoderBuffer = requireBase().EncoderBuffer;
        var DecoderBuffer = requireBase().DecoderBuffer;
        var assert = requireMinimalisticAssert();
        var tags = [
          "seq",
          "seqof",
          "set",
          "setof",
          "objid",
          "bool",
          "gentime",
          "utctime",
          "null_",
          "enum",
          "int",
          "objDesc",
          "bitstr",
          "bmpstr",
          "charstr",
          "genstr",
          "graphstr",
          "ia5str",
          "iso646str",
          "numstr",
          "octstr",
          "printstr",
          "t61str",
          "unistr",
          "utf8str",
          "videostr"
        ];
        var methods = [
          "key",
          "obj",
          "use",
          "optional",
          "explicit",
          "implicit",
          "def",
          "choice",
          "any",
          "contains"
        ].concat(tags);
        var overrided = [
          "_peekTag",
          "_decodeTag",
          "_use",
          "_decodeStr",
          "_decodeObjid",
          "_decodeTime",
          "_decodeNull",
          "_decodeInt",
          "_decodeBool",
          "_decodeList",
          "_encodeComposite",
          "_encodeStr",
          "_encodeObjid",
          "_encodeTime",
          "_encodeNull",
          "_encodeInt",
          "_encodeBool"
        ];
        function Node(enc, parent) {
          var state2 = {};
          this._baseState = state2;
          state2.enc = enc;
          state2.parent = parent || null;
          state2.children = null;
          state2.tag = null;
          state2.args = null;
          state2.reverseArgs = null;
          state2.choice = null;
          state2.optional = false;
          state2.any = false;
          state2.obj = false;
          state2.use = null;
          state2.useDecoder = null;
          state2.key = null;
          state2["default"] = null;
          state2.explicit = null;
          state2.implicit = null;
          state2.contains = null;
          if (!state2.parent) {
            state2.children = [];
            this._wrap();
          }
        }
        node = Node;
        var stateProps = [
          "enc",
          "parent",
          "children",
          "tag",
          "args",
          "reverseArgs",
          "choice",
          "optional",
          "any",
          "obj",
          "use",
          "alteredUse",
          "key",
          "default",
          "explicit",
          "implicit",
          "contains"
        ];
        Node.prototype.clone = function clone() {
          var state2 = this._baseState;
          var cstate = {};
          stateProps.forEach(function(prop) {
            cstate[prop] = state2[prop];
          });
          var res = new this.constructor(cstate.parent);
          res._baseState = cstate;
          return res;
        };
        Node.prototype._wrap = function wrap() {
          var state2 = this._baseState;
          methods.forEach(function(method) {
            this[method] = function _wrappedMethod() {
              var clone = new this.constructor(this);
              state2.children.push(clone);
              return clone[method].apply(clone, arguments);
            };
          }, this);
        };
        Node.prototype._init = function init(body) {
          var state2 = this._baseState;
          assert(state2.parent === null);
          body.call(this);
          state2.children = state2.children.filter(function(child) {
            return child._baseState.parent === this;
          }, this);
          assert.equal(state2.children.length, 1, "Root node can have only one child");
        };
        Node.prototype._useArgs = function useArgs(args) {
          var state2 = this._baseState;
          var children = args.filter(function(arg) {
            return arg instanceof this.constructor;
          }, this);
          args = args.filter(function(arg) {
            return !(arg instanceof this.constructor);
          }, this);
          if (children.length !== 0) {
            assert(state2.children === null);
            state2.children = children;
            children.forEach(function(child) {
              child._baseState.parent = this;
            }, this);
          }
          if (args.length !== 0) {
            assert(state2.args === null);
            state2.args = args;
            state2.reverseArgs = args.map(function(arg) {
              if (typeof arg !== "object" || arg.constructor !== Object)
                return arg;
              var res = {};
              Object.keys(arg).forEach(function(key2) {
                if (key2 == (key2 | 0))
                  key2 |= 0;
                var value = arg[key2];
                res[value] = key2;
              });
              return res;
            });
          }
        };
        overrided.forEach(function(method) {
          Node.prototype[method] = function _overrided() {
            var state2 = this._baseState;
            throw new Error(method + " not implemented for encoding: " + state2.enc);
          };
        });
        tags.forEach(function(tag) {
          Node.prototype[tag] = function _tagMethod() {
            var state2 = this._baseState;
            var args = Array.prototype.slice.call(arguments);
            assert(state2.tag === null);
            state2.tag = tag;
            this._useArgs(args);
            return this;
          };
        });
        Node.prototype.use = function use(item) {
          assert(item);
          var state2 = this._baseState;
          assert(state2.use === null);
          state2.use = item;
          return this;
        };
        Node.prototype.optional = function optional() {
          var state2 = this._baseState;
          state2.optional = true;
          return this;
        };
        Node.prototype.def = function def(val) {
          var state2 = this._baseState;
          assert(state2["default"] === null);
          state2["default"] = val;
          state2.optional = true;
          return this;
        };
        Node.prototype.explicit = function explicit(num) {
          var state2 = this._baseState;
          assert(state2.explicit === null && state2.implicit === null);
          state2.explicit = num;
          return this;
        };
        Node.prototype.implicit = function implicit(num) {
          var state2 = this._baseState;
          assert(state2.explicit === null && state2.implicit === null);
          state2.implicit = num;
          return this;
        };
        Node.prototype.obj = function obj() {
          var state2 = this._baseState;
          var args = Array.prototype.slice.call(arguments);
          state2.obj = true;
          if (args.length !== 0)
            this._useArgs(args);
          return this;
        };
        Node.prototype.key = function key2(newKey) {
          var state2 = this._baseState;
          assert(state2.key === null);
          state2.key = newKey;
          return this;
        };
        Node.prototype.any = function any() {
          var state2 = this._baseState;
          state2.any = true;
          return this;
        };
        Node.prototype.choice = function choice(obj) {
          var state2 = this._baseState;
          assert(state2.choice === null);
          state2.choice = obj;
          this._useArgs(Object.keys(obj).map(function(key2) {
            return obj[key2];
          }));
          return this;
        };
        Node.prototype.contains = function contains2(item) {
          var state2 = this._baseState;
          assert(state2.use === null);
          state2.contains = item;
          return this;
        };
        Node.prototype._decode = function decode2(input, options) {
          var state2 = this._baseState;
          if (state2.parent === null)
            return input.wrapResult(state2.children[0]._decode(input, options));
          var result = state2["default"];
          var present = true;
          var prevKey = null;
          if (state2.key !== null)
            prevKey = input.enterKey(state2.key);
          if (state2.optional) {
            var tag = null;
            if (state2.explicit !== null)
              tag = state2.explicit;
            else if (state2.implicit !== null)
              tag = state2.implicit;
            else if (state2.tag !== null)
              tag = state2.tag;
            if (tag === null && !state2.any) {
              var save = input.save();
              try {
                if (state2.choice === null)
                  this._decodeGeneric(state2.tag, input, options);
                else
                  this._decodeChoice(input, options);
                present = true;
              } catch (e) {
                present = false;
              }
              input.restore(save);
            } else {
              present = this._peekTag(input, tag, state2.any);
              if (input.isError(present))
                return present;
            }
          }
          var prevObj;
          if (state2.obj && present)
            prevObj = input.enterObject();
          if (present) {
            if (state2.explicit !== null) {
              var explicit = this._decodeTag(input, state2.explicit);
              if (input.isError(explicit))
                return explicit;
              input = explicit;
            }
            var start = input.offset;
            if (state2.use === null && state2.choice === null) {
              if (state2.any)
                var save = input.save();
              var body = this._decodeTag(
                input,
                state2.implicit !== null ? state2.implicit : state2.tag,
                state2.any
              );
              if (input.isError(body))
                return body;
              if (state2.any)
                result = input.raw(save);
              else
                input = body;
            }
            if (options && options.track && state2.tag !== null)
              options.track(input.path(), start, input.length, "tagged");
            if (options && options.track && state2.tag !== null)
              options.track(input.path(), input.offset, input.length, "content");
            if (state2.any)
              result = result;
            else if (state2.choice === null)
              result = this._decodeGeneric(state2.tag, input, options);
            else
              result = this._decodeChoice(input, options);
            if (input.isError(result))
              return result;
            if (!state2.any && state2.choice === null && state2.children !== null) {
              state2.children.forEach(function decodeChildren(child) {
                child._decode(input, options);
              });
            }
            if (state2.contains && (state2.tag === "octstr" || state2.tag === "bitstr")) {
              var data = new DecoderBuffer(result);
              result = this._getUse(state2.contains, input._reporterState.obj)._decode(data, options);
            }
          }
          if (state2.obj && present)
            result = input.leaveObject(prevObj);
          if (state2.key !== null && (result !== null || present === true))
            input.leaveKey(prevKey, state2.key, result);
          else if (prevKey !== null)
            input.exitKey(prevKey);
          return result;
        };
        Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
          var state2 = this._baseState;
          if (tag === "seq" || tag === "set")
            return null;
          if (tag === "seqof" || tag === "setof")
            return this._decodeList(input, tag, state2.args[0], options);
          else if (/str$/.test(tag))
            return this._decodeStr(input, tag, options);
          else if (tag === "objid" && state2.args)
            return this._decodeObjid(input, state2.args[0], state2.args[1], options);
          else if (tag === "objid")
            return this._decodeObjid(input, null, null, options);
          else if (tag === "gentime" || tag === "utctime")
            return this._decodeTime(input, tag, options);
          else if (tag === "null_")
            return this._decodeNull(input, options);
          else if (tag === "bool")
            return this._decodeBool(input, options);
          else if (tag === "objDesc")
            return this._decodeStr(input, tag, options);
          else if (tag === "int" || tag === "enum")
            return this._decodeInt(input, state2.args && state2.args[0], options);
          if (state2.use !== null) {
            return this._getUse(state2.use, input._reporterState.obj)._decode(input, options);
          } else {
            return input.error("unknown tag: " + tag);
          }
        };
        Node.prototype._getUse = function _getUse(entity, obj) {
          var state2 = this._baseState;
          state2.useDecoder = this._use(entity, obj);
          assert(state2.useDecoder._baseState.parent === null);
          state2.useDecoder = state2.useDecoder._baseState.children[0];
          if (state2.implicit !== state2.useDecoder._baseState.implicit) {
            state2.useDecoder = state2.useDecoder.clone();
            state2.useDecoder._baseState.implicit = state2.implicit;
          }
          return state2.useDecoder;
        };
        Node.prototype._decodeChoice = function decodeChoice(input, options) {
          var state2 = this._baseState;
          var result = null;
          var match = false;
          Object.keys(state2.choice).some(function(key2) {
            var save = input.save();
            var node2 = state2.choice[key2];
            try {
              var value = node2._decode(input, options);
              if (input.isError(value))
                return false;
              result = { type: key2, value };
              match = true;
            } catch (e) {
              input.restore(save);
              return false;
            }
            return true;
          }, this);
          if (!match)
            return input.error("Choice not matched");
          return result;
        };
        Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
          return new EncoderBuffer(data, this.reporter);
        };
        Node.prototype._encode = function encode2(data, reporter2, parent) {
          var state2 = this._baseState;
          if (state2["default"] !== null && state2["default"] === data)
            return;
          var result = this._encodeValue(data, reporter2, parent);
          if (result === void 0)
            return;
          if (this._skipDefault(result, reporter2, parent))
            return;
          return result;
        };
        Node.prototype._encodeValue = function encode2(data, reporter2, parent) {
          var state2 = this._baseState;
          if (state2.parent === null)
            return state2.children[0]._encode(data, reporter2 || new Reporter());
          var result = null;
          this.reporter = reporter2;
          if (state2.optional && data === void 0) {
            if (state2["default"] !== null)
              data = state2["default"];
            else
              return;
          }
          var content = null;
          var primitive = false;
          if (state2.any) {
            result = this._createEncoderBuffer(data);
          } else if (state2.choice) {
            result = this._encodeChoice(data, reporter2);
          } else if (state2.contains) {
            content = this._getUse(state2.contains, parent)._encode(data, reporter2);
            primitive = true;
          } else if (state2.children) {
            content = state2.children.map(function(child2) {
              if (child2._baseState.tag === "null_")
                return child2._encode(null, reporter2, data);
              if (child2._baseState.key === null)
                return reporter2.error("Child should have a key");
              var prevKey = reporter2.enterKey(child2._baseState.key);
              if (typeof data !== "object")
                return reporter2.error("Child expected, but input is not object");
              var res = child2._encode(data[child2._baseState.key], reporter2, data);
              reporter2.leaveKey(prevKey);
              return res;
            }, this).filter(function(child2) {
              return child2;
            });
            content = this._createEncoderBuffer(content);
          } else {
            if (state2.tag === "seqof" || state2.tag === "setof") {
              if (!(state2.args && state2.args.length === 1))
                return reporter2.error("Too many args for : " + state2.tag);
              if (!Array.isArray(data))
                return reporter2.error("seqof/setof, but data is not Array");
              var child = this.clone();
              child._baseState.implicit = null;
              content = this._createEncoderBuffer(data.map(function(item) {
                var state3 = this._baseState;
                return this._getUse(state3.args[0], data)._encode(item, reporter2);
              }, child));
            } else if (state2.use !== null) {
              result = this._getUse(state2.use, parent)._encode(data, reporter2);
            } else {
              content = this._encodePrimitive(state2.tag, data);
              primitive = true;
            }
          }
          var result;
          if (!state2.any && state2.choice === null) {
            var tag = state2.implicit !== null ? state2.implicit : state2.tag;
            var cls = state2.implicit === null ? "universal" : "context";
            if (tag === null) {
              if (state2.use === null)
                reporter2.error("Tag could be omitted only for .use()");
            } else {
              if (state2.use === null)
                result = this._encodeComposite(tag, primitive, cls, content);
            }
          }
          if (state2.explicit !== null)
            result = this._encodeComposite(state2.explicit, false, "context", result);
          return result;
        };
        Node.prototype._encodeChoice = function encodeChoice(data, reporter2) {
          var state2 = this._baseState;
          var node2 = state2.choice[data.type];
          if (!node2) {
            assert(
              false,
              data.type + " not found in " + JSON.stringify(Object.keys(state2.choice))
            );
          }
          return node2._encode(data.value, reporter2);
        };
        Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
          var state2 = this._baseState;
          if (/str$/.test(tag))
            return this._encodeStr(data, tag);
          else if (tag === "objid" && state2.args)
            return this._encodeObjid(data, state2.reverseArgs[0], state2.args[1]);
          else if (tag === "objid")
            return this._encodeObjid(data, null, null);
          else if (tag === "gentime" || tag === "utctime")
            return this._encodeTime(data, tag);
          else if (tag === "null_")
            return this._encodeNull();
          else if (tag === "int" || tag === "enum")
            return this._encodeInt(data, state2.args && state2.reverseArgs[0]);
          else if (tag === "bool")
            return this._encodeBool(data);
          else if (tag === "objDesc")
            return this._encodeStr(data, tag);
          else
            throw new Error("Unsupported tag: " + tag);
        };
        Node.prototype._isNumstr = function isNumstr(str) {
          return /^[0-9 ]*$/.test(str);
        };
        Node.prototype._isPrintstr = function isPrintstr(str) {
          return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
        };
        return node;
      }
      var hasRequiredBase;
      function requireBase() {
        if (hasRequiredBase) return base;
        hasRequiredBase = 1;
        (function(exports$12) {
          var base2 = exports$12;
          base2.Reporter = requireReporter().Reporter;
          base2.DecoderBuffer = requireBuffer().DecoderBuffer;
          base2.EncoderBuffer = requireBuffer().EncoderBuffer;
          base2.Node = requireNode();
        })(base);
        return base;
      }
      var constants = {};
      var der = {};
      var hasRequiredDer$2;
      function requireDer$2() {
        if (hasRequiredDer$2) return der;
        hasRequiredDer$2 = 1;
        (function(exports$12) {
          var constants2 = requireConstants();
          exports$12.tagClass = {
            0: "universal",
            1: "application",
            2: "context",
            3: "private"
          };
          exports$12.tagClassByName = constants2._reverse(exports$12.tagClass);
          exports$12.tag = {
            0: "end",
            1: "bool",
            2: "int",
            3: "bitstr",
            4: "octstr",
            5: "null_",
            6: "objid",
            7: "objDesc",
            8: "external",
            9: "real",
            10: "enum",
            11: "embed",
            12: "utf8str",
            13: "relativeOid",
            16: "seq",
            17: "set",
            18: "numstr",
            19: "printstr",
            20: "t61str",
            21: "videostr",
            22: "ia5str",
            23: "utctime",
            24: "gentime",
            25: "graphstr",
            26: "iso646str",
            27: "genstr",
            28: "unistr",
            29: "charstr",
            30: "bmpstr"
          };
          exports$12.tagByName = constants2._reverse(exports$12.tag);
        })(der);
        return der;
      }
      var hasRequiredConstants;
      function requireConstants() {
        if (hasRequiredConstants) return constants;
        hasRequiredConstants = 1;
        (function(exports$12) {
          var constants2 = exports$12;
          constants2._reverse = function reverse(map) {
            var res = {};
            Object.keys(map).forEach(function(key2) {
              if ((key2 | 0) == key2)
                key2 = key2 | 0;
              var value = map[key2];
              res[value] = key2;
            });
            return res;
          };
          constants2.der = requireDer$2();
        })(constants);
        return constants;
      }
      var decoders = {};
      var der_1$1;
      var hasRequiredDer$1;
      function requireDer$1() {
        if (hasRequiredDer$1) return der_1$1;
        hasRequiredDer$1 = 1;
        var inherits = requireInherits_browser();
        var asn12 = requireAsn1$1();
        var base2 = asn12.base;
        var bignum = asn12.bignum;
        var der2 = asn12.constants.der;
        function DERDecoder(entity) {
          this.enc = "der";
          this.name = entity.name;
          this.entity = entity;
          this.tree = new DERNode();
          this.tree._init(entity.body);
        }
        der_1$1 = DERDecoder;
        DERDecoder.prototype.decode = function decode2(data, options) {
          if (!(data instanceof base2.DecoderBuffer))
            data = new base2.DecoderBuffer(data, options);
          return this.tree._decode(data, options);
        };
        function DERNode(parent) {
          base2.Node.call(this, "der", parent);
        }
        inherits(DERNode, base2.Node);
        DERNode.prototype._peekTag = function peekTag(buffer2, tag, any) {
          if (buffer2.isEmpty())
            return false;
          var state2 = buffer2.save();
          var decodedTag = derDecodeTag(buffer2, 'Failed to peek tag: "' + tag + '"');
          if (buffer2.isError(decodedTag))
            return decodedTag;
          buffer2.restore(state2);
          return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + "of" === tag || any;
        };
        DERNode.prototype._decodeTag = function decodeTag(buffer2, tag, any) {
          var decodedTag = derDecodeTag(
            buffer2,
            'Failed to decode tag of "' + tag + '"'
          );
          if (buffer2.isError(decodedTag))
            return decodedTag;
          var len2 = derDecodeLen(
            buffer2,
            decodedTag.primitive,
            'Failed to get length of "' + tag + '"'
          );
          if (buffer2.isError(len2))
            return len2;
          if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + "of" !== tag) {
            return buffer2.error('Failed to match tag: "' + tag + '"');
          }
          if (decodedTag.primitive || len2 !== null)
            return buffer2.skip(len2, 'Failed to match body of: "' + tag + '"');
          var state2 = buffer2.save();
          var res = this._skipUntilEnd(
            buffer2,
            'Failed to skip indefinite length body: "' + this.tag + '"'
          );
          if (buffer2.isError(res))
            return res;
          len2 = buffer2.offset - state2.offset;
          buffer2.restore(state2);
          return buffer2.skip(len2, 'Failed to match body of: "' + tag + '"');
        };
        DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer2, fail) {
          while (true) {
            var tag = derDecodeTag(buffer2, fail);
            if (buffer2.isError(tag))
              return tag;
            var len2 = derDecodeLen(buffer2, tag.primitive, fail);
            if (buffer2.isError(len2))
              return len2;
            var res;
            if (tag.primitive || len2 !== null)
              res = buffer2.skip(len2);
            else
              res = this._skipUntilEnd(buffer2, fail);
            if (buffer2.isError(res))
              return res;
            if (tag.tagStr === "end")
              break;
          }
        };
        DERNode.prototype._decodeList = function decodeList(buffer2, tag, decoder, options) {
          var result = [];
          while (!buffer2.isEmpty()) {
            var possibleEnd = this._peekTag(buffer2, "end");
            if (buffer2.isError(possibleEnd))
              return possibleEnd;
            var res = decoder.decode(buffer2, "der", options);
            if (buffer2.isError(res) && possibleEnd)
              break;
            result.push(res);
          }
          return result;
        };
        DERNode.prototype._decodeStr = function decodeStr(buffer2, tag) {
          if (tag === "bitstr") {
            var unused = buffer2.readUInt8();
            if (buffer2.isError(unused))
              return unused;
            return { unused, data: buffer2.raw() };
          } else if (tag === "bmpstr") {
            var raw = buffer2.raw();
            if (raw.length % 2 === 1)
              return buffer2.error("Decoding of string type: bmpstr length mismatch");
            var str = "";
            for (var i2 = 0; i2 < raw.length / 2; i2++) {
              str += String.fromCharCode(raw.readUInt16BE(i2 * 2));
            }
            return str;
          } else if (tag === "numstr") {
            var numstr = buffer2.raw().toString("ascii");
            if (!this._isNumstr(numstr)) {
              return buffer2.error("Decoding of string type: numstr unsupported characters");
            }
            return numstr;
          } else if (tag === "octstr") {
            return buffer2.raw();
          } else if (tag === "objDesc") {
            return buffer2.raw();
          } else if (tag === "printstr") {
            var printstr = buffer2.raw().toString("ascii");
            if (!this._isPrintstr(printstr)) {
              return buffer2.error("Decoding of string type: printstr unsupported characters");
            }
            return printstr;
          } else if (/str$/.test(tag)) {
            return buffer2.raw().toString();
          } else {
            return buffer2.error("Decoding of string type: " + tag + " unsupported");
          }
        };
        DERNode.prototype._decodeObjid = function decodeObjid(buffer2, values, relative) {
          var result;
          var identifiers = [];
          var ident = 0;
          while (!buffer2.isEmpty()) {
            var subident = buffer2.readUInt8();
            ident <<= 7;
            ident |= subident & 127;
            if ((subident & 128) === 0) {
              identifiers.push(ident);
              ident = 0;
            }
          }
          if (subident & 128)
            identifiers.push(ident);
          var first = identifiers[0] / 40 | 0;
          var second = identifiers[0] % 40;
          if (relative)
            result = identifiers;
          else
            result = [first, second].concat(identifiers.slice(1));
          if (values) {
            var tmp = values[result.join(" ")];
            if (tmp === void 0)
              tmp = values[result.join(".")];
            if (tmp !== void 0)
              result = tmp;
          }
          return result;
        };
        DERNode.prototype._decodeTime = function decodeTime(buffer2, tag) {
          var str = buffer2.raw().toString();
          if (tag === "gentime") {
            var year = str.slice(0, 4) | 0;
            var mon = str.slice(4, 6) | 0;
            var day = str.slice(6, 8) | 0;
            var hour = str.slice(8, 10) | 0;
            var min2 = str.slice(10, 12) | 0;
            var sec = str.slice(12, 14) | 0;
          } else if (tag === "utctime") {
            var year = str.slice(0, 2) | 0;
            var mon = str.slice(2, 4) | 0;
            var day = str.slice(4, 6) | 0;
            var hour = str.slice(6, 8) | 0;
            var min2 = str.slice(8, 10) | 0;
            var sec = str.slice(10, 12) | 0;
            if (year < 70)
              year = 2e3 + year;
            else
              year = 1900 + year;
          } else {
            return buffer2.error("Decoding " + tag + " time is not supported yet");
          }
          return Date.UTC(year, mon - 1, day, hour, min2, sec, 0);
        };
        DERNode.prototype._decodeNull = function decodeNull(buffer2) {
          return null;
        };
        DERNode.prototype._decodeBool = function decodeBool(buffer2) {
          var res = buffer2.readUInt8();
          if (buffer2.isError(res))
            return res;
          else
            return res !== 0;
        };
        DERNode.prototype._decodeInt = function decodeInt(buffer2, values) {
          var raw = buffer2.raw();
          var res = new bignum(raw);
          if (values)
            res = values[res.toString(10)] || res;
          return res;
        };
        DERNode.prototype._use = function use(entity, obj) {
          if (typeof entity === "function")
            entity = entity(obj);
          return entity._getDecoder("der").tree;
        };
        function derDecodeTag(buf, fail) {
          var tag = buf.readUInt8(fail);
          if (buf.isError(tag))
            return tag;
          var cls = der2.tagClass[tag >> 6];
          var primitive = (tag & 32) === 0;
          if ((tag & 31) === 31) {
            var oct = tag;
            tag = 0;
            while ((oct & 128) === 128) {
              oct = buf.readUInt8(fail);
              if (buf.isError(oct))
                return oct;
              tag <<= 7;
              tag |= oct & 127;
            }
          } else {
            tag &= 31;
          }
          var tagStr = der2.tag[tag];
          return {
            cls,
            primitive,
            tag,
            tagStr
          };
        }
        function derDecodeLen(buf, primitive, fail) {
          var len2 = buf.readUInt8(fail);
          if (buf.isError(len2))
            return len2;
          if (!primitive && len2 === 128)
            return null;
          if ((len2 & 128) === 0) {
            return len2;
          }
          var num = len2 & 127;
          if (num > 4)
            return buf.error("length octect is too long");
          len2 = 0;
          for (var i2 = 0; i2 < num; i2++) {
            len2 <<= 8;
            var j = buf.readUInt8(fail);
            if (buf.isError(j))
              return j;
            len2 |= j;
          }
          return len2;
        }
        return der_1$1;
      }
      var pem$1;
      var hasRequiredPem$1;
      function requirePem$1() {
        if (hasRequiredPem$1) return pem$1;
        hasRequiredPem$1 = 1;
        var inherits = requireInherits_browser();
        var Buffer2 = requireDist().Buffer;
        var DERDecoder = requireDer$1();
        function PEMDecoder(entity) {
          DERDecoder.call(this, entity);
          this.enc = "pem";
        }
        inherits(PEMDecoder, DERDecoder);
        pem$1 = PEMDecoder;
        PEMDecoder.prototype.decode = function decode2(data, options) {
          var lines = data.toString().split(/[\r\n]+/g);
          var label = options.label.toUpperCase();
          var re = /^-----(BEGIN|END) ([^-]+)-----$/;
          var start = -1;
          var end = -1;
          for (var i2 = 0; i2 < lines.length; i2++) {
            var match = lines[i2].match(re);
            if (match === null)
              continue;
            if (match[2] !== label)
              continue;
            if (start === -1) {
              if (match[1] !== "BEGIN")
                break;
              start = i2;
            } else {
              if (match[1] !== "END")
                break;
              end = i2;
              break;
            }
          }
          if (start === -1 || end === -1)
            throw new Error("PEM section not found for: " + label);
          var base64 = lines.slice(start + 1, end).join("");
          base64.replace(/[^a-z0-9\+\/=]+/gi, "");
          var input = new Buffer2(base64, "base64");
          return DERDecoder.prototype.decode.call(this, input, options);
        };
        return pem$1;
      }
      var hasRequiredDecoders;
      function requireDecoders() {
        if (hasRequiredDecoders) return decoders;
        hasRequiredDecoders = 1;
        (function(exports$12) {
          var decoders2 = exports$12;
          decoders2.der = requireDer$1();
          decoders2.pem = requirePem$1();
        })(decoders);
        return decoders;
      }
      var encoders = {};
      var der_1;
      var hasRequiredDer;
      function requireDer() {
        if (hasRequiredDer) return der_1;
        hasRequiredDer = 1;
        var inherits = requireInherits_browser();
        var Buffer2 = requireDist().Buffer;
        var asn12 = requireAsn1$1();
        var base2 = asn12.base;
        var der2 = asn12.constants.der;
        function DEREncoder(entity) {
          this.enc = "der";
          this.name = entity.name;
          this.entity = entity;
          this.tree = new DERNode();
          this.tree._init(entity.body);
        }
        der_1 = DEREncoder;
        DEREncoder.prototype.encode = function encode2(data, reporter2) {
          return this.tree._encode(data, reporter2).join();
        };
        function DERNode(parent) {
          base2.Node.call(this, "der", parent);
        }
        inherits(DERNode, base2.Node);
        DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) {
          var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
          if (content.length < 128) {
            var header = new Buffer2(2);
            header[0] = encodedTag;
            header[1] = content.length;
            return this._createEncoderBuffer([header, content]);
          }
          var lenOctets = 1;
          for (var i2 = content.length; i2 >= 256; i2 >>= 8)
            lenOctets++;
          var header = new Buffer2(1 + 1 + lenOctets);
          header[0] = encodedTag;
          header[1] = 128 | lenOctets;
          for (var i2 = 1 + lenOctets, j = content.length; j > 0; i2--, j >>= 8)
            header[i2] = j & 255;
          return this._createEncoderBuffer([header, content]);
        };
        DERNode.prototype._encodeStr = function encodeStr(str, tag) {
          if (tag === "bitstr") {
            return this._createEncoderBuffer([str.unused | 0, str.data]);
          } else if (tag === "bmpstr") {
            var buf = new Buffer2(str.length * 2);
            for (var i2 = 0; i2 < str.length; i2++) {
              buf.writeUInt16BE(str.charCodeAt(i2), i2 * 2);
            }
            return this._createEncoderBuffer(buf);
          } else if (tag === "numstr") {
            if (!this._isNumstr(str)) {
              return this.reporter.error("Encoding of string type: numstr supports only digits and space");
            }
            return this._createEncoderBuffer(str);
          } else if (tag === "printstr") {
            if (!this._isPrintstr(str)) {
              return this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark");
            }
            return this._createEncoderBuffer(str);
          } else if (/str$/.test(tag)) {
            return this._createEncoderBuffer(str);
          } else if (tag === "objDesc") {
            return this._createEncoderBuffer(str);
          } else {
            return this.reporter.error("Encoding of string type: " + tag + " unsupported");
          }
        };
        DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
          if (typeof id === "string") {
            if (!values)
              return this.reporter.error("string objid given, but no values map found");
            if (!values.hasOwnProperty(id))
              return this.reporter.error("objid not found in values map");
            id = values[id].split(/[\s\.]+/g);
            for (var i2 = 0; i2 < id.length; i2++)
              id[i2] |= 0;
          } else if (Array.isArray(id)) {
            id = id.slice();
            for (var i2 = 0; i2 < id.length; i2++)
              id[i2] |= 0;
          }
          if (!Array.isArray(id)) {
            return this.reporter.error("objid() should be either array or string, got: " + JSON.stringify(id));
          }
          if (!relative) {
            if (id[1] >= 40)
              return this.reporter.error("Second objid identifier OOB");
            id.splice(0, 2, id[0] * 40 + id[1]);
          }
          var size = 0;
          for (var i2 = 0; i2 < id.length; i2++) {
            var ident = id[i2];
            for (size++; ident >= 128; ident >>= 7)
              size++;
          }
          var objid = new Buffer2(size);
          var offset = objid.length - 1;
          for (var i2 = id.length - 1; i2 >= 0; i2--) {
            var ident = id[i2];
            objid[offset--] = ident & 127;
            while ((ident >>= 7) > 0)
              objid[offset--] = 128 | ident & 127;
          }
          return this._createEncoderBuffer(objid);
        };
        function two(num) {
          if (num < 10)
            return "0" + num;
          else
            return num;
        }
        DERNode.prototype._encodeTime = function encodeTime(time, tag) {
          var str;
          var date = new Date(time);
          if (tag === "gentime") {
            str = [
              two(date.getFullYear()),
              two(date.getUTCMonth() + 1),
              two(date.getUTCDate()),
              two(date.getUTCHours()),
              two(date.getUTCMinutes()),
              two(date.getUTCSeconds()),
              "Z"
            ].join("");
          } else if (tag === "utctime") {
            str = [
              two(date.getFullYear() % 100),
              two(date.getUTCMonth() + 1),
              two(date.getUTCDate()),
              two(date.getUTCHours()),
              two(date.getUTCMinutes()),
              two(date.getUTCSeconds()),
              "Z"
            ].join("");
          } else {
            this.reporter.error("Encoding " + tag + " time is not supported yet");
          }
          return this._encodeStr(str, "octstr");
        };
        DERNode.prototype._encodeNull = function encodeNull() {
          return this._createEncoderBuffer("");
        };
        DERNode.prototype._encodeInt = function encodeInt(num, values) {
          if (typeof num === "string") {
            if (!values)
              return this.reporter.error("String int or enum given, but no values map");
            if (!values.hasOwnProperty(num)) {
              return this.reporter.error("Values map doesn't contain: " + JSON.stringify(num));
            }
            num = values[num];
          }
          if (typeof num !== "number" && !Buffer2.isBuffer(num)) {
            var numArray = num.toArray();
            if (!num.sign && numArray[0] & 128) {
              numArray.unshift(0);
            }
            num = new Buffer2(numArray);
          }
          if (Buffer2.isBuffer(num)) {
            var size = num.length;
            if (num.length === 0)
              size++;
            var out = new Buffer2(size);
            num.copy(out);
            if (num.length === 0)
              out[0] = 0;
            return this._createEncoderBuffer(out);
          }
          if (num < 128)
            return this._createEncoderBuffer(num);
          if (num < 256)
            return this._createEncoderBuffer([0, num]);
          var size = 1;
          for (var i2 = num; i2 >= 256; i2 >>= 8)
            size++;
          var out = new Array(size);
          for (var i2 = out.length - 1; i2 >= 0; i2--) {
            out[i2] = num & 255;
            num >>= 8;
          }
          if (out[0] & 128) {
            out.unshift(0);
          }
          return this._createEncoderBuffer(new Buffer2(out));
        };
        DERNode.prototype._encodeBool = function encodeBool(value) {
          return this._createEncoderBuffer(value ? 255 : 0);
        };
        DERNode.prototype._use = function use(entity, obj) {
          if (typeof entity === "function")
            entity = entity(obj);
          return entity._getEncoder("der").tree;
        };
        DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter2, parent) {
          var state2 = this._baseState;
          var i2;
          if (state2["default"] === null)
            return false;
          var data = dataBuffer.join();
          if (state2.defaultBuffer === void 0)
            state2.defaultBuffer = this._encodeValue(state2["default"], reporter2, parent).join();
          if (data.length !== state2.defaultBuffer.length)
            return false;
          for (i2 = 0; i2 < data.length; i2++)
            if (data[i2] !== state2.defaultBuffer[i2])
              return false;
          return true;
        };
        function encodeTag(tag, primitive, cls, reporter2) {
          var res;
          if (tag === "seqof")
            tag = "seq";
          else if (tag === "setof")
            tag = "set";
          if (der2.tagByName.hasOwnProperty(tag))
            res = der2.tagByName[tag];
          else if (typeof tag === "number" && (tag | 0) === tag)
            res = tag;
          else
            return reporter2.error("Unknown tag: " + tag);
          if (res >= 31)
            return reporter2.error("Multi-octet tag encoding unsupported");
          if (!primitive)
            res |= 32;
          res |= der2.tagClassByName[cls || "universal"] << 6;
          return res;
        }
        return der_1;
      }
      var pem;
      var hasRequiredPem;
      function requirePem() {
        if (hasRequiredPem) return pem;
        hasRequiredPem = 1;
        var inherits = requireInherits_browser();
        var DEREncoder = requireDer();
        function PEMEncoder(entity) {
          DEREncoder.call(this, entity);
          this.enc = "pem";
        }
        inherits(PEMEncoder, DEREncoder);
        pem = PEMEncoder;
        PEMEncoder.prototype.encode = function encode2(data, options) {
          var buf = DEREncoder.prototype.encode.call(this, data);
          var p = buf.toString("base64");
          var out = ["-----BEGIN " + options.label + "-----"];
          for (var i2 = 0; i2 < p.length; i2 += 64)
            out.push(p.slice(i2, i2 + 64));
          out.push("-----END " + options.label + "-----");
          return out.join("\n");
        };
        return pem;
      }
      var hasRequiredEncoders;
      function requireEncoders() {
        if (hasRequiredEncoders) return encoders;
        hasRequiredEncoders = 1;
        (function(exports$12) {
          var encoders2 = exports$12;
          encoders2.der = requireDer();
          encoders2.pem = requirePem();
        })(encoders);
        return encoders;
      }
      var hasRequiredAsn1$1;
      function requireAsn1$1() {
        if (hasRequiredAsn1$1) return asn1;
        hasRequiredAsn1$1 = 1;
        (function(exports$12) {
          var asn12 = exports$12;
          asn12.bignum = requireBn$2();
          asn12.define = requireApi().define;
          asn12.base = requireBase();
          asn12.constants = requireConstants();
          asn12.decoders = requireDecoders();
          asn12.encoders = requireEncoders();
        })(asn1);
        return asn1;
      }
      var certificate;
      var hasRequiredCertificate;
      function requireCertificate() {
        if (hasRequiredCertificate) return certificate;
        hasRequiredCertificate = 1;
        var asn = requireAsn1$1();
        var Time = asn.define("Time", function() {
          this.choice({
            utcTime: this.utctime(),
            generalTime: this.gentime()
          });
        });
        var AttributeTypeValue = asn.define("AttributeTypeValue", function() {
          this.seq().obj(
            this.key("type").objid(),
            this.key("value").any()
          );
        });
        var AlgorithmIdentifier = asn.define("AlgorithmIdentifier", function() {
          this.seq().obj(
            this.key("algorithm").objid(),
            this.key("parameters").optional(),
            this.key("curve").objid().optional()
          );
        });
        var SubjectPublicKeyInfo = asn.define("SubjectPublicKeyInfo", function() {
          this.seq().obj(
            this.key("algorithm").use(AlgorithmIdentifier),
            this.key("subjectPublicKey").bitstr()
          );
        });
        var RelativeDistinguishedName = asn.define("RelativeDistinguishedName", function() {
          this.setof(AttributeTypeValue);
        });
        var RDNSequence = asn.define("RDNSequence", function() {
          this.seqof(RelativeDistinguishedName);
        });
        var Name = asn.define("Name", function() {
          this.choice({
            rdnSequence: this.use(RDNSequence)
          });
        });
        var Validity = asn.define("Validity", function() {
          this.seq().obj(
            this.key("notBefore").use(Time),
            this.key("notAfter").use(Time)
          );
        });
        var Extension = asn.define("Extension", function() {
          this.seq().obj(
            this.key("extnID").objid(),
            this.key("critical").bool().def(false),
            this.key("extnValue").octstr()
          );
        });
        var TBSCertificate = asn.define("TBSCertificate", function() {
          this.seq().obj(
            this.key("version").explicit(0)["int"]().optional(),
            this.key("serialNumber")["int"](),
            this.key("signature").use(AlgorithmIdentifier),
            this.key("issuer").use(Name),
            this.key("validity").use(Validity),
            this.key("subject").use(Name),
            this.key("subjectPublicKeyInfo").use(SubjectPublicKeyInfo),
            this.key("issuerUniqueID").implicit(1).bitstr().optional(),
            this.key("subjectUniqueID").implicit(2).bitstr().optional(),
            this.key("extensions").explicit(3).seqof(Extension).optional()
          );
        });
        var X509Certificate = asn.define("X509Certificate", function() {
          this.seq().obj(
            this.key("tbsCertificate").use(TBSCertificate),
            this.key("signatureAlgorithm").use(AlgorithmIdentifier),
            this.key("signatureValue").bitstr()
          );
        });
        certificate = X509Certificate;
        return certificate;
      }
      var hasRequiredAsn1;
      function requireAsn1() {
        if (hasRequiredAsn1) return asn1$1;
        hasRequiredAsn1 = 1;
        var asn12 = requireAsn1$1();
        asn1$1.certificate = requireCertificate();
        var RSAPrivateKey = asn12.define("RSAPrivateKey", function() {
          this.seq().obj(
            this.key("version")["int"](),
            this.key("modulus")["int"](),
            this.key("publicExponent")["int"](),
            this.key("privateExponent")["int"](),
            this.key("prime1")["int"](),
            this.key("prime2")["int"](),
            this.key("exponent1")["int"](),
            this.key("exponent2")["int"](),
            this.key("coefficient")["int"]()
          );
        });
        asn1$1.RSAPrivateKey = RSAPrivateKey;
        var RSAPublicKey = asn12.define("RSAPublicKey", function() {
          this.seq().obj(
            this.key("modulus")["int"](),
            this.key("publicExponent")["int"]()
          );
        });
        asn1$1.RSAPublicKey = RSAPublicKey;
        var AlgorithmIdentifier = asn12.define("AlgorithmIdentifier", function() {
          this.seq().obj(
            this.key("algorithm").objid(),
            this.key("none").null_().optional(),
            this.key("curve").objid().optional(),
            this.key("params").seq().obj(
              this.key("p")["int"](),
              this.key("q")["int"](),
              this.key("g")["int"]()
            ).optional()
          );
        });
        var PublicKey = asn12.define("SubjectPublicKeyInfo", function() {
          this.seq().obj(
            this.key("algorithm").use(AlgorithmIdentifier),
            this.key("subjectPublicKey").bitstr()
          );
        });
        asn1$1.PublicKey = PublicKey;
        var PrivateKeyInfo = asn12.define("PrivateKeyInfo", function() {
          this.seq().obj(
            this.key("version")["int"](),
            this.key("algorithm").use(AlgorithmIdentifier),
            this.key("subjectPrivateKey").octstr()
          );
        });
        asn1$1.PrivateKey = PrivateKeyInfo;
        var EncryptedPrivateKeyInfo = asn12.define("EncryptedPrivateKeyInfo", function() {
          this.seq().obj(
            this.key("algorithm").seq().obj(
              this.key("id").objid(),
              this.key("decrypt").seq().obj(
                this.key("kde").seq().obj(
                  this.key("id").objid(),
                  this.key("kdeparams").seq().obj(
                    this.key("salt").octstr(),
                    this.key("iters")["int"]()
                  )
                ),
                this.key("cipher").seq().obj(
                  this.key("algo").objid(),
                  this.key("iv").octstr()
                )
              )
            ),
            this.key("subjectPrivateKey").octstr()
          );
        });
        asn1$1.EncryptedPrivateKey = EncryptedPrivateKeyInfo;
        var DSAPrivateKey = asn12.define("DSAPrivateKey", function() {
          this.seq().obj(
            this.key("version")["int"](),
            this.key("p")["int"](),
            this.key("q")["int"](),
            this.key("g")["int"](),
            this.key("pub_key")["int"](),
            this.key("priv_key")["int"]()
          );
        });
        asn1$1.DSAPrivateKey = DSAPrivateKey;
        asn1$1.DSAparam = asn12.define("DSAparam", function() {
          this["int"]();
        });
        var ECParameters = asn12.define("ECParameters", function() {
          this.choice({
            namedCurve: this.objid()
          });
        });
        var ECPrivateKey = asn12.define("ECPrivateKey", function() {
          this.seq().obj(
            this.key("version")["int"](),
            this.key("privateKey").octstr(),
            this.key("parameters").optional().explicit(0).use(ECParameters),
            this.key("publicKey").optional().explicit(1).bitstr()
          );
        });
        asn1$1.ECPrivateKey = ECPrivateKey;
        asn1$1.signature = asn12.define("signature", function() {
          this.seq().obj(
            this.key("r")["int"](),
            this.key("s")["int"]()
          );
        });
        return asn1$1;
      }
      const require$$1 = {
        "2.16.840.1.101.3.4.1.1": "aes-128-ecb",
        "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
        "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
        "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
        "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
        "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
        "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
        "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
        "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
        "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
        "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
        "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
      };
      var safeBuffer = { exports: {} };
      var hasRequiredSafeBuffer;
      function requireSafeBuffer() {
        if (hasRequiredSafeBuffer) return safeBuffer.exports;
        hasRequiredSafeBuffer = 1;
        (function(module, exports$12) {
          var buffer2 = requireDist();
          var Buffer2 = buffer2.Buffer;
          function copyProps(src, dst) {
            for (var key2 in src) {
              dst[key2] = src[key2];
            }
          }
          if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
            module.exports = buffer2;
          } else {
            copyProps(buffer2, exports$12);
            exports$12.Buffer = SafeBuffer;
          }
          function SafeBuffer(arg, encodingOrOffset, length) {
            return Buffer2(arg, encodingOrOffset, length);
          }
          SafeBuffer.prototype = Object.create(Buffer2.prototype);
          copyProps(Buffer2, SafeBuffer);
          SafeBuffer.from = function(arg, encodingOrOffset, length) {
            if (typeof arg === "number") {
              throw new TypeError("Argument must not be a number");
            }
            return Buffer2(arg, encodingOrOffset, length);
          };
          SafeBuffer.alloc = function(size, fill, encoding) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            var buf = Buffer2(size);
            if (fill !== void 0) {
              if (typeof encoding === "string") {
                buf.fill(fill, encoding);
              } else {
                buf.fill(fill);
              }
            } else {
              buf.fill(0);
            }
            return buf;
          };
          SafeBuffer.allocUnsafe = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return Buffer2(size);
          };
          SafeBuffer.allocUnsafeSlow = function(size) {
            if (typeof size !== "number") {
              throw new TypeError("Argument must be a number");
            }
            return buffer2.SlowBuffer(size);
          };
        })(safeBuffer, safeBuffer.exports);
        return safeBuffer.exports;
      }
      var fixProc;
      var hasRequiredFixProc;
      function requireFixProc() {
        if (hasRequiredFixProc) return fixProc;
        hasRequiredFixProc = 1;
        var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m;
        var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;
        var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m;
        var evp = requireEvp_bytestokey();
        var ciphers = requireBrowser$7();
        var Buffer2 = requireSafeBuffer().Buffer;
        fixProc = function(okey, password) {
          var key2 = okey.toString();
          var match = key2.match(findProc);
          var decrypted;
          if (!match) {
            var match2 = key2.match(fullRegex);
            decrypted = Buffer2.from(match2[2].replace(/[\r\n]/g, ""), "base64");
          } else {
            var suite = "aes" + match[1];
            var iv = Buffer2.from(match[2], "hex");
            var cipherText = Buffer2.from(match[3].replace(/[\r\n]/g, ""), "base64");
            var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;
            var out = [];
            var cipher2 = ciphers.createDecipheriv(suite, cipherKey, iv);
            out.push(cipher2.update(cipherText));
            out.push(cipher2["final"]());
            decrypted = Buffer2.concat(out);
          }
          var tag = key2.match(startRegex)[1];
          return {
            tag,
            data: decrypted
          };
        };
        return fixProc;
      }
      var parseAsn1;
      var hasRequiredParseAsn1;
      function requireParseAsn1() {
        if (hasRequiredParseAsn1) return parseAsn1;
        hasRequiredParseAsn1 = 1;
        var asn12 = requireAsn1();
        var aesid = require$$1;
        var fixProc2 = requireFixProc();
        var ciphers = requireBrowser$7();
        var compat = requireBrowser$8();
        var Buffer2 = requireSafeBuffer().Buffer;
        function decrypt(data, password) {
          var salt = data.algorithm.decrypt.kde.kdeparams.salt;
          var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);
          var algo = aesid[data.algorithm.decrypt.cipher.algo.join(".")];
          var iv = data.algorithm.decrypt.cipher.iv;
          var cipherText = data.subjectPrivateKey;
          var keylen = parseInt(algo.split("-")[1], 10) / 8;
          var key2 = compat.pbkdf2Sync(password, salt, iters, keylen, "sha1");
          var cipher2 = ciphers.createDecipheriv(algo, key2, iv);
          var out = [];
          out.push(cipher2.update(cipherText));
          out.push(cipher2["final"]());
          return Buffer2.concat(out);
        }
        function parseKeys(buffer2) {
          var password;
          if (typeof buffer2 === "object" && !Buffer2.isBuffer(buffer2)) {
            password = buffer2.passphrase;
            buffer2 = buffer2.key;
          }
          if (typeof buffer2 === "string") {
            buffer2 = Buffer2.from(buffer2);
          }
          var stripped = fixProc2(buffer2, password);
          var type2 = stripped.tag;
          var data = stripped.data;
          var subtype, ndata;
          switch (type2) {
            case "CERTIFICATE":
              ndata = asn12.certificate.decode(data, "der").tbsCertificate.subjectPublicKeyInfo;
            // falls through
            case "PUBLIC KEY":
              if (!ndata) {
                ndata = asn12.PublicKey.decode(data, "der");
              }
              subtype = ndata.algorithm.algorithm.join(".");
              switch (subtype) {
                case "1.2.840.113549.1.1.1":
                  return asn12.RSAPublicKey.decode(ndata.subjectPublicKey.data, "der");
                case "1.2.840.10045.2.1":
                  ndata.subjectPrivateKey = ndata.subjectPublicKey;
                  return {
                    type: "ec",
                    data: ndata
                  };
                case "1.2.840.10040.4.1":
                  ndata.algorithm.params.pub_key = asn12.DSAparam.decode(ndata.subjectPublicKey.data, "der");
                  return {
                    type: "dsa",
                    data: ndata.algorithm.params
                  };
                default:
                  throw new Error("unknown key id " + subtype);
              }
            // throw new Error('unknown key type ' + type)
            case "ENCRYPTED PRIVATE KEY":
              data = asn12.EncryptedPrivateKey.decode(data, "der");
              data = decrypt(data, password);
            // falls through
            case "PRIVATE KEY":
              ndata = asn12.PrivateKey.decode(data, "der");
              subtype = ndata.algorithm.algorithm.join(".");
              switch (subtype) {
                case "1.2.840.113549.1.1.1":
                  return asn12.RSAPrivateKey.decode(ndata.subjectPrivateKey, "der");
                case "1.2.840.10045.2.1":
                  return {
                    curve: ndata.algorithm.curve,
                    privateKey: asn12.ECPrivateKey.decode(ndata.subjectPrivateKey, "der").privateKey
                  };
                case "1.2.840.10040.4.1":
                  ndata.algorithm.params.priv_key = asn12.DSAparam.decode(ndata.subjectPrivateKey, "der");
                  return {
                    type: "dsa",
                    params: ndata.algorithm.params
                  };
                default:
                  throw new Error("unknown key id " + subtype);
              }
            // throw new Error('unknown key type ' + type)
            case "RSA PUBLIC KEY":
              return asn12.RSAPublicKey.decode(data, "der");
            case "RSA PRIVATE KEY":
              return asn12.RSAPrivateKey.decode(data, "der");
            case "DSA PRIVATE KEY":
              return {
                type: "dsa",
                params: asn12.DSAPrivateKey.decode(data, "der")
              };
            case "EC PRIVATE KEY":
              data = asn12.ECPrivateKey.decode(data, "der");
              return {
                curve: data.parameters.value,
                privateKey: data.privateKey
              };
            default:
              throw new Error("unknown key type " + type2);
          }
        }
        parseKeys.signature = asn12.signature;
        parseAsn1 = parseKeys;
        return parseAsn1;
      }
      const require$$4 = {
        "1.3.132.0.10": "secp256k1",
        "1.3.132.0.33": "p224",
        "1.2.840.10045.3.1.1": "p192",
        "1.2.840.10045.3.1.7": "p256",
        "1.3.132.0.34": "p384",
        "1.3.132.0.35": "p521"
      };
      var hasRequiredSign;
      function requireSign() {
        if (hasRequiredSign) return sign.exports;
        hasRequiredSign = 1;
        var Buffer2 = requireSafeBuffer$3().Buffer;
        var createHmac = requireBrowser$9();
        var crt = /* @__PURE__ */ requireBrowserifyRsa();
        var EC = requireElliptic().ec;
        var BN = requireBn$4();
        var parseKeys = requireParseAsn1();
        var curves2 = require$$4;
        var RSA_PKCS1_PADDING = 1;
        function sign$12(hash2, key2, hashType, signType, tag) {
          var priv = parseKeys(key2);
          if (priv.curve) {
            if (signType !== "ecdsa" && signType !== "ecdsa/rsa") {
              throw new Error("wrong private key type");
            }
            return ecSign(hash2, priv);
          } else if (priv.type === "dsa") {
            if (signType !== "dsa") {
              throw new Error("wrong private key type");
            }
            return dsaSign(hash2, priv, hashType);
          }
          if (signType !== "rsa" && signType !== "ecdsa/rsa") {
            throw new Error("wrong private key type");
          }
          if (key2.padding !== void 0 && key2.padding !== RSA_PKCS1_PADDING) {
            throw new Error("illegal or unsupported padding mode");
          }
          hash2 = Buffer2.concat([tag, hash2]);
          var len2 = priv.modulus.byteLength();
          var pad = [0, 1];
          while (hash2.length + pad.length + 1 < len2) {
            pad.push(255);
          }
          pad.push(0);
          var i2 = -1;
          while (++i2 < hash2.length) {
            pad.push(hash2[i2]);
          }
          var out = crt(pad, priv);
          return out;
        }
        function ecSign(hash2, priv) {
          var curveId = curves2[priv.curve.join(".")];
          if (!curveId) {
            throw new Error("unknown curve " + priv.curve.join("."));
          }
          var curve2 = new EC(curveId);
          var key2 = curve2.keyFromPrivate(priv.privateKey);
          var out = key2.sign(hash2);
          return Buffer2.from(out.toDER());
        }
        function dsaSign(hash2, priv, algo) {
          var x = priv.params.priv_key;
          var p = priv.params.p;
          var q = priv.params.q;
          var g = priv.params.g;
          var r = new BN(0);
          var k;
          var H = bits2int(hash2, q).mod(q);
          var s = false;
          var kv = getKey(x, q, hash2, algo);
          while (s === false) {
            k = makeKey(q, kv, algo);
            r = makeR(g, k, p, q);
            s = k.invm(q).imul(H.add(x.mul(r))).mod(q);
            if (s.cmpn(0) === 0) {
              s = false;
              r = new BN(0);
            }
          }
          return toDER(r, s);
        }
        function toDER(r, s) {
          r = r.toArray();
          s = s.toArray();
          if (r[0] & 128) {
            r = [0].concat(r);
          }
          if (s[0] & 128) {
            s = [0].concat(s);
          }
          var total = r.length + s.length + 4;
          var res = [
            48,
            total,
            2,
            r.length
          ];
          res = res.concat(r, [2, s.length], s);
          return Buffer2.from(res);
        }
        function getKey(x, q, hash2, algo) {
          x = Buffer2.from(x.toArray());
          if (x.length < q.byteLength()) {
            var zeros = Buffer2.alloc(q.byteLength() - x.length);
            x = Buffer2.concat([zeros, x]);
          }
          var hlen = hash2.length;
          var hbits = bits2octets(hash2, q);
          var v = Buffer2.alloc(hlen);
          v.fill(1);
          var k = Buffer2.alloc(hlen);
          k = createHmac(algo, k).update(v).update(Buffer2.from([0])).update(x).update(hbits).digest();
          v = createHmac(algo, k).update(v).digest();
          k = createHmac(algo, k).update(v).update(Buffer2.from([1])).update(x).update(hbits).digest();
          v = createHmac(algo, k).update(v).digest();
          return { k, v };
        }
        function bits2int(obits, q) {
          var bits = new BN(obits);
          var shift = (obits.length << 3) - q.bitLength();
          if (shift > 0) {
            bits.ishrn(shift);
          }
          return bits;
        }
        function bits2octets(bits, q) {
          bits = bits2int(bits, q);
          bits = bits.mod(q);
          var out = Buffer2.from(bits.toArray());
          if (out.length < q.byteLength()) {
            var zeros = Buffer2.alloc(q.byteLength() - out.length);
            out = Buffer2.concat([zeros, out]);
          }
          return out;
        }
        function makeKey(q, kv, algo) {
          var t;
          var k;
          do {
            t = Buffer2.alloc(0);
            while (t.length * 8 < q.bitLength()) {
              kv.v = createHmac(algo, kv.k).update(kv.v).digest();
              t = Buffer2.concat([t, kv.v]);
            }
            k = bits2int(t, q);
            kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer2.from([0])).digest();
            kv.v = createHmac(algo, kv.k).update(kv.v).digest();
          } while (k.cmp(q) !== -1);
          return k;
        }
        function makeR(g, k, p, q) {
          return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);
        }
        sign.exports = sign$12;
        sign.exports.getKey = getKey;
        sign.exports.makeKey = makeKey;
        return sign.exports;
      }
      var verify_1;
      var hasRequiredVerify;
      function requireVerify() {
        if (hasRequiredVerify) return verify_1;
        hasRequiredVerify = 1;
        var Buffer2 = requireSafeBuffer$3().Buffer;
        var BN = requireBn$4();
        var EC = requireElliptic().ec;
        var parseKeys = requireParseAsn1();
        var curves2 = require$$4;
        function verify(sig, hash2, key2, signType, tag) {
          var pub = parseKeys(key2);
          if (pub.type === "ec") {
            if (signType !== "ecdsa" && signType !== "ecdsa/rsa") {
              throw new Error("wrong public key type");
            }
            return ecVerify(sig, hash2, pub);
          } else if (pub.type === "dsa") {
            if (signType !== "dsa") {
              throw new Error("wrong public key type");
            }
            return dsaVerify(sig, hash2, pub);
          }
          if (signType !== "rsa" && signType !== "ecdsa/rsa") {
            throw new Error("wrong public key type");
          }
          hash2 = Buffer2.concat([tag, hash2]);
          var len2 = pub.modulus.byteLength();
          var pad = [1];
          var padNum = 0;
          while (hash2.length + pad.length + 2 < len2) {
            pad.push(255);
            padNum += 1;
          }
          pad.push(0);
          var i2 = -1;
          while (++i2 < hash2.length) {
            pad.push(hash2[i2]);
          }
          pad = Buffer2.from(pad);
          var red = BN.mont(pub.modulus);
          sig = new BN(sig).toRed(red);
          sig = sig.redPow(new BN(pub.publicExponent));
          sig = Buffer2.from(sig.fromRed().toArray());
          var out = padNum < 8 ? 1 : 0;
          len2 = Math.min(sig.length, pad.length);
          if (sig.length !== pad.length) {
            out = 1;
          }
          i2 = -1;
          while (++i2 < len2) {
            out |= sig[i2] ^ pad[i2];
          }
          return out === 0;
        }
        function ecVerify(sig, hash2, pub) {
          var curveId = curves2[pub.data.algorithm.curve.join(".")];
          if (!curveId) {
            throw new Error("unknown curve " + pub.data.algorithm.curve.join("."));
          }
          var curve2 = new EC(curveId);
          var pubkey = pub.data.subjectPrivateKey.data;
          return curve2.verify(hash2, sig, pubkey);
        }
        function dsaVerify(sig, hash2, pub) {
          var p = pub.data.p;
          var q = pub.data.q;
          var g = pub.data.g;
          var y = pub.data.pub_key;
          var unpacked = parseKeys.signature.decode(sig, "der");
          var s = unpacked.s;
          var r = unpacked.r;
          checkValue(s, q);
          checkValue(r, q);
          var montp = BN.mont(p);
          var w = s.invm(q);
          var v = g.toRed(montp).redPow(new BN(hash2).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q);
          return v.cmp(r) === 0;
        }
        function checkValue(b, q) {
          if (b.cmpn(0) <= 0) {
            throw new Error("invalid sig");
          }
          if (b.cmp(q) >= 0) {
            throw new Error("invalid sig");
          }
        }
        verify_1 = verify;
        return verify_1;
      }
      var browser$5;
      var hasRequiredBrowser$4;
      function requireBrowser$4() {
        if (hasRequiredBrowser$4) return browser$5;
        hasRequiredBrowser$4 = 1;
        var Buffer2 = requireSafeBuffer$3().Buffer;
        var createHash = requireBrowser$a();
        var stream = requireReadableBrowser();
        var inherits = requireInherits_browser();
        var sign2 = requireSign();
        var verify = requireVerify();
        var algorithms = require$$6;
        Object.keys(algorithms).forEach(function(key2) {
          algorithms[key2].id = Buffer2.from(algorithms[key2].id, "hex");
          algorithms[key2.toLowerCase()] = algorithms[key2];
        });
        function Sign(algorithm) {
          stream.Writable.call(this);
          var data = algorithms[algorithm];
          if (!data) {
            throw new Error("Unknown message digest");
          }
          this._hashType = data.hash;
          this._hash = createHash(data.hash);
          this._tag = data.id;
          this._signType = data.sign;
        }
        inherits(Sign, stream.Writable);
        Sign.prototype._write = function _write(data, _, done) {
          this._hash.update(data);
          done();
        };
        Sign.prototype.update = function update(data, enc) {
          this._hash.update(typeof data === "string" ? Buffer2.from(data, enc) : data);
          return this;
        };
        Sign.prototype.sign = function signMethod(key2, enc) {
          this.end();
          var hash2 = this._hash.digest();
          var sig = sign2(hash2, key2, this._hashType, this._signType, this._tag);
          return enc ? sig.toString(enc) : sig;
        };
        function Verify(algorithm) {
          stream.Writable.call(this);
          var data = algorithms[algorithm];
          if (!data) {
            throw new Error("Unknown message digest");
          }
          this._hash = createHash(data.hash);
          this._tag = data.id;
          this._signType = data.sign;
        }
        inherits(Verify, stream.Writable);
        Verify.prototype._write = function _write(data, _, done) {
          this._hash.update(data);
          done();
        };
        Verify.prototype.update = function update(data, enc) {
          this._hash.update(typeof data === "string" ? Buffer2.from(data, enc) : data);
          return this;
        };
        Verify.prototype.verify = function verifyMethod(key2, sig, enc) {
          var sigBuffer = typeof sig === "string" ? Buffer2.from(sig, enc) : sig;
          this.end();
          var hash2 = this._hash.digest();
          return verify(sigBuffer, hash2, key2, this._signType, this._tag);
        };
        function createSign(algorithm) {
          return new Sign(algorithm);
        }
        function createVerify(algorithm) {
          return new Verify(algorithm);
        }
        browser$5 = {
          Sign: createSign,
          Verify: createVerify,
          createSign,
          createVerify
        };
        return browser$5;
      }
      var bn$3 = { exports: {} };
      var bn$2 = bn$3.exports;
      var hasRequiredBn$1;
      function requireBn$1() {
        if (hasRequiredBn$1) return bn$3.exports;
        hasRequiredBn$1 = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this.strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                return c - 48 & 15;
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this.strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  r += c - 49 + 10;
                } else if (c >= 17) {
                  r += c - 17 + 10;
                } else {
                  r += c;
                }
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this.strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype.strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            BN.prototype.inspect = function inspect() {
              return (this.red ? "";
            };
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16);
            };
            BN.prototype.toBuffer = function toBuffer2(endian, length) {
              assert(typeof Buffer2 !== "undefined");
              return this.toArrayLike(Buffer2, endian, length);
            };
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              this.strip();
              var littleEndian = endian === "le";
              var res = new ArrayType(reqLength);
              var b, i2;
              var q = this.clone();
              if (!littleEndian) {
                for (i2 = 0; i2 < reqLength - byteLength2; i2++) {
                  res[i2] = 0;
                }
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[reqLength - i2 - 1] = b;
                }
              } else {
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[i2] = b;
                }
                for (; i2 < reqLength; i2++) {
                  res[i2] = 0;
                }
              }
              return res;
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this.strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this.strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this.strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this.strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this.strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this.strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out.strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out.strip();
            }
            function jumboMulTo(self2, num, out) {
              var fftm = new FFTM();
              return fftm.mulp(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            function FFTM(x, y) {
              this.x = x;
              this.y = y;
            }
            FFTM.prototype.makeRBT = function makeRBT(N) {
              var t = new Array(N);
              var l = BN.prototype._countBits(N) - 1;
              for (var i2 = 0; i2 < N; i2++) {
                t[i2] = this.revBin(i2, l, N);
              }
              return t;
            };
            FFTM.prototype.revBin = function revBin(x, l, N) {
              if (x === 0 || x === N - 1) return x;
              var rb = 0;
              for (var i2 = 0; i2 < l; i2++) {
                rb |= (x & 1) << l - i2 - 1;
                x >>= 1;
              }
              return rb;
            };
            FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
              for (var i2 = 0; i2 < N; i2++) {
                rtws[i2] = rws[rbt[i2]];
                itws[i2] = iws[rbt[i2]];
              }
            };
            FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
              this.permute(rbt, rws, iws, rtws, itws, N);
              for (var s = 1; s < N; s <<= 1) {
                var l = s << 1;
                var rtwdf = Math.cos(2 * Math.PI / l);
                var itwdf = Math.sin(2 * Math.PI / l);
                for (var p = 0; p < N; p += l) {
                  var rtwdf_ = rtwdf;
                  var itwdf_ = itwdf;
                  for (var j = 0; j < s; j++) {
                    var re = rtws[p + j];
                    var ie = itws[p + j];
                    var ro = rtws[p + j + s];
                    var io = itws[p + j + s];
                    var rx = rtwdf_ * ro - itwdf_ * io;
                    io = rtwdf_ * io + itwdf_ * ro;
                    ro = rx;
                    rtws[p + j] = re + ro;
                    itws[p + j] = ie + io;
                    rtws[p + j + s] = re - ro;
                    itws[p + j + s] = ie - io;
                    if (j !== l) {
                      rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                      itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                      rtwdf_ = rx;
                    }
                  }
                }
              }
            };
            FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
              var N = Math.max(m, n) | 1;
              var odd = N & 1;
              var i2 = 0;
              for (N = N / 2 | 0; N; N = N >>> 1) {
                i2++;
              }
              return 1 << i2 + 1 + odd;
            };
            FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
              if (N <= 1) return;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var t = rws[i2];
                rws[i2] = rws[N - i2 - 1];
                rws[N - i2 - 1] = t;
                t = iws[i2];
                iws[i2] = -iws[N - i2 - 1];
                iws[N - i2 - 1] = -t;
              }
            };
            FFTM.prototype.normalize13b = function normalize13b(ws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var w = Math.round(ws[2 * i2 + 1] / N) * 8192 + Math.round(ws[2 * i2] / N) + carry;
                ws[i2] = w & 67108863;
                if (w < 67108864) {
                  carry = 0;
                } else {
                  carry = w / 67108864 | 0;
                }
              }
              return ws;
            };
            FFTM.prototype.convert13b = function convert13b(ws, len2, rws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < len2; i2++) {
                carry = carry + (ws[i2] | 0);
                rws[2 * i2] = carry & 8191;
                carry = carry >>> 13;
                rws[2 * i2 + 1] = carry & 8191;
                carry = carry >>> 13;
              }
              for (i2 = 2 * len2; i2 < N; ++i2) {
                rws[i2] = 0;
              }
              assert(carry === 0);
              assert((carry & -8192) === 0);
            };
            FFTM.prototype.stub = function stub(N) {
              var ph = new Array(N);
              for (var i2 = 0; i2 < N; i2++) {
                ph[i2] = 0;
              }
              return ph;
            };
            FFTM.prototype.mulp = function mulp(x, y, out) {
              var N = 2 * this.guessLen13b(x.length, y.length);
              var rbt = this.makeRBT(N);
              var _ = this.stub(N);
              var rws = new Array(N);
              var rwst = new Array(N);
              var iwst = new Array(N);
              var nrws = new Array(N);
              var nrwst = new Array(N);
              var niwst = new Array(N);
              var rmws = out.words;
              rmws.length = N;
              this.convert13b(x.words, x.length, rws, N);
              this.convert13b(y.words, y.length, nrws, N);
              this.transform(rws, _, rwst, iwst, N, rbt);
              this.transform(nrws, _, nrwst, niwst, N, rbt);
              for (var i2 = 0; i2 < N; i2++) {
                var rx = rwst[i2] * nrwst[i2] - iwst[i2] * niwst[i2];
                iwst[i2] = rwst[i2] * niwst[i2] + iwst[i2] * nrwst[i2];
                rwst[i2] = rx;
              }
              this.conjugate(rwst, iwst, N);
              this.transform(rwst, iwst, rmws, _, N, rbt);
              this.conjugate(rmws, _, N);
              this.normalize13b(rmws, N);
              out.negative = x.negative ^ y.negative;
              out.length = x.length + y.length;
              return out.strip();
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this.strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this.strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this.strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) < num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this.strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this.strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this.strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q.strip();
              }
              a.strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modn = function modn(num) {
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return acc;
            };
            BN.prototype.idivn = function idivn(num) {
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              return this.strip();
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this.strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              return a.umod(this.m)._forceRed(this);
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn$2);
        })(bn$3);
        return bn$3.exports;
      }
      var browser$4;
      var hasRequiredBrowser$3;
      function requireBrowser$3() {
        if (hasRequiredBrowser$3) return browser$4;
        hasRequiredBrowser$3 = 1;
        var elliptic2 = requireElliptic();
        var BN = requireBn$1();
        browser$4 = function createECDH(curve2) {
          return new ECDH(curve2);
        };
        var aliases = {
          secp256k1: {
            name: "secp256k1",
            byteLength: 32
          },
          secp224r1: {
            name: "p224",
            byteLength: 28
          },
          prime256v1: {
            name: "p256",
            byteLength: 32
          },
          prime192v1: {
            name: "p192",
            byteLength: 24
          },
          ed25519: {
            name: "ed25519",
            byteLength: 32
          },
          secp384r1: {
            name: "p384",
            byteLength: 48
          },
          secp521r1: {
            name: "p521",
            byteLength: 66
          }
        };
        aliases.p224 = aliases.secp224r1;
        aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
        aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
        aliases.p384 = aliases.secp384r1;
        aliases.p521 = aliases.secp521r1;
        function ECDH(curve2) {
          this.curveType = aliases[curve2];
          if (!this.curveType) {
            this.curveType = {
              name: curve2
            };
          }
          this.curve = new elliptic2.ec(this.curveType.name);
          this.keys = void 0;
        }
        ECDH.prototype.generateKeys = function(enc, format) {
          this.keys = this.curve.genKeyPair();
          return this.getPublicKey(enc, format);
        };
        ECDH.prototype.computeSecret = function(other, inenc, enc) {
          inenc = inenc || "utf8";
          if (!Buffer.isBuffer(other)) {
            other = new Buffer(other, inenc);
          }
          var otherPub = this.curve.keyFromPublic(other).getPublic();
          var out = otherPub.mul(this.keys.getPrivate()).getX();
          return formatReturnValue(out, enc, this.curveType.byteLength);
        };
        ECDH.prototype.getPublicKey = function(enc, format) {
          var key2 = this.keys.getPublic(format === "compressed", true);
          if (format === "hybrid") {
            if (key2[key2.length - 1] % 2) {
              key2[0] = 7;
            } else {
              key2[0] = 6;
            }
          }
          return formatReturnValue(key2, enc);
        };
        ECDH.prototype.getPrivateKey = function(enc) {
          return formatReturnValue(this.keys.getPrivate(), enc);
        };
        ECDH.prototype.setPublicKey = function(pub, enc) {
          enc = enc || "utf8";
          if (!Buffer.isBuffer(pub)) {
            pub = new Buffer(pub, enc);
          }
          this.keys._importPublic(pub);
          return this;
        };
        ECDH.prototype.setPrivateKey = function(priv, enc) {
          enc = enc || "utf8";
          if (!Buffer.isBuffer(priv)) {
            priv = new Buffer(priv, enc);
          }
          var _priv = new BN(priv);
          _priv = _priv.toString(16);
          this.keys = this.curve.genKeyPair();
          this.keys._importPrivate(_priv);
          return this;
        };
        function formatReturnValue(bn2, enc, len2) {
          if (!Array.isArray(bn2)) {
            bn2 = bn2.toArray();
          }
          var buf = new Buffer(bn2);
          if (len2 && buf.length < len2) {
            var zeros = new Buffer(len2 - buf.length);
            zeros.fill(0);
            buf = Buffer.concat([zeros, buf]);
          }
          if (!enc) {
            return buf;
          } else {
            return buf.toString(enc);
          }
        }
        return browser$4;
      }
      var browser$3 = {};
      var mgf;
      var hasRequiredMgf;
      function requireMgf() {
        if (hasRequiredMgf) return mgf;
        hasRequiredMgf = 1;
        var createHash = requireBrowser$a();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        mgf = function(seed, len2) {
          var t = Buffer2.alloc(0);
          var i2 = 0;
          var c;
          while (t.length < len2) {
            c = i2ops(i2++);
            t = Buffer2.concat([t, createHash("sha1").update(seed).update(c).digest()]);
          }
          return t.slice(0, len2);
        };
        function i2ops(c) {
          var out = Buffer2.allocUnsafe(4);
          out.writeUInt32BE(c, 0);
          return out;
        }
        return mgf;
      }
      var xor;
      var hasRequiredXor;
      function requireXor() {
        if (hasRequiredXor) return xor;
        hasRequiredXor = 1;
        xor = function xor2(a, b) {
          var len2 = a.length;
          var i2 = -1;
          while (++i2 < len2) {
            a[i2] ^= b[i2];
          }
          return a;
        };
        return xor;
      }
      var bn$1 = { exports: {} };
      var bn = bn$1.exports;
      var hasRequiredBn;
      function requireBn() {
        if (hasRequiredBn) return bn$1.exports;
        hasRequiredBn = 1;
        (function(module) {
          (function(module2, exports$12) {
            function assert(val, msg) {
              if (!val) throw new Error(msg || "Assertion failed");
            }
            function inherits(ctor, superCtor) {
              ctor.super_ = superCtor;
              var TempCtor = function() {
              };
              TempCtor.prototype = superCtor.prototype;
              ctor.prototype = new TempCtor();
              ctor.prototype.constructor = ctor;
            }
            function BN(number, base2, endian) {
              if (BN.isBN(number)) {
                return number;
              }
              this.negative = 0;
              this.words = null;
              this.length = 0;
              this.red = null;
              if (number !== null) {
                if (base2 === "le" || base2 === "be") {
                  endian = base2;
                  base2 = 10;
                }
                this._init(number || 0, base2 || 10, endian || "be");
              }
            }
            if (typeof module2 === "object") {
              module2.exports = BN;
            } else {
              exports$12.BN = BN;
            }
            BN.BN = BN;
            BN.wordSize = 26;
            var Buffer2;
            try {
              if (typeof window !== "undefined" && typeof window.Buffer !== "undefined") {
                Buffer2 = window.Buffer;
              } else {
                Buffer2 = requireDist().Buffer;
              }
            } catch (e) {
            }
            BN.isBN = function isBN(num) {
              if (num instanceof BN) {
                return true;
              }
              return num !== null && typeof num === "object" && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
            };
            BN.max = function max2(left, right) {
              if (left.cmp(right) > 0) return left;
              return right;
            };
            BN.min = function min2(left, right) {
              if (left.cmp(right) < 0) return left;
              return right;
            };
            BN.prototype._init = function init(number, base2, endian) {
              if (typeof number === "number") {
                return this._initNumber(number, base2, endian);
              }
              if (typeof number === "object") {
                return this._initArray(number, base2, endian);
              }
              if (base2 === "hex") {
                base2 = 16;
              }
              assert(base2 === (base2 | 0) && base2 >= 2 && base2 <= 36);
              number = number.toString().replace(/\s+/g, "");
              var start = 0;
              if (number[0] === "-") {
                start++;
                this.negative = 1;
              }
              if (start < number.length) {
                if (base2 === 16) {
                  this._parseHex(number, start, endian);
                } else {
                  this._parseBase(number, base2, start);
                  if (endian === "le") {
                    this._initArray(this.toArray(), base2, endian);
                  }
                }
              }
            };
            BN.prototype._initNumber = function _initNumber(number, base2, endian) {
              if (number < 0) {
                this.negative = 1;
                number = -number;
              }
              if (number < 67108864) {
                this.words = [number & 67108863];
                this.length = 1;
              } else if (number < 4503599627370496) {
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863
                ];
                this.length = 2;
              } else {
                assert(number < 9007199254740992);
                this.words = [
                  number & 67108863,
                  number / 67108864 & 67108863,
                  1
                ];
                this.length = 3;
              }
              if (endian !== "le") return;
              this._initArray(this.toArray(), base2, endian);
            };
            BN.prototype._initArray = function _initArray(number, base2, endian) {
              assert(typeof number.length === "number");
              if (number.length <= 0) {
                this.words = [0];
                this.length = 1;
                return this;
              }
              this.length = Math.ceil(number.length / 3);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var j, w;
              var off = 0;
              if (endian === "be") {
                for (i2 = number.length - 1, j = 0; i2 >= 0; i2 -= 3) {
                  w = number[i2] | number[i2 - 1] << 8 | number[i2 - 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              } else if (endian === "le") {
                for (i2 = 0, j = 0; i2 < number.length; i2 += 3) {
                  w = number[i2] | number[i2 + 1] << 8 | number[i2 + 2] << 16;
                  this.words[j] |= w << off & 67108863;
                  this.words[j + 1] = w >>> 26 - off & 67108863;
                  off += 24;
                  if (off >= 26) {
                    off -= 26;
                    j++;
                  }
                }
              }
              return this.strip();
            };
            function parseHex4Bits(string, index) {
              var c = string.charCodeAt(index);
              if (c >= 65 && c <= 70) {
                return c - 55;
              } else if (c >= 97 && c <= 102) {
                return c - 87;
              } else {
                return c - 48 & 15;
              }
            }
            function parseHexByte(string, lowerBound, index) {
              var r = parseHex4Bits(string, index);
              if (index - 1 >= lowerBound) {
                r |= parseHex4Bits(string, index - 1) << 4;
              }
              return r;
            }
            BN.prototype._parseHex = function _parseHex(number, start, endian) {
              this.length = Math.ceil((number.length - start) / 6);
              this.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                this.words[i2] = 0;
              }
              var off = 0;
              var j = 0;
              var w;
              if (endian === "be") {
                for (i2 = number.length - 1; i2 >= start; i2 -= 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              } else {
                var parseLength = number.length - start;
                for (i2 = parseLength % 2 === 0 ? start + 1 : start; i2 < number.length; i2 += 2) {
                  w = parseHexByte(number, start, i2) << off;
                  this.words[j] |= w & 67108863;
                  if (off >= 18) {
                    off -= 18;
                    j += 1;
                    this.words[j] |= w >>> 26;
                  } else {
                    off += 8;
                  }
                }
              }
              this.strip();
            };
            function parseBase(str, start, end, mul) {
              var r = 0;
              var len2 = Math.min(str.length, end);
              for (var i2 = start; i2 < len2; i2++) {
                var c = str.charCodeAt(i2) - 48;
                r *= mul;
                if (c >= 49) {
                  r += c - 49 + 10;
                } else if (c >= 17) {
                  r += c - 17 + 10;
                } else {
                  r += c;
                }
              }
              return r;
            }
            BN.prototype._parseBase = function _parseBase(number, base2, start) {
              this.words = [0];
              this.length = 1;
              for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base2) {
                limbLen++;
              }
              limbLen--;
              limbPow = limbPow / base2 | 0;
              var total = number.length - start;
              var mod = total % limbLen;
              var end = Math.min(total, total - mod) + start;
              var word = 0;
              for (var i2 = start; i2 < end; i2 += limbLen) {
                word = parseBase(number, i2, i2 + limbLen, base2);
                this.imuln(limbPow);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              if (mod !== 0) {
                var pow2 = 1;
                word = parseBase(number, i2, number.length, base2);
                for (i2 = 0; i2 < mod; i2++) {
                  pow2 *= base2;
                }
                this.imuln(pow2);
                if (this.words[0] + word < 67108864) {
                  this.words[0] += word;
                } else {
                  this._iaddn(word);
                }
              }
              this.strip();
            };
            BN.prototype.copy = function copy(dest) {
              dest.words = new Array(this.length);
              for (var i2 = 0; i2 < this.length; i2++) {
                dest.words[i2] = this.words[i2];
              }
              dest.length = this.length;
              dest.negative = this.negative;
              dest.red = this.red;
            };
            BN.prototype.clone = function clone() {
              var r = new BN(null);
              this.copy(r);
              return r;
            };
            BN.prototype._expand = function _expand(size) {
              while (this.length < size) {
                this.words[this.length++] = 0;
              }
              return this;
            };
            BN.prototype.strip = function strip() {
              while (this.length > 1 && this.words[this.length - 1] === 0) {
                this.length--;
              }
              return this._normSign();
            };
            BN.prototype._normSign = function _normSign() {
              if (this.length === 1 && this.words[0] === 0) {
                this.negative = 0;
              }
              return this;
            };
            BN.prototype.inspect = function inspect() {
              return (this.red ? "";
            };
            var zeros = [
              "",
              "0",
              "00",
              "000",
              "0000",
              "00000",
              "000000",
              "0000000",
              "00000000",
              "000000000",
              "0000000000",
              "00000000000",
              "000000000000",
              "0000000000000",
              "00000000000000",
              "000000000000000",
              "0000000000000000",
              "00000000000000000",
              "000000000000000000",
              "0000000000000000000",
              "00000000000000000000",
              "000000000000000000000",
              "0000000000000000000000",
              "00000000000000000000000",
              "000000000000000000000000",
              "0000000000000000000000000"
            ];
            var groupSizes = [
              0,
              0,
              25,
              16,
              12,
              11,
              10,
              9,
              8,
              8,
              7,
              7,
              7,
              7,
              6,
              6,
              6,
              6,
              6,
              6,
              6,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5,
              5
            ];
            var groupBases = [
              0,
              0,
              33554432,
              43046721,
              16777216,
              48828125,
              60466176,
              40353607,
              16777216,
              43046721,
              1e7,
              19487171,
              35831808,
              62748517,
              7529536,
              11390625,
              16777216,
              24137569,
              34012224,
              47045881,
              64e6,
              4084101,
              5153632,
              6436343,
              7962624,
              9765625,
              11881376,
              14348907,
              17210368,
              20511149,
              243e5,
              28629151,
              33554432,
              39135393,
              45435424,
              52521875,
              60466176
            ];
            BN.prototype.toString = function toString2(base2, padding) {
              base2 = base2 || 10;
              padding = padding | 0 || 1;
              var out;
              if (base2 === 16 || base2 === "hex") {
                out = "";
                var off = 0;
                var carry = 0;
                for (var i2 = 0; i2 < this.length; i2++) {
                  var w = this.words[i2];
                  var word = ((w << off | carry) & 16777215).toString(16);
                  carry = w >>> 24 - off & 16777215;
                  off += 2;
                  if (off >= 26) {
                    off -= 26;
                    i2--;
                  }
                  if (carry !== 0 || i2 !== this.length - 1) {
                    out = zeros[6 - word.length] + word + out;
                  } else {
                    out = word + out;
                  }
                }
                if (carry !== 0) {
                  out = carry.toString(16) + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              if (base2 === (base2 | 0) && base2 >= 2 && base2 <= 36) {
                var groupSize = groupSizes[base2];
                var groupBase = groupBases[base2];
                out = "";
                var c = this.clone();
                c.negative = 0;
                while (!c.isZero()) {
                  var r = c.modn(groupBase).toString(base2);
                  c = c.idivn(groupBase);
                  if (!c.isZero()) {
                    out = zeros[groupSize - r.length] + r + out;
                  } else {
                    out = r + out;
                  }
                }
                if (this.isZero()) {
                  out = "0" + out;
                }
                while (out.length % padding !== 0) {
                  out = "0" + out;
                }
                if (this.negative !== 0) {
                  out = "-" + out;
                }
                return out;
              }
              assert(false, "Base should be between 2 and 36");
            };
            BN.prototype.toNumber = function toNumber() {
              var ret = this.words[0];
              if (this.length === 2) {
                ret += this.words[1] * 67108864;
              } else if (this.length === 3 && this.words[2] === 1) {
                ret += 4503599627370496 + this.words[1] * 67108864;
              } else if (this.length > 2) {
                assert(false, "Number can only safely store up to 53 bits");
              }
              return this.negative !== 0 ? -ret : ret;
            };
            BN.prototype.toJSON = function toJSON() {
              return this.toString(16);
            };
            BN.prototype.toBuffer = function toBuffer2(endian, length) {
              assert(typeof Buffer2 !== "undefined");
              return this.toArrayLike(Buffer2, endian, length);
            };
            BN.prototype.toArray = function toArray(endian, length) {
              return this.toArrayLike(Array, endian, length);
            };
            BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
              var byteLength2 = this.byteLength();
              var reqLength = length || Math.max(1, byteLength2);
              assert(byteLength2 <= reqLength, "byte array longer than desired length");
              assert(reqLength > 0, "Requested array length <= 0");
              this.strip();
              var littleEndian = endian === "le";
              var res = new ArrayType(reqLength);
              var b, i2;
              var q = this.clone();
              if (!littleEndian) {
                for (i2 = 0; i2 < reqLength - byteLength2; i2++) {
                  res[i2] = 0;
                }
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[reqLength - i2 - 1] = b;
                }
              } else {
                for (i2 = 0; !q.isZero(); i2++) {
                  b = q.andln(255);
                  q.iushrn(8);
                  res[i2] = b;
                }
                for (; i2 < reqLength; i2++) {
                  res[i2] = 0;
                }
              }
              return res;
            };
            if (Math.clz32) {
              BN.prototype._countBits = function _countBits(w) {
                return 32 - Math.clz32(w);
              };
            } else {
              BN.prototype._countBits = function _countBits(w) {
                var t = w;
                var r = 0;
                if (t >= 4096) {
                  r += 13;
                  t >>>= 13;
                }
                if (t >= 64) {
                  r += 7;
                  t >>>= 7;
                }
                if (t >= 8) {
                  r += 4;
                  t >>>= 4;
                }
                if (t >= 2) {
                  r += 2;
                  t >>>= 2;
                }
                return r + t;
              };
            }
            BN.prototype._zeroBits = function _zeroBits(w) {
              if (w === 0) return 26;
              var t = w;
              var r = 0;
              if ((t & 8191) === 0) {
                r += 13;
                t >>>= 13;
              }
              if ((t & 127) === 0) {
                r += 7;
                t >>>= 7;
              }
              if ((t & 15) === 0) {
                r += 4;
                t >>>= 4;
              }
              if ((t & 3) === 0) {
                r += 2;
                t >>>= 2;
              }
              if ((t & 1) === 0) {
                r++;
              }
              return r;
            };
            BN.prototype.bitLength = function bitLength() {
              var w = this.words[this.length - 1];
              var hi = this._countBits(w);
              return (this.length - 1) * 26 + hi;
            };
            function toBitArray(num) {
              var w = new Array(num.bitLength());
              for (var bit = 0; bit < w.length; bit++) {
                var off = bit / 26 | 0;
                var wbit = bit % 26;
                w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
              }
              return w;
            }
            BN.prototype.zeroBits = function zeroBits() {
              if (this.isZero()) return 0;
              var r = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var b = this._zeroBits(this.words[i2]);
                r += b;
                if (b !== 26) break;
              }
              return r;
            };
            BN.prototype.byteLength = function byteLength2() {
              return Math.ceil(this.bitLength() / 8);
            };
            BN.prototype.toTwos = function toTwos(width) {
              if (this.negative !== 0) {
                return this.abs().inotn(width).iaddn(1);
              }
              return this.clone();
            };
            BN.prototype.fromTwos = function fromTwos(width) {
              if (this.testn(width - 1)) {
                return this.notn(width).iaddn(1).ineg();
              }
              return this.clone();
            };
            BN.prototype.isNeg = function isNeg() {
              return this.negative !== 0;
            };
            BN.prototype.neg = function neg() {
              return this.clone().ineg();
            };
            BN.prototype.ineg = function ineg() {
              if (!this.isZero()) {
                this.negative ^= 1;
              }
              return this;
            };
            BN.prototype.iuor = function iuor(num) {
              while (this.length < num.length) {
                this.words[this.length++] = 0;
              }
              for (var i2 = 0; i2 < num.length; i2++) {
                this.words[i2] = this.words[i2] | num.words[i2];
              }
              return this.strip();
            };
            BN.prototype.ior = function ior(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuor(num);
            };
            BN.prototype.or = function or(num) {
              if (this.length > num.length) return this.clone().ior(num);
              return num.clone().ior(this);
            };
            BN.prototype.uor = function uor(num) {
              if (this.length > num.length) return this.clone().iuor(num);
              return num.clone().iuor(this);
            };
            BN.prototype.iuand = function iuand(num) {
              var b;
              if (this.length > num.length) {
                b = num;
              } else {
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = this.words[i2] & num.words[i2];
              }
              this.length = b.length;
              return this.strip();
            };
            BN.prototype.iand = function iand(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuand(num);
            };
            BN.prototype.and = function and(num) {
              if (this.length > num.length) return this.clone().iand(num);
              return num.clone().iand(this);
            };
            BN.prototype.uand = function uand(num) {
              if (this.length > num.length) return this.clone().iuand(num);
              return num.clone().iuand(this);
            };
            BN.prototype.iuxor = function iuxor(num) {
              var a;
              var b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              for (var i2 = 0; i2 < b.length; i2++) {
                this.words[i2] = a.words[i2] ^ b.words[i2];
              }
              if (this !== a) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = a.length;
              return this.strip();
            };
            BN.prototype.ixor = function ixor(num) {
              assert((this.negative | num.negative) === 0);
              return this.iuxor(num);
            };
            BN.prototype.xor = function xor2(num) {
              if (this.length > num.length) return this.clone().ixor(num);
              return num.clone().ixor(this);
            };
            BN.prototype.uxor = function uxor(num) {
              if (this.length > num.length) return this.clone().iuxor(num);
              return num.clone().iuxor(this);
            };
            BN.prototype.inotn = function inotn(width) {
              assert(typeof width === "number" && width >= 0);
              var bytesNeeded = Math.ceil(width / 26) | 0;
              var bitsLeft = width % 26;
              this._expand(bytesNeeded);
              if (bitsLeft > 0) {
                bytesNeeded--;
              }
              for (var i2 = 0; i2 < bytesNeeded; i2++) {
                this.words[i2] = ~this.words[i2] & 67108863;
              }
              if (bitsLeft > 0) {
                this.words[i2] = ~this.words[i2] & 67108863 >> 26 - bitsLeft;
              }
              return this.strip();
            };
            BN.prototype.notn = function notn(width) {
              return this.clone().inotn(width);
            };
            BN.prototype.setn = function setn(bit, val) {
              assert(typeof bit === "number" && bit >= 0);
              var off = bit / 26 | 0;
              var wbit = bit % 26;
              this._expand(off + 1);
              if (val) {
                this.words[off] = this.words[off] | 1 << wbit;
              } else {
                this.words[off] = this.words[off] & ~(1 << wbit);
              }
              return this.strip();
            };
            BN.prototype.iadd = function iadd(num) {
              var r;
              if (this.negative !== 0 && num.negative === 0) {
                this.negative = 0;
                r = this.isub(num);
                this.negative ^= 1;
                return this._normSign();
              } else if (this.negative === 0 && num.negative !== 0) {
                num.negative = 0;
                r = this.isub(num);
                num.negative = 1;
                return r._normSign();
              }
              var a, b;
              if (this.length > num.length) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) + (b.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                this.words[i2] = r & 67108863;
                carry = r >>> 26;
              }
              this.length = a.length;
              if (carry !== 0) {
                this.words[this.length] = carry;
                this.length++;
              } else if (a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              return this;
            };
            BN.prototype.add = function add(num) {
              var res;
              if (num.negative !== 0 && this.negative === 0) {
                num.negative = 0;
                res = this.sub(num);
                num.negative ^= 1;
                return res;
              } else if (num.negative === 0 && this.negative !== 0) {
                this.negative = 0;
                res = num.sub(this);
                this.negative = 1;
                return res;
              }
              if (this.length > num.length) return this.clone().iadd(num);
              return num.clone().iadd(this);
            };
            BN.prototype.isub = function isub(num) {
              if (num.negative !== 0) {
                num.negative = 0;
                var r = this.iadd(num);
                num.negative = 1;
                return r._normSign();
              } else if (this.negative !== 0) {
                this.negative = 0;
                this.iadd(num);
                this.negative = 1;
                return this._normSign();
              }
              var cmp = this.cmp(num);
              if (cmp === 0) {
                this.negative = 0;
                this.length = 1;
                this.words[0] = 0;
                return this;
              }
              var a, b;
              if (cmp > 0) {
                a = this;
                b = num;
              } else {
                a = num;
                b = this;
              }
              var carry = 0;
              for (var i2 = 0; i2 < b.length; i2++) {
                r = (a.words[i2] | 0) - (b.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              for (; carry !== 0 && i2 < a.length; i2++) {
                r = (a.words[i2] | 0) + carry;
                carry = r >> 26;
                this.words[i2] = r & 67108863;
              }
              if (carry === 0 && i2 < a.length && a !== this) {
                for (; i2 < a.length; i2++) {
                  this.words[i2] = a.words[i2];
                }
              }
              this.length = Math.max(this.length, i2);
              if (a !== this) {
                this.negative = 1;
              }
              return this.strip();
            };
            BN.prototype.sub = function sub(num) {
              return this.clone().isub(num);
            };
            function smallMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              var len2 = self2.length + num.length | 0;
              out.length = len2;
              len2 = len2 - 1 | 0;
              var a = self2.words[0] | 0;
              var b = num.words[0] | 0;
              var r = a * b;
              var lo = r & 67108863;
              var carry = r / 67108864 | 0;
              out.words[0] = lo;
              for (var k = 1; k < len2; k++) {
                var ncarry = carry >>> 26;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j | 0;
                  a = self2.words[i2] | 0;
                  b = num.words[j] | 0;
                  r = a * b + rword;
                  ncarry += r / 67108864 | 0;
                  rword = r & 67108863;
                }
                out.words[k] = rword | 0;
                carry = ncarry | 0;
              }
              if (carry !== 0) {
                out.words[k] = carry | 0;
              } else {
                out.length--;
              }
              return out.strip();
            }
            var comb10MulTo = function comb10MulTo2(self2, num, out) {
              var a = self2.words;
              var b = num.words;
              var o = out.words;
              var c = 0;
              var lo;
              var mid;
              var hi;
              var a0 = a[0] | 0;
              var al0 = a0 & 8191;
              var ah0 = a0 >>> 13;
              var a1 = a[1] | 0;
              var al1 = a1 & 8191;
              var ah1 = a1 >>> 13;
              var a2 = a[2] | 0;
              var al2 = a2 & 8191;
              var ah2 = a2 >>> 13;
              var a3 = a[3] | 0;
              var al3 = a3 & 8191;
              var ah3 = a3 >>> 13;
              var a4 = a[4] | 0;
              var al4 = a4 & 8191;
              var ah4 = a4 >>> 13;
              var a5 = a[5] | 0;
              var al5 = a5 & 8191;
              var ah5 = a5 >>> 13;
              var a6 = a[6] | 0;
              var al6 = a6 & 8191;
              var ah6 = a6 >>> 13;
              var a7 = a[7] | 0;
              var al7 = a7 & 8191;
              var ah7 = a7 >>> 13;
              var a8 = a[8] | 0;
              var al8 = a8 & 8191;
              var ah8 = a8 >>> 13;
              var a9 = a[9] | 0;
              var al9 = a9 & 8191;
              var ah9 = a9 >>> 13;
              var b0 = b[0] | 0;
              var bl0 = b0 & 8191;
              var bh0 = b0 >>> 13;
              var b1 = b[1] | 0;
              var bl1 = b1 & 8191;
              var bh1 = b1 >>> 13;
              var b2 = b[2] | 0;
              var bl2 = b2 & 8191;
              var bh2 = b2 >>> 13;
              var b3 = b[3] | 0;
              var bl3 = b3 & 8191;
              var bh3 = b3 >>> 13;
              var b4 = b[4] | 0;
              var bl4 = b4 & 8191;
              var bh4 = b4 >>> 13;
              var b5 = b[5] | 0;
              var bl5 = b5 & 8191;
              var bh5 = b5 >>> 13;
              var b6 = b[6] | 0;
              var bl6 = b6 & 8191;
              var bh6 = b6 >>> 13;
              var b7 = b[7] | 0;
              var bl7 = b7 & 8191;
              var bh7 = b7 >>> 13;
              var b8 = b[8] | 0;
              var bl8 = b8 & 8191;
              var bh8 = b8 >>> 13;
              var b9 = b[9] | 0;
              var bl9 = b9 & 8191;
              var bh9 = b9 >>> 13;
              out.negative = self2.negative ^ num.negative;
              out.length = 19;
              lo = Math.imul(al0, bl0);
              mid = Math.imul(al0, bh0);
              mid = mid + Math.imul(ah0, bl0) | 0;
              hi = Math.imul(ah0, bh0);
              var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
              w0 &= 67108863;
              lo = Math.imul(al1, bl0);
              mid = Math.imul(al1, bh0);
              mid = mid + Math.imul(ah1, bl0) | 0;
              hi = Math.imul(ah1, bh0);
              lo = lo + Math.imul(al0, bl1) | 0;
              mid = mid + Math.imul(al0, bh1) | 0;
              mid = mid + Math.imul(ah0, bl1) | 0;
              hi = hi + Math.imul(ah0, bh1) | 0;
              var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
              w1 &= 67108863;
              lo = Math.imul(al2, bl0);
              mid = Math.imul(al2, bh0);
              mid = mid + Math.imul(ah2, bl0) | 0;
              hi = Math.imul(ah2, bh0);
              lo = lo + Math.imul(al1, bl1) | 0;
              mid = mid + Math.imul(al1, bh1) | 0;
              mid = mid + Math.imul(ah1, bl1) | 0;
              hi = hi + Math.imul(ah1, bh1) | 0;
              lo = lo + Math.imul(al0, bl2) | 0;
              mid = mid + Math.imul(al0, bh2) | 0;
              mid = mid + Math.imul(ah0, bl2) | 0;
              hi = hi + Math.imul(ah0, bh2) | 0;
              var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
              w2 &= 67108863;
              lo = Math.imul(al3, bl0);
              mid = Math.imul(al3, bh0);
              mid = mid + Math.imul(ah3, bl0) | 0;
              hi = Math.imul(ah3, bh0);
              lo = lo + Math.imul(al2, bl1) | 0;
              mid = mid + Math.imul(al2, bh1) | 0;
              mid = mid + Math.imul(ah2, bl1) | 0;
              hi = hi + Math.imul(ah2, bh1) | 0;
              lo = lo + Math.imul(al1, bl2) | 0;
              mid = mid + Math.imul(al1, bh2) | 0;
              mid = mid + Math.imul(ah1, bl2) | 0;
              hi = hi + Math.imul(ah1, bh2) | 0;
              lo = lo + Math.imul(al0, bl3) | 0;
              mid = mid + Math.imul(al0, bh3) | 0;
              mid = mid + Math.imul(ah0, bl3) | 0;
              hi = hi + Math.imul(ah0, bh3) | 0;
              var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
              w3 &= 67108863;
              lo = Math.imul(al4, bl0);
              mid = Math.imul(al4, bh0);
              mid = mid + Math.imul(ah4, bl0) | 0;
              hi = Math.imul(ah4, bh0);
              lo = lo + Math.imul(al3, bl1) | 0;
              mid = mid + Math.imul(al3, bh1) | 0;
              mid = mid + Math.imul(ah3, bl1) | 0;
              hi = hi + Math.imul(ah3, bh1) | 0;
              lo = lo + Math.imul(al2, bl2) | 0;
              mid = mid + Math.imul(al2, bh2) | 0;
              mid = mid + Math.imul(ah2, bl2) | 0;
              hi = hi + Math.imul(ah2, bh2) | 0;
              lo = lo + Math.imul(al1, bl3) | 0;
              mid = mid + Math.imul(al1, bh3) | 0;
              mid = mid + Math.imul(ah1, bl3) | 0;
              hi = hi + Math.imul(ah1, bh3) | 0;
              lo = lo + Math.imul(al0, bl4) | 0;
              mid = mid + Math.imul(al0, bh4) | 0;
              mid = mid + Math.imul(ah0, bl4) | 0;
              hi = hi + Math.imul(ah0, bh4) | 0;
              var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
              w4 &= 67108863;
              lo = Math.imul(al5, bl0);
              mid = Math.imul(al5, bh0);
              mid = mid + Math.imul(ah5, bl0) | 0;
              hi = Math.imul(ah5, bh0);
              lo = lo + Math.imul(al4, bl1) | 0;
              mid = mid + Math.imul(al4, bh1) | 0;
              mid = mid + Math.imul(ah4, bl1) | 0;
              hi = hi + Math.imul(ah4, bh1) | 0;
              lo = lo + Math.imul(al3, bl2) | 0;
              mid = mid + Math.imul(al3, bh2) | 0;
              mid = mid + Math.imul(ah3, bl2) | 0;
              hi = hi + Math.imul(ah3, bh2) | 0;
              lo = lo + Math.imul(al2, bl3) | 0;
              mid = mid + Math.imul(al2, bh3) | 0;
              mid = mid + Math.imul(ah2, bl3) | 0;
              hi = hi + Math.imul(ah2, bh3) | 0;
              lo = lo + Math.imul(al1, bl4) | 0;
              mid = mid + Math.imul(al1, bh4) | 0;
              mid = mid + Math.imul(ah1, bl4) | 0;
              hi = hi + Math.imul(ah1, bh4) | 0;
              lo = lo + Math.imul(al0, bl5) | 0;
              mid = mid + Math.imul(al0, bh5) | 0;
              mid = mid + Math.imul(ah0, bl5) | 0;
              hi = hi + Math.imul(ah0, bh5) | 0;
              var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
              w5 &= 67108863;
              lo = Math.imul(al6, bl0);
              mid = Math.imul(al6, bh0);
              mid = mid + Math.imul(ah6, bl0) | 0;
              hi = Math.imul(ah6, bh0);
              lo = lo + Math.imul(al5, bl1) | 0;
              mid = mid + Math.imul(al5, bh1) | 0;
              mid = mid + Math.imul(ah5, bl1) | 0;
              hi = hi + Math.imul(ah5, bh1) | 0;
              lo = lo + Math.imul(al4, bl2) | 0;
              mid = mid + Math.imul(al4, bh2) | 0;
              mid = mid + Math.imul(ah4, bl2) | 0;
              hi = hi + Math.imul(ah4, bh2) | 0;
              lo = lo + Math.imul(al3, bl3) | 0;
              mid = mid + Math.imul(al3, bh3) | 0;
              mid = mid + Math.imul(ah3, bl3) | 0;
              hi = hi + Math.imul(ah3, bh3) | 0;
              lo = lo + Math.imul(al2, bl4) | 0;
              mid = mid + Math.imul(al2, bh4) | 0;
              mid = mid + Math.imul(ah2, bl4) | 0;
              hi = hi + Math.imul(ah2, bh4) | 0;
              lo = lo + Math.imul(al1, bl5) | 0;
              mid = mid + Math.imul(al1, bh5) | 0;
              mid = mid + Math.imul(ah1, bl5) | 0;
              hi = hi + Math.imul(ah1, bh5) | 0;
              lo = lo + Math.imul(al0, bl6) | 0;
              mid = mid + Math.imul(al0, bh6) | 0;
              mid = mid + Math.imul(ah0, bl6) | 0;
              hi = hi + Math.imul(ah0, bh6) | 0;
              var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
              w6 &= 67108863;
              lo = Math.imul(al7, bl0);
              mid = Math.imul(al7, bh0);
              mid = mid + Math.imul(ah7, bl0) | 0;
              hi = Math.imul(ah7, bh0);
              lo = lo + Math.imul(al6, bl1) | 0;
              mid = mid + Math.imul(al6, bh1) | 0;
              mid = mid + Math.imul(ah6, bl1) | 0;
              hi = hi + Math.imul(ah6, bh1) | 0;
              lo = lo + Math.imul(al5, bl2) | 0;
              mid = mid + Math.imul(al5, bh2) | 0;
              mid = mid + Math.imul(ah5, bl2) | 0;
              hi = hi + Math.imul(ah5, bh2) | 0;
              lo = lo + Math.imul(al4, bl3) | 0;
              mid = mid + Math.imul(al4, bh3) | 0;
              mid = mid + Math.imul(ah4, bl3) | 0;
              hi = hi + Math.imul(ah4, bh3) | 0;
              lo = lo + Math.imul(al3, bl4) | 0;
              mid = mid + Math.imul(al3, bh4) | 0;
              mid = mid + Math.imul(ah3, bl4) | 0;
              hi = hi + Math.imul(ah3, bh4) | 0;
              lo = lo + Math.imul(al2, bl5) | 0;
              mid = mid + Math.imul(al2, bh5) | 0;
              mid = mid + Math.imul(ah2, bl5) | 0;
              hi = hi + Math.imul(ah2, bh5) | 0;
              lo = lo + Math.imul(al1, bl6) | 0;
              mid = mid + Math.imul(al1, bh6) | 0;
              mid = mid + Math.imul(ah1, bl6) | 0;
              hi = hi + Math.imul(ah1, bh6) | 0;
              lo = lo + Math.imul(al0, bl7) | 0;
              mid = mid + Math.imul(al0, bh7) | 0;
              mid = mid + Math.imul(ah0, bl7) | 0;
              hi = hi + Math.imul(ah0, bh7) | 0;
              var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
              w7 &= 67108863;
              lo = Math.imul(al8, bl0);
              mid = Math.imul(al8, bh0);
              mid = mid + Math.imul(ah8, bl0) | 0;
              hi = Math.imul(ah8, bh0);
              lo = lo + Math.imul(al7, bl1) | 0;
              mid = mid + Math.imul(al7, bh1) | 0;
              mid = mid + Math.imul(ah7, bl1) | 0;
              hi = hi + Math.imul(ah7, bh1) | 0;
              lo = lo + Math.imul(al6, bl2) | 0;
              mid = mid + Math.imul(al6, bh2) | 0;
              mid = mid + Math.imul(ah6, bl2) | 0;
              hi = hi + Math.imul(ah6, bh2) | 0;
              lo = lo + Math.imul(al5, bl3) | 0;
              mid = mid + Math.imul(al5, bh3) | 0;
              mid = mid + Math.imul(ah5, bl3) | 0;
              hi = hi + Math.imul(ah5, bh3) | 0;
              lo = lo + Math.imul(al4, bl4) | 0;
              mid = mid + Math.imul(al4, bh4) | 0;
              mid = mid + Math.imul(ah4, bl4) | 0;
              hi = hi + Math.imul(ah4, bh4) | 0;
              lo = lo + Math.imul(al3, bl5) | 0;
              mid = mid + Math.imul(al3, bh5) | 0;
              mid = mid + Math.imul(ah3, bl5) | 0;
              hi = hi + Math.imul(ah3, bh5) | 0;
              lo = lo + Math.imul(al2, bl6) | 0;
              mid = mid + Math.imul(al2, bh6) | 0;
              mid = mid + Math.imul(ah2, bl6) | 0;
              hi = hi + Math.imul(ah2, bh6) | 0;
              lo = lo + Math.imul(al1, bl7) | 0;
              mid = mid + Math.imul(al1, bh7) | 0;
              mid = mid + Math.imul(ah1, bl7) | 0;
              hi = hi + Math.imul(ah1, bh7) | 0;
              lo = lo + Math.imul(al0, bl8) | 0;
              mid = mid + Math.imul(al0, bh8) | 0;
              mid = mid + Math.imul(ah0, bl8) | 0;
              hi = hi + Math.imul(ah0, bh8) | 0;
              var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
              w8 &= 67108863;
              lo = Math.imul(al9, bl0);
              mid = Math.imul(al9, bh0);
              mid = mid + Math.imul(ah9, bl0) | 0;
              hi = Math.imul(ah9, bh0);
              lo = lo + Math.imul(al8, bl1) | 0;
              mid = mid + Math.imul(al8, bh1) | 0;
              mid = mid + Math.imul(ah8, bl1) | 0;
              hi = hi + Math.imul(ah8, bh1) | 0;
              lo = lo + Math.imul(al7, bl2) | 0;
              mid = mid + Math.imul(al7, bh2) | 0;
              mid = mid + Math.imul(ah7, bl2) | 0;
              hi = hi + Math.imul(ah7, bh2) | 0;
              lo = lo + Math.imul(al6, bl3) | 0;
              mid = mid + Math.imul(al6, bh3) | 0;
              mid = mid + Math.imul(ah6, bl3) | 0;
              hi = hi + Math.imul(ah6, bh3) | 0;
              lo = lo + Math.imul(al5, bl4) | 0;
              mid = mid + Math.imul(al5, bh4) | 0;
              mid = mid + Math.imul(ah5, bl4) | 0;
              hi = hi + Math.imul(ah5, bh4) | 0;
              lo = lo + Math.imul(al4, bl5) | 0;
              mid = mid + Math.imul(al4, bh5) | 0;
              mid = mid + Math.imul(ah4, bl5) | 0;
              hi = hi + Math.imul(ah4, bh5) | 0;
              lo = lo + Math.imul(al3, bl6) | 0;
              mid = mid + Math.imul(al3, bh6) | 0;
              mid = mid + Math.imul(ah3, bl6) | 0;
              hi = hi + Math.imul(ah3, bh6) | 0;
              lo = lo + Math.imul(al2, bl7) | 0;
              mid = mid + Math.imul(al2, bh7) | 0;
              mid = mid + Math.imul(ah2, bl7) | 0;
              hi = hi + Math.imul(ah2, bh7) | 0;
              lo = lo + Math.imul(al1, bl8) | 0;
              mid = mid + Math.imul(al1, bh8) | 0;
              mid = mid + Math.imul(ah1, bl8) | 0;
              hi = hi + Math.imul(ah1, bh8) | 0;
              lo = lo + Math.imul(al0, bl9) | 0;
              mid = mid + Math.imul(al0, bh9) | 0;
              mid = mid + Math.imul(ah0, bl9) | 0;
              hi = hi + Math.imul(ah0, bh9) | 0;
              var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
              w9 &= 67108863;
              lo = Math.imul(al9, bl1);
              mid = Math.imul(al9, bh1);
              mid = mid + Math.imul(ah9, bl1) | 0;
              hi = Math.imul(ah9, bh1);
              lo = lo + Math.imul(al8, bl2) | 0;
              mid = mid + Math.imul(al8, bh2) | 0;
              mid = mid + Math.imul(ah8, bl2) | 0;
              hi = hi + Math.imul(ah8, bh2) | 0;
              lo = lo + Math.imul(al7, bl3) | 0;
              mid = mid + Math.imul(al7, bh3) | 0;
              mid = mid + Math.imul(ah7, bl3) | 0;
              hi = hi + Math.imul(ah7, bh3) | 0;
              lo = lo + Math.imul(al6, bl4) | 0;
              mid = mid + Math.imul(al6, bh4) | 0;
              mid = mid + Math.imul(ah6, bl4) | 0;
              hi = hi + Math.imul(ah6, bh4) | 0;
              lo = lo + Math.imul(al5, bl5) | 0;
              mid = mid + Math.imul(al5, bh5) | 0;
              mid = mid + Math.imul(ah5, bl5) | 0;
              hi = hi + Math.imul(ah5, bh5) | 0;
              lo = lo + Math.imul(al4, bl6) | 0;
              mid = mid + Math.imul(al4, bh6) | 0;
              mid = mid + Math.imul(ah4, bl6) | 0;
              hi = hi + Math.imul(ah4, bh6) | 0;
              lo = lo + Math.imul(al3, bl7) | 0;
              mid = mid + Math.imul(al3, bh7) | 0;
              mid = mid + Math.imul(ah3, bl7) | 0;
              hi = hi + Math.imul(ah3, bh7) | 0;
              lo = lo + Math.imul(al2, bl8) | 0;
              mid = mid + Math.imul(al2, bh8) | 0;
              mid = mid + Math.imul(ah2, bl8) | 0;
              hi = hi + Math.imul(ah2, bh8) | 0;
              lo = lo + Math.imul(al1, bl9) | 0;
              mid = mid + Math.imul(al1, bh9) | 0;
              mid = mid + Math.imul(ah1, bl9) | 0;
              hi = hi + Math.imul(ah1, bh9) | 0;
              var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
              w10 &= 67108863;
              lo = Math.imul(al9, bl2);
              mid = Math.imul(al9, bh2);
              mid = mid + Math.imul(ah9, bl2) | 0;
              hi = Math.imul(ah9, bh2);
              lo = lo + Math.imul(al8, bl3) | 0;
              mid = mid + Math.imul(al8, bh3) | 0;
              mid = mid + Math.imul(ah8, bl3) | 0;
              hi = hi + Math.imul(ah8, bh3) | 0;
              lo = lo + Math.imul(al7, bl4) | 0;
              mid = mid + Math.imul(al7, bh4) | 0;
              mid = mid + Math.imul(ah7, bl4) | 0;
              hi = hi + Math.imul(ah7, bh4) | 0;
              lo = lo + Math.imul(al6, bl5) | 0;
              mid = mid + Math.imul(al6, bh5) | 0;
              mid = mid + Math.imul(ah6, bl5) | 0;
              hi = hi + Math.imul(ah6, bh5) | 0;
              lo = lo + Math.imul(al5, bl6) | 0;
              mid = mid + Math.imul(al5, bh6) | 0;
              mid = mid + Math.imul(ah5, bl6) | 0;
              hi = hi + Math.imul(ah5, bh6) | 0;
              lo = lo + Math.imul(al4, bl7) | 0;
              mid = mid + Math.imul(al4, bh7) | 0;
              mid = mid + Math.imul(ah4, bl7) | 0;
              hi = hi + Math.imul(ah4, bh7) | 0;
              lo = lo + Math.imul(al3, bl8) | 0;
              mid = mid + Math.imul(al3, bh8) | 0;
              mid = mid + Math.imul(ah3, bl8) | 0;
              hi = hi + Math.imul(ah3, bh8) | 0;
              lo = lo + Math.imul(al2, bl9) | 0;
              mid = mid + Math.imul(al2, bh9) | 0;
              mid = mid + Math.imul(ah2, bl9) | 0;
              hi = hi + Math.imul(ah2, bh9) | 0;
              var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
              w11 &= 67108863;
              lo = Math.imul(al9, bl3);
              mid = Math.imul(al9, bh3);
              mid = mid + Math.imul(ah9, bl3) | 0;
              hi = Math.imul(ah9, bh3);
              lo = lo + Math.imul(al8, bl4) | 0;
              mid = mid + Math.imul(al8, bh4) | 0;
              mid = mid + Math.imul(ah8, bl4) | 0;
              hi = hi + Math.imul(ah8, bh4) | 0;
              lo = lo + Math.imul(al7, bl5) | 0;
              mid = mid + Math.imul(al7, bh5) | 0;
              mid = mid + Math.imul(ah7, bl5) | 0;
              hi = hi + Math.imul(ah7, bh5) | 0;
              lo = lo + Math.imul(al6, bl6) | 0;
              mid = mid + Math.imul(al6, bh6) | 0;
              mid = mid + Math.imul(ah6, bl6) | 0;
              hi = hi + Math.imul(ah6, bh6) | 0;
              lo = lo + Math.imul(al5, bl7) | 0;
              mid = mid + Math.imul(al5, bh7) | 0;
              mid = mid + Math.imul(ah5, bl7) | 0;
              hi = hi + Math.imul(ah5, bh7) | 0;
              lo = lo + Math.imul(al4, bl8) | 0;
              mid = mid + Math.imul(al4, bh8) | 0;
              mid = mid + Math.imul(ah4, bl8) | 0;
              hi = hi + Math.imul(ah4, bh8) | 0;
              lo = lo + Math.imul(al3, bl9) | 0;
              mid = mid + Math.imul(al3, bh9) | 0;
              mid = mid + Math.imul(ah3, bl9) | 0;
              hi = hi + Math.imul(ah3, bh9) | 0;
              var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
              w12 &= 67108863;
              lo = Math.imul(al9, bl4);
              mid = Math.imul(al9, bh4);
              mid = mid + Math.imul(ah9, bl4) | 0;
              hi = Math.imul(ah9, bh4);
              lo = lo + Math.imul(al8, bl5) | 0;
              mid = mid + Math.imul(al8, bh5) | 0;
              mid = mid + Math.imul(ah8, bl5) | 0;
              hi = hi + Math.imul(ah8, bh5) | 0;
              lo = lo + Math.imul(al7, bl6) | 0;
              mid = mid + Math.imul(al7, bh6) | 0;
              mid = mid + Math.imul(ah7, bl6) | 0;
              hi = hi + Math.imul(ah7, bh6) | 0;
              lo = lo + Math.imul(al6, bl7) | 0;
              mid = mid + Math.imul(al6, bh7) | 0;
              mid = mid + Math.imul(ah6, bl7) | 0;
              hi = hi + Math.imul(ah6, bh7) | 0;
              lo = lo + Math.imul(al5, bl8) | 0;
              mid = mid + Math.imul(al5, bh8) | 0;
              mid = mid + Math.imul(ah5, bl8) | 0;
              hi = hi + Math.imul(ah5, bh8) | 0;
              lo = lo + Math.imul(al4, bl9) | 0;
              mid = mid + Math.imul(al4, bh9) | 0;
              mid = mid + Math.imul(ah4, bl9) | 0;
              hi = hi + Math.imul(ah4, bh9) | 0;
              var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
              w13 &= 67108863;
              lo = Math.imul(al9, bl5);
              mid = Math.imul(al9, bh5);
              mid = mid + Math.imul(ah9, bl5) | 0;
              hi = Math.imul(ah9, bh5);
              lo = lo + Math.imul(al8, bl6) | 0;
              mid = mid + Math.imul(al8, bh6) | 0;
              mid = mid + Math.imul(ah8, bl6) | 0;
              hi = hi + Math.imul(ah8, bh6) | 0;
              lo = lo + Math.imul(al7, bl7) | 0;
              mid = mid + Math.imul(al7, bh7) | 0;
              mid = mid + Math.imul(ah7, bl7) | 0;
              hi = hi + Math.imul(ah7, bh7) | 0;
              lo = lo + Math.imul(al6, bl8) | 0;
              mid = mid + Math.imul(al6, bh8) | 0;
              mid = mid + Math.imul(ah6, bl8) | 0;
              hi = hi + Math.imul(ah6, bh8) | 0;
              lo = lo + Math.imul(al5, bl9) | 0;
              mid = mid + Math.imul(al5, bh9) | 0;
              mid = mid + Math.imul(ah5, bl9) | 0;
              hi = hi + Math.imul(ah5, bh9) | 0;
              var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
              w14 &= 67108863;
              lo = Math.imul(al9, bl6);
              mid = Math.imul(al9, bh6);
              mid = mid + Math.imul(ah9, bl6) | 0;
              hi = Math.imul(ah9, bh6);
              lo = lo + Math.imul(al8, bl7) | 0;
              mid = mid + Math.imul(al8, bh7) | 0;
              mid = mid + Math.imul(ah8, bl7) | 0;
              hi = hi + Math.imul(ah8, bh7) | 0;
              lo = lo + Math.imul(al7, bl8) | 0;
              mid = mid + Math.imul(al7, bh8) | 0;
              mid = mid + Math.imul(ah7, bl8) | 0;
              hi = hi + Math.imul(ah7, bh8) | 0;
              lo = lo + Math.imul(al6, bl9) | 0;
              mid = mid + Math.imul(al6, bh9) | 0;
              mid = mid + Math.imul(ah6, bl9) | 0;
              hi = hi + Math.imul(ah6, bh9) | 0;
              var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
              w15 &= 67108863;
              lo = Math.imul(al9, bl7);
              mid = Math.imul(al9, bh7);
              mid = mid + Math.imul(ah9, bl7) | 0;
              hi = Math.imul(ah9, bh7);
              lo = lo + Math.imul(al8, bl8) | 0;
              mid = mid + Math.imul(al8, bh8) | 0;
              mid = mid + Math.imul(ah8, bl8) | 0;
              hi = hi + Math.imul(ah8, bh8) | 0;
              lo = lo + Math.imul(al7, bl9) | 0;
              mid = mid + Math.imul(al7, bh9) | 0;
              mid = mid + Math.imul(ah7, bl9) | 0;
              hi = hi + Math.imul(ah7, bh9) | 0;
              var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
              w16 &= 67108863;
              lo = Math.imul(al9, bl8);
              mid = Math.imul(al9, bh8);
              mid = mid + Math.imul(ah9, bl8) | 0;
              hi = Math.imul(ah9, bh8);
              lo = lo + Math.imul(al8, bl9) | 0;
              mid = mid + Math.imul(al8, bh9) | 0;
              mid = mid + Math.imul(ah8, bl9) | 0;
              hi = hi + Math.imul(ah8, bh9) | 0;
              var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
              w17 &= 67108863;
              lo = Math.imul(al9, bl9);
              mid = Math.imul(al9, bh9);
              mid = mid + Math.imul(ah9, bl9) | 0;
              hi = Math.imul(ah9, bh9);
              var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
              c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
              w18 &= 67108863;
              o[0] = w0;
              o[1] = w1;
              o[2] = w2;
              o[3] = w3;
              o[4] = w4;
              o[5] = w5;
              o[6] = w6;
              o[7] = w7;
              o[8] = w8;
              o[9] = w9;
              o[10] = w10;
              o[11] = w11;
              o[12] = w12;
              o[13] = w13;
              o[14] = w14;
              o[15] = w15;
              o[16] = w16;
              o[17] = w17;
              o[18] = w18;
              if (c !== 0) {
                o[19] = c;
                out.length++;
              }
              return out;
            };
            if (!Math.imul) {
              comb10MulTo = smallMulTo;
            }
            function bigMulTo(self2, num, out) {
              out.negative = num.negative ^ self2.negative;
              out.length = self2.length + num.length;
              var carry = 0;
              var hncarry = 0;
              for (var k = 0; k < out.length - 1; k++) {
                var ncarry = hncarry;
                hncarry = 0;
                var rword = carry & 67108863;
                var maxJ = Math.min(k, num.length - 1);
                for (var j = Math.max(0, k - self2.length + 1); j <= maxJ; j++) {
                  var i2 = k - j;
                  var a = self2.words[i2] | 0;
                  var b = num.words[j] | 0;
                  var r = a * b;
                  var lo = r & 67108863;
                  ncarry = ncarry + (r / 67108864 | 0) | 0;
                  lo = lo + rword | 0;
                  rword = lo & 67108863;
                  ncarry = ncarry + (lo >>> 26) | 0;
                  hncarry += ncarry >>> 26;
                  ncarry &= 67108863;
                }
                out.words[k] = rword;
                carry = ncarry;
                ncarry = hncarry;
              }
              if (carry !== 0) {
                out.words[k] = carry;
              } else {
                out.length--;
              }
              return out.strip();
            }
            function jumboMulTo(self2, num, out) {
              var fftm = new FFTM();
              return fftm.mulp(self2, num, out);
            }
            BN.prototype.mulTo = function mulTo(num, out) {
              var res;
              var len2 = this.length + num.length;
              if (this.length === 10 && num.length === 10) {
                res = comb10MulTo(this, num, out);
              } else if (len2 < 63) {
                res = smallMulTo(this, num, out);
              } else if (len2 < 1024) {
                res = bigMulTo(this, num, out);
              } else {
                res = jumboMulTo(this, num, out);
              }
              return res;
            };
            function FFTM(x, y) {
              this.x = x;
              this.y = y;
            }
            FFTM.prototype.makeRBT = function makeRBT(N) {
              var t = new Array(N);
              var l = BN.prototype._countBits(N) - 1;
              for (var i2 = 0; i2 < N; i2++) {
                t[i2] = this.revBin(i2, l, N);
              }
              return t;
            };
            FFTM.prototype.revBin = function revBin(x, l, N) {
              if (x === 0 || x === N - 1) return x;
              var rb = 0;
              for (var i2 = 0; i2 < l; i2++) {
                rb |= (x & 1) << l - i2 - 1;
                x >>= 1;
              }
              return rb;
            };
            FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
              for (var i2 = 0; i2 < N; i2++) {
                rtws[i2] = rws[rbt[i2]];
                itws[i2] = iws[rbt[i2]];
              }
            };
            FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
              this.permute(rbt, rws, iws, rtws, itws, N);
              for (var s = 1; s < N; s <<= 1) {
                var l = s << 1;
                var rtwdf = Math.cos(2 * Math.PI / l);
                var itwdf = Math.sin(2 * Math.PI / l);
                for (var p = 0; p < N; p += l) {
                  var rtwdf_ = rtwdf;
                  var itwdf_ = itwdf;
                  for (var j = 0; j < s; j++) {
                    var re = rtws[p + j];
                    var ie = itws[p + j];
                    var ro = rtws[p + j + s];
                    var io = itws[p + j + s];
                    var rx = rtwdf_ * ro - itwdf_ * io;
                    io = rtwdf_ * io + itwdf_ * ro;
                    ro = rx;
                    rtws[p + j] = re + ro;
                    itws[p + j] = ie + io;
                    rtws[p + j + s] = re - ro;
                    itws[p + j + s] = ie - io;
                    if (j !== l) {
                      rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                      itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                      rtwdf_ = rx;
                    }
                  }
                }
              }
            };
            FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
              var N = Math.max(m, n) | 1;
              var odd = N & 1;
              var i2 = 0;
              for (N = N / 2 | 0; N; N = N >>> 1) {
                i2++;
              }
              return 1 << i2 + 1 + odd;
            };
            FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
              if (N <= 1) return;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var t = rws[i2];
                rws[i2] = rws[N - i2 - 1];
                rws[N - i2 - 1] = t;
                t = iws[i2];
                iws[i2] = -iws[N - i2 - 1];
                iws[N - i2 - 1] = -t;
              }
            };
            FFTM.prototype.normalize13b = function normalize13b(ws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < N / 2; i2++) {
                var w = Math.round(ws[2 * i2 + 1] / N) * 8192 + Math.round(ws[2 * i2] / N) + carry;
                ws[i2] = w & 67108863;
                if (w < 67108864) {
                  carry = 0;
                } else {
                  carry = w / 67108864 | 0;
                }
              }
              return ws;
            };
            FFTM.prototype.convert13b = function convert13b(ws, len2, rws, N) {
              var carry = 0;
              for (var i2 = 0; i2 < len2; i2++) {
                carry = carry + (ws[i2] | 0);
                rws[2 * i2] = carry & 8191;
                carry = carry >>> 13;
                rws[2 * i2 + 1] = carry & 8191;
                carry = carry >>> 13;
              }
              for (i2 = 2 * len2; i2 < N; ++i2) {
                rws[i2] = 0;
              }
              assert(carry === 0);
              assert((carry & -8192) === 0);
            };
            FFTM.prototype.stub = function stub(N) {
              var ph = new Array(N);
              for (var i2 = 0; i2 < N; i2++) {
                ph[i2] = 0;
              }
              return ph;
            };
            FFTM.prototype.mulp = function mulp(x, y, out) {
              var N = 2 * this.guessLen13b(x.length, y.length);
              var rbt = this.makeRBT(N);
              var _ = this.stub(N);
              var rws = new Array(N);
              var rwst = new Array(N);
              var iwst = new Array(N);
              var nrws = new Array(N);
              var nrwst = new Array(N);
              var niwst = new Array(N);
              var rmws = out.words;
              rmws.length = N;
              this.convert13b(x.words, x.length, rws, N);
              this.convert13b(y.words, y.length, nrws, N);
              this.transform(rws, _, rwst, iwst, N, rbt);
              this.transform(nrws, _, nrwst, niwst, N, rbt);
              for (var i2 = 0; i2 < N; i2++) {
                var rx = rwst[i2] * nrwst[i2] - iwst[i2] * niwst[i2];
                iwst[i2] = rwst[i2] * niwst[i2] + iwst[i2] * nrwst[i2];
                rwst[i2] = rx;
              }
              this.conjugate(rwst, iwst, N);
              this.transform(rwst, iwst, rmws, _, N, rbt);
              this.conjugate(rmws, _, N);
              this.normalize13b(rmws, N);
              out.negative = x.negative ^ y.negative;
              out.length = x.length + y.length;
              return out.strip();
            };
            BN.prototype.mul = function mul(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return this.mulTo(num, out);
            };
            BN.prototype.mulf = function mulf(num) {
              var out = new BN(null);
              out.words = new Array(this.length + num.length);
              return jumboMulTo(this, num, out);
            };
            BN.prototype.imul = function imul(num) {
              return this.clone().mulTo(num, this);
            };
            BN.prototype.imuln = function imuln(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              var carry = 0;
              for (var i2 = 0; i2 < this.length; i2++) {
                var w = (this.words[i2] | 0) * num;
                var lo = (w & 67108863) + (carry & 67108863);
                carry >>= 26;
                carry += w / 67108864 | 0;
                carry += lo >>> 26;
                this.words[i2] = lo & 67108863;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.muln = function muln(num) {
              return this.clone().imuln(num);
            };
            BN.prototype.sqr = function sqr() {
              return this.mul(this);
            };
            BN.prototype.isqr = function isqr() {
              return this.imul(this.clone());
            };
            BN.prototype.pow = function pow2(num) {
              var w = toBitArray(num);
              if (w.length === 0) return new BN(1);
              var res = this;
              for (var i2 = 0; i2 < w.length; i2++, res = res.sqr()) {
                if (w[i2] !== 0) break;
              }
              if (++i2 < w.length) {
                for (var q = res.sqr(); i2 < w.length; i2++, q = q.sqr()) {
                  if (w[i2] === 0) continue;
                  res = res.mul(q);
                }
              }
              return res;
            };
            BN.prototype.iushln = function iushln(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              var carryMask = 67108863 >>> 26 - r << 26 - r;
              var i2;
              if (r !== 0) {
                var carry = 0;
                for (i2 = 0; i2 < this.length; i2++) {
                  var newCarry = this.words[i2] & carryMask;
                  var c = (this.words[i2] | 0) - newCarry << r;
                  this.words[i2] = c | carry;
                  carry = newCarry >>> 26 - r;
                }
                if (carry) {
                  this.words[i2] = carry;
                  this.length++;
                }
              }
              if (s !== 0) {
                for (i2 = this.length - 1; i2 >= 0; i2--) {
                  this.words[i2 + s] = this.words[i2];
                }
                for (i2 = 0; i2 < s; i2++) {
                  this.words[i2] = 0;
                }
                this.length += s;
              }
              return this.strip();
            };
            BN.prototype.ishln = function ishln(bits) {
              assert(this.negative === 0);
              return this.iushln(bits);
            };
            BN.prototype.iushrn = function iushrn(bits, hint, extended) {
              assert(typeof bits === "number" && bits >= 0);
              var h;
              if (hint) {
                h = (hint - hint % 26) / 26;
              } else {
                h = 0;
              }
              var r = bits % 26;
              var s = Math.min((bits - r) / 26, this.length);
              var mask = 67108863 ^ 67108863 >>> r << r;
              var maskedWords = extended;
              h -= s;
              h = Math.max(0, h);
              if (maskedWords) {
                for (var i2 = 0; i2 < s; i2++) {
                  maskedWords.words[i2] = this.words[i2];
                }
                maskedWords.length = s;
              }
              if (s === 0) ;
              else if (this.length > s) {
                this.length -= s;
                for (i2 = 0; i2 < this.length; i2++) {
                  this.words[i2] = this.words[i2 + s];
                }
              } else {
                this.words[0] = 0;
                this.length = 1;
              }
              var carry = 0;
              for (i2 = this.length - 1; i2 >= 0 && (carry !== 0 || i2 >= h); i2--) {
                var word = this.words[i2] | 0;
                this.words[i2] = carry << 26 - r | word >>> r;
                carry = word & mask;
              }
              if (maskedWords && carry !== 0) {
                maskedWords.words[maskedWords.length++] = carry;
              }
              if (this.length === 0) {
                this.words[0] = 0;
                this.length = 1;
              }
              return this.strip();
            };
            BN.prototype.ishrn = function ishrn(bits, hint, extended) {
              assert(this.negative === 0);
              return this.iushrn(bits, hint, extended);
            };
            BN.prototype.shln = function shln(bits) {
              return this.clone().ishln(bits);
            };
            BN.prototype.ushln = function ushln(bits) {
              return this.clone().iushln(bits);
            };
            BN.prototype.shrn = function shrn(bits) {
              return this.clone().ishrn(bits);
            };
            BN.prototype.ushrn = function ushrn(bits) {
              return this.clone().iushrn(bits);
            };
            BN.prototype.testn = function testn(bit) {
              assert(typeof bit === "number" && bit >= 0);
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) return false;
              var w = this.words[s];
              return !!(w & q);
            };
            BN.prototype.imaskn = function imaskn(bits) {
              assert(typeof bits === "number" && bits >= 0);
              var r = bits % 26;
              var s = (bits - r) / 26;
              assert(this.negative === 0, "imaskn works only with positive numbers");
              if (this.length <= s) {
                return this;
              }
              if (r !== 0) {
                s++;
              }
              this.length = Math.min(s, this.length);
              if (r !== 0) {
                var mask = 67108863 ^ 67108863 >>> r << r;
                this.words[this.length - 1] &= mask;
              }
              return this.strip();
            };
            BN.prototype.maskn = function maskn(bits) {
              return this.clone().imaskn(bits);
            };
            BN.prototype.iaddn = function iaddn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.isubn(-num);
              if (this.negative !== 0) {
                if (this.length === 1 && (this.words[0] | 0) < num) {
                  this.words[0] = num - (this.words[0] | 0);
                  this.negative = 0;
                  return this;
                }
                this.negative = 0;
                this.isubn(num);
                this.negative = 1;
                return this;
              }
              return this._iaddn(num);
            };
            BN.prototype._iaddn = function _iaddn(num) {
              this.words[0] += num;
              for (var i2 = 0; i2 < this.length && this.words[i2] >= 67108864; i2++) {
                this.words[i2] -= 67108864;
                if (i2 === this.length - 1) {
                  this.words[i2 + 1] = 1;
                } else {
                  this.words[i2 + 1]++;
                }
              }
              this.length = Math.max(this.length, i2 + 1);
              return this;
            };
            BN.prototype.isubn = function isubn(num) {
              assert(typeof num === "number");
              assert(num < 67108864);
              if (num < 0) return this.iaddn(-num);
              if (this.negative !== 0) {
                this.negative = 0;
                this.iaddn(num);
                this.negative = 1;
                return this;
              }
              this.words[0] -= num;
              if (this.length === 1 && this.words[0] < 0) {
                this.words[0] = -this.words[0];
                this.negative = 1;
              } else {
                for (var i2 = 0; i2 < this.length && this.words[i2] < 0; i2++) {
                  this.words[i2] += 67108864;
                  this.words[i2 + 1] -= 1;
                }
              }
              return this.strip();
            };
            BN.prototype.addn = function addn(num) {
              return this.clone().iaddn(num);
            };
            BN.prototype.subn = function subn(num) {
              return this.clone().isubn(num);
            };
            BN.prototype.iabs = function iabs() {
              this.negative = 0;
              return this;
            };
            BN.prototype.abs = function abs2() {
              return this.clone().iabs();
            };
            BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
              var len2 = num.length + shift;
              var i2;
              this._expand(len2);
              var w;
              var carry = 0;
              for (i2 = 0; i2 < num.length; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                var right = (num.words[i2] | 0) * mul;
                w -= right & 67108863;
                carry = (w >> 26) - (right / 67108864 | 0);
                this.words[i2 + shift] = w & 67108863;
              }
              for (; i2 < this.length - shift; i2++) {
                w = (this.words[i2 + shift] | 0) + carry;
                carry = w >> 26;
                this.words[i2 + shift] = w & 67108863;
              }
              if (carry === 0) return this.strip();
              assert(carry === -1);
              carry = 0;
              for (i2 = 0; i2 < this.length; i2++) {
                w = -(this.words[i2] | 0) + carry;
                carry = w >> 26;
                this.words[i2] = w & 67108863;
              }
              this.negative = 1;
              return this.strip();
            };
            BN.prototype._wordDiv = function _wordDiv(num, mode) {
              var shift = this.length - num.length;
              var a = this.clone();
              var b = num;
              var bhi = b.words[b.length - 1] | 0;
              var bhiBits = this._countBits(bhi);
              shift = 26 - bhiBits;
              if (shift !== 0) {
                b = b.ushln(shift);
                a.iushln(shift);
                bhi = b.words[b.length - 1] | 0;
              }
              var m = a.length - b.length;
              var q;
              if (mode !== "mod") {
                q = new BN(null);
                q.length = m + 1;
                q.words = new Array(q.length);
                for (var i2 = 0; i2 < q.length; i2++) {
                  q.words[i2] = 0;
                }
              }
              var diff = a.clone()._ishlnsubmul(b, 1, m);
              if (diff.negative === 0) {
                a = diff;
                if (q) {
                  q.words[m] = 1;
                }
              }
              for (var j = m - 1; j >= 0; j--) {
                var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                qj = Math.min(qj / bhi | 0, 67108863);
                a._ishlnsubmul(b, qj, j);
                while (a.negative !== 0) {
                  qj--;
                  a.negative = 0;
                  a._ishlnsubmul(b, 1, j);
                  if (!a.isZero()) {
                    a.negative ^= 1;
                  }
                }
                if (q) {
                  q.words[j] = qj;
                }
              }
              if (q) {
                q.strip();
              }
              a.strip();
              if (mode !== "div" && shift !== 0) {
                a.iushrn(shift);
              }
              return {
                div: q || null,
                mod: a
              };
            };
            BN.prototype.divmod = function divmod(num, mode, positive) {
              assert(!num.isZero());
              if (this.isZero()) {
                return {
                  div: new BN(0),
                  mod: new BN(0)
                };
              }
              var div, mod, res;
              if (this.negative !== 0 && num.negative === 0) {
                res = this.neg().divmod(num, mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.iadd(num);
                  }
                }
                return {
                  div,
                  mod
                };
              }
              if (this.negative === 0 && num.negative !== 0) {
                res = this.divmod(num.neg(), mode);
                if (mode !== "mod") {
                  div = res.div.neg();
                }
                return {
                  div,
                  mod: res.mod
                };
              }
              if ((this.negative & num.negative) !== 0) {
                res = this.neg().divmod(num.neg(), mode);
                if (mode !== "div") {
                  mod = res.mod.neg();
                  if (positive && mod.negative !== 0) {
                    mod.isub(num);
                  }
                }
                return {
                  div: res.div,
                  mod
                };
              }
              if (num.length > this.length || this.cmp(num) < 0) {
                return {
                  div: new BN(0),
                  mod: this
                };
              }
              if (num.length === 1) {
                if (mode === "div") {
                  return {
                    div: this.divn(num.words[0]),
                    mod: null
                  };
                }
                if (mode === "mod") {
                  return {
                    div: null,
                    mod: new BN(this.modn(num.words[0]))
                  };
                }
                return {
                  div: this.divn(num.words[0]),
                  mod: new BN(this.modn(num.words[0]))
                };
              }
              return this._wordDiv(num, mode);
            };
            BN.prototype.div = function div(num) {
              return this.divmod(num, "div", false).div;
            };
            BN.prototype.mod = function mod(num) {
              return this.divmod(num, "mod", false).mod;
            };
            BN.prototype.umod = function umod(num) {
              return this.divmod(num, "mod", true).mod;
            };
            BN.prototype.divRound = function divRound(num) {
              var dm = this.divmod(num);
              if (dm.mod.isZero()) return dm.div;
              var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
              var half = num.ushrn(1);
              var r2 = num.andln(1);
              var cmp = mod.cmp(half);
              if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
              return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
            };
            BN.prototype.modn = function modn(num) {
              assert(num <= 67108863);
              var p = (1 << 26) % num;
              var acc = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                acc = (p * acc + (this.words[i2] | 0)) % num;
              }
              return acc;
            };
            BN.prototype.idivn = function idivn(num) {
              assert(num <= 67108863);
              var carry = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var w = (this.words[i2] | 0) + carry * 67108864;
                this.words[i2] = w / num | 0;
                carry = w % num;
              }
              return this.strip();
            };
            BN.prototype.divn = function divn(num) {
              return this.clone().idivn(num);
            };
            BN.prototype.egcd = function egcd(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var x = this;
              var y = p.clone();
              if (x.negative !== 0) {
                x = x.umod(p);
              } else {
                x = x.clone();
              }
              var A = new BN(1);
              var B = new BN(0);
              var C = new BN(0);
              var D = new BN(1);
              var g = 0;
              while (x.isEven() && y.isEven()) {
                x.iushrn(1);
                y.iushrn(1);
                ++g;
              }
              var yp = y.clone();
              var xp = x.clone();
              while (!x.isZero()) {
                for (var i2 = 0, im = 1; (x.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  x.iushrn(i2);
                  while (i2-- > 0) {
                    if (A.isOdd() || B.isOdd()) {
                      A.iadd(yp);
                      B.isub(xp);
                    }
                    A.iushrn(1);
                    B.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  y.iushrn(j);
                  while (j-- > 0) {
                    if (C.isOdd() || D.isOdd()) {
                      C.iadd(yp);
                      D.isub(xp);
                    }
                    C.iushrn(1);
                    D.iushrn(1);
                  }
                }
                if (x.cmp(y) >= 0) {
                  x.isub(y);
                  A.isub(C);
                  B.isub(D);
                } else {
                  y.isub(x);
                  C.isub(A);
                  D.isub(B);
                }
              }
              return {
                a: C,
                b: D,
                gcd: y.iushln(g)
              };
            };
            BN.prototype._invmp = function _invmp(p) {
              assert(p.negative === 0);
              assert(!p.isZero());
              var a = this;
              var b = p.clone();
              if (a.negative !== 0) {
                a = a.umod(p);
              } else {
                a = a.clone();
              }
              var x1 = new BN(1);
              var x2 = new BN(0);
              var delta = b.clone();
              while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                for (var i2 = 0, im = 1; (a.words[0] & im) === 0 && i2 < 26; ++i2, im <<= 1) ;
                if (i2 > 0) {
                  a.iushrn(i2);
                  while (i2-- > 0) {
                    if (x1.isOdd()) {
                      x1.iadd(delta);
                    }
                    x1.iushrn(1);
                  }
                }
                for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) ;
                if (j > 0) {
                  b.iushrn(j);
                  while (j-- > 0) {
                    if (x2.isOdd()) {
                      x2.iadd(delta);
                    }
                    x2.iushrn(1);
                  }
                }
                if (a.cmp(b) >= 0) {
                  a.isub(b);
                  x1.isub(x2);
                } else {
                  b.isub(a);
                  x2.isub(x1);
                }
              }
              var res;
              if (a.cmpn(1) === 0) {
                res = x1;
              } else {
                res = x2;
              }
              if (res.cmpn(0) < 0) {
                res.iadd(p);
              }
              return res;
            };
            BN.prototype.gcd = function gcd(num) {
              if (this.isZero()) return num.abs();
              if (num.isZero()) return this.abs();
              var a = this.clone();
              var b = num.clone();
              a.negative = 0;
              b.negative = 0;
              for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                a.iushrn(1);
                b.iushrn(1);
              }
              do {
                while (a.isEven()) {
                  a.iushrn(1);
                }
                while (b.isEven()) {
                  b.iushrn(1);
                }
                var r = a.cmp(b);
                if (r < 0) {
                  var t = a;
                  a = b;
                  b = t;
                } else if (r === 0 || b.cmpn(1) === 0) {
                  break;
                }
                a.isub(b);
              } while (true);
              return b.iushln(shift);
            };
            BN.prototype.invm = function invm(num) {
              return this.egcd(num).a.umod(num);
            };
            BN.prototype.isEven = function isEven() {
              return (this.words[0] & 1) === 0;
            };
            BN.prototype.isOdd = function isOdd() {
              return (this.words[0] & 1) === 1;
            };
            BN.prototype.andln = function andln(num) {
              return this.words[0] & num;
            };
            BN.prototype.bincn = function bincn(bit) {
              assert(typeof bit === "number");
              var r = bit % 26;
              var s = (bit - r) / 26;
              var q = 1 << r;
              if (this.length <= s) {
                this._expand(s + 1);
                this.words[s] |= q;
                return this;
              }
              var carry = q;
              for (var i2 = s; carry !== 0 && i2 < this.length; i2++) {
                var w = this.words[i2] | 0;
                w += carry;
                carry = w >>> 26;
                w &= 67108863;
                this.words[i2] = w;
              }
              if (carry !== 0) {
                this.words[i2] = carry;
                this.length++;
              }
              return this;
            };
            BN.prototype.isZero = function isZero() {
              return this.length === 1 && this.words[0] === 0;
            };
            BN.prototype.cmpn = function cmpn(num) {
              var negative = num < 0;
              if (this.negative !== 0 && !negative) return -1;
              if (this.negative === 0 && negative) return 1;
              this.strip();
              var res;
              if (this.length > 1) {
                res = 1;
              } else {
                if (negative) {
                  num = -num;
                }
                assert(num <= 67108863, "Number is too big");
                var w = this.words[0] | 0;
                res = w === num ? 0 : w < num ? -1 : 1;
              }
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.cmp = function cmp(num) {
              if (this.negative !== 0 && num.negative === 0) return -1;
              if (this.negative === 0 && num.negative !== 0) return 1;
              var res = this.ucmp(num);
              if (this.negative !== 0) return -res | 0;
              return res;
            };
            BN.prototype.ucmp = function ucmp(num) {
              if (this.length > num.length) return 1;
              if (this.length < num.length) return -1;
              var res = 0;
              for (var i2 = this.length - 1; i2 >= 0; i2--) {
                var a = this.words[i2] | 0;
                var b = num.words[i2] | 0;
                if (a === b) continue;
                if (a < b) {
                  res = -1;
                } else if (a > b) {
                  res = 1;
                }
                break;
              }
              return res;
            };
            BN.prototype.gtn = function gtn(num) {
              return this.cmpn(num) === 1;
            };
            BN.prototype.gt = function gt(num) {
              return this.cmp(num) === 1;
            };
            BN.prototype.gten = function gten(num) {
              return this.cmpn(num) >= 0;
            };
            BN.prototype.gte = function gte(num) {
              return this.cmp(num) >= 0;
            };
            BN.prototype.ltn = function ltn(num) {
              return this.cmpn(num) === -1;
            };
            BN.prototype.lt = function lt(num) {
              return this.cmp(num) === -1;
            };
            BN.prototype.lten = function lten(num) {
              return this.cmpn(num) <= 0;
            };
            BN.prototype.lte = function lte(num) {
              return this.cmp(num) <= 0;
            };
            BN.prototype.eqn = function eqn(num) {
              return this.cmpn(num) === 0;
            };
            BN.prototype.eq = function eq(num) {
              return this.cmp(num) === 0;
            };
            BN.red = function red(num) {
              return new Red(num);
            };
            BN.prototype.toRed = function toRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              assert(this.negative === 0, "red works only with positives");
              return ctx.convertTo(this)._forceRed(ctx);
            };
            BN.prototype.fromRed = function fromRed() {
              assert(this.red, "fromRed works only with numbers in reduction context");
              return this.red.convertFrom(this);
            };
            BN.prototype._forceRed = function _forceRed(ctx) {
              this.red = ctx;
              return this;
            };
            BN.prototype.forceRed = function forceRed(ctx) {
              assert(!this.red, "Already a number in reduction context");
              return this._forceRed(ctx);
            };
            BN.prototype.redAdd = function redAdd(num) {
              assert(this.red, "redAdd works only with red numbers");
              return this.red.add(this, num);
            };
            BN.prototype.redIAdd = function redIAdd(num) {
              assert(this.red, "redIAdd works only with red numbers");
              return this.red.iadd(this, num);
            };
            BN.prototype.redSub = function redSub(num) {
              assert(this.red, "redSub works only with red numbers");
              return this.red.sub(this, num);
            };
            BN.prototype.redISub = function redISub(num) {
              assert(this.red, "redISub works only with red numbers");
              return this.red.isub(this, num);
            };
            BN.prototype.redShl = function redShl(num) {
              assert(this.red, "redShl works only with red numbers");
              return this.red.shl(this, num);
            };
            BN.prototype.redMul = function redMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.mul(this, num);
            };
            BN.prototype.redIMul = function redIMul(num) {
              assert(this.red, "redMul works only with red numbers");
              this.red._verify2(this, num);
              return this.red.imul(this, num);
            };
            BN.prototype.redSqr = function redSqr() {
              assert(this.red, "redSqr works only with red numbers");
              this.red._verify1(this);
              return this.red.sqr(this);
            };
            BN.prototype.redISqr = function redISqr() {
              assert(this.red, "redISqr works only with red numbers");
              this.red._verify1(this);
              return this.red.isqr(this);
            };
            BN.prototype.redSqrt = function redSqrt() {
              assert(this.red, "redSqrt works only with red numbers");
              this.red._verify1(this);
              return this.red.sqrt(this);
            };
            BN.prototype.redInvm = function redInvm() {
              assert(this.red, "redInvm works only with red numbers");
              this.red._verify1(this);
              return this.red.invm(this);
            };
            BN.prototype.redNeg = function redNeg() {
              assert(this.red, "redNeg works only with red numbers");
              this.red._verify1(this);
              return this.red.neg(this);
            };
            BN.prototype.redPow = function redPow(num) {
              assert(this.red && !num.red, "redPow(normalNum)");
              this.red._verify1(this);
              return this.red.pow(this, num);
            };
            var primes = {
              k256: null,
              p224: null,
              p192: null,
              p25519: null
            };
            function MPrime(name, p) {
              this.name = name;
              this.p = new BN(p, 16);
              this.n = this.p.bitLength();
              this.k = new BN(1).iushln(this.n).isub(this.p);
              this.tmp = this._tmp();
            }
            MPrime.prototype._tmp = function _tmp() {
              var tmp = new BN(null);
              tmp.words = new Array(Math.ceil(this.n / 13));
              return tmp;
            };
            MPrime.prototype.ireduce = function ireduce(num) {
              var r = num;
              var rlen;
              do {
                this.split(r, this.tmp);
                r = this.imulK(r);
                r = r.iadd(this.tmp);
                rlen = r.bitLength();
              } while (rlen > this.n);
              var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
              if (cmp === 0) {
                r.words[0] = 0;
                r.length = 1;
              } else if (cmp > 0) {
                r.isub(this.p);
              } else {
                if (r.strip !== void 0) {
                  r.strip();
                } else {
                  r._strip();
                }
              }
              return r;
            };
            MPrime.prototype.split = function split(input, out) {
              input.iushrn(this.n, 0, out);
            };
            MPrime.prototype.imulK = function imulK(num) {
              return num.imul(this.k);
            };
            function K256() {
              MPrime.call(
                this,
                "k256",
                "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"
              );
            }
            inherits(K256, MPrime);
            K256.prototype.split = function split(input, output) {
              var mask = 4194303;
              var outLen = Math.min(input.length, 9);
              for (var i2 = 0; i2 < outLen; i2++) {
                output.words[i2] = input.words[i2];
              }
              output.length = outLen;
              if (input.length <= 9) {
                input.words[0] = 0;
                input.length = 1;
                return;
              }
              var prev = input.words[9];
              output.words[output.length++] = prev & mask;
              for (i2 = 10; i2 < input.length; i2++) {
                var next = input.words[i2] | 0;
                input.words[i2 - 10] = (next & mask) << 4 | prev >>> 22;
                prev = next;
              }
              prev >>>= 22;
              input.words[i2 - 10] = prev;
              if (prev === 0 && input.length > 10) {
                input.length -= 10;
              } else {
                input.length -= 9;
              }
            };
            K256.prototype.imulK = function imulK(num) {
              num.words[num.length] = 0;
              num.words[num.length + 1] = 0;
              num.length += 2;
              var lo = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var w = num.words[i2] | 0;
                lo += w * 977;
                num.words[i2] = lo & 67108863;
                lo = w * 64 + (lo / 67108864 | 0);
              }
              if (num.words[num.length - 1] === 0) {
                num.length--;
                if (num.words[num.length - 1] === 0) {
                  num.length--;
                }
              }
              return num;
            };
            function P224() {
              MPrime.call(
                this,
                "p224",
                "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"
              );
            }
            inherits(P224, MPrime);
            function P192() {
              MPrime.call(
                this,
                "p192",
                "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"
              );
            }
            inherits(P192, MPrime);
            function P25519() {
              MPrime.call(
                this,
                "25519",
                "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"
              );
            }
            inherits(P25519, MPrime);
            P25519.prototype.imulK = function imulK(num) {
              var carry = 0;
              for (var i2 = 0; i2 < num.length; i2++) {
                var hi = (num.words[i2] | 0) * 19 + carry;
                var lo = hi & 67108863;
                hi >>>= 26;
                num.words[i2] = lo;
                carry = hi;
              }
              if (carry !== 0) {
                num.words[num.length++] = carry;
              }
              return num;
            };
            BN._prime = function prime(name) {
              if (primes[name]) return primes[name];
              var prime2;
              if (name === "k256") {
                prime2 = new K256();
              } else if (name === "p224") {
                prime2 = new P224();
              } else if (name === "p192") {
                prime2 = new P192();
              } else if (name === "p25519") {
                prime2 = new P25519();
              } else {
                throw new Error("Unknown prime " + name);
              }
              primes[name] = prime2;
              return prime2;
            };
            function Red(m) {
              if (typeof m === "string") {
                var prime = BN._prime(m);
                this.m = prime.p;
                this.prime = prime;
              } else {
                assert(m.gtn(1), "modulus must be greater than 1");
                this.m = m;
                this.prime = null;
              }
            }
            Red.prototype._verify1 = function _verify1(a) {
              assert(a.negative === 0, "red works only with positives");
              assert(a.red, "red works only with red numbers");
            };
            Red.prototype._verify2 = function _verify2(a, b) {
              assert((a.negative | b.negative) === 0, "red works only with positives");
              assert(
                a.red && a.red === b.red,
                "red works only with red numbers"
              );
            };
            Red.prototype.imod = function imod(a) {
              if (this.prime) return this.prime.ireduce(a)._forceRed(this);
              return a.umod(this.m)._forceRed(this);
            };
            Red.prototype.neg = function neg(a) {
              if (a.isZero()) {
                return a.clone();
              }
              return this.m.sub(a)._forceRed(this);
            };
            Red.prototype.add = function add(a, b) {
              this._verify2(a, b);
              var res = a.add(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.iadd = function iadd(a, b) {
              this._verify2(a, b);
              var res = a.iadd(b);
              if (res.cmp(this.m) >= 0) {
                res.isub(this.m);
              }
              return res;
            };
            Red.prototype.sub = function sub(a, b) {
              this._verify2(a, b);
              var res = a.sub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Red.prototype.isub = function isub(a, b) {
              this._verify2(a, b);
              var res = a.isub(b);
              if (res.cmpn(0) < 0) {
                res.iadd(this.m);
              }
              return res;
            };
            Red.prototype.shl = function shl(a, num) {
              this._verify1(a);
              return this.imod(a.ushln(num));
            };
            Red.prototype.imul = function imul(a, b) {
              this._verify2(a, b);
              return this.imod(a.imul(b));
            };
            Red.prototype.mul = function mul(a, b) {
              this._verify2(a, b);
              return this.imod(a.mul(b));
            };
            Red.prototype.isqr = function isqr(a) {
              return this.imul(a, a.clone());
            };
            Red.prototype.sqr = function sqr(a) {
              return this.mul(a, a);
            };
            Red.prototype.sqrt = function sqrt(a) {
              if (a.isZero()) return a.clone();
              var mod3 = this.m.andln(3);
              assert(mod3 % 2 === 1);
              if (mod3 === 3) {
                var pow2 = this.m.add(new BN(1)).iushrn(2);
                return this.pow(a, pow2);
              }
              var q = this.m.subn(1);
              var s = 0;
              while (!q.isZero() && q.andln(1) === 0) {
                s++;
                q.iushrn(1);
              }
              assert(!q.isZero());
              var one = new BN(1).toRed(this);
              var nOne = one.redNeg();
              var lpow = this.m.subn(1).iushrn(1);
              var z = this.m.bitLength();
              z = new BN(2 * z * z).toRed(this);
              while (this.pow(z, lpow).cmp(nOne) !== 0) {
                z.redIAdd(nOne);
              }
              var c = this.pow(z, q);
              var r = this.pow(a, q.addn(1).iushrn(1));
              var t = this.pow(a, q);
              var m = s;
              while (t.cmp(one) !== 0) {
                var tmp = t;
                for (var i2 = 0; tmp.cmp(one) !== 0; i2++) {
                  tmp = tmp.redSqr();
                }
                assert(i2 < m);
                var b = this.pow(c, new BN(1).iushln(m - i2 - 1));
                r = r.redMul(b);
                c = b.redSqr();
                t = t.redMul(c);
                m = i2;
              }
              return r;
            };
            Red.prototype.invm = function invm(a) {
              var inv = a._invmp(this.m);
              if (inv.negative !== 0) {
                inv.negative = 0;
                return this.imod(inv).redNeg();
              } else {
                return this.imod(inv);
              }
            };
            Red.prototype.pow = function pow2(a, num) {
              if (num.isZero()) return new BN(1).toRed(this);
              if (num.cmpn(1) === 0) return a.clone();
              var windowSize = 4;
              var wnd = new Array(1 << windowSize);
              wnd[0] = new BN(1).toRed(this);
              wnd[1] = a;
              for (var i2 = 2; i2 < wnd.length; i2++) {
                wnd[i2] = this.mul(wnd[i2 - 1], a);
              }
              var res = wnd[0];
              var current = 0;
              var currentLen = 0;
              var start = num.bitLength() % 26;
              if (start === 0) {
                start = 26;
              }
              for (i2 = num.length - 1; i2 >= 0; i2--) {
                var word = num.words[i2];
                for (var j = start - 1; j >= 0; j--) {
                  var bit = word >> j & 1;
                  if (res !== wnd[0]) {
                    res = this.sqr(res);
                  }
                  if (bit === 0 && current === 0) {
                    currentLen = 0;
                    continue;
                  }
                  current <<= 1;
                  current |= bit;
                  currentLen++;
                  if (currentLen !== windowSize && (i2 !== 0 || j !== 0)) continue;
                  res = this.mul(res, wnd[current]);
                  currentLen = 0;
                  current = 0;
                }
                start = 26;
              }
              return res;
            };
            Red.prototype.convertTo = function convertTo(num) {
              var r = num.umod(this.m);
              return r === num ? r.clone() : r;
            };
            Red.prototype.convertFrom = function convertFrom(num) {
              var res = num.clone();
              res.red = null;
              return res;
            };
            BN.mont = function mont2(num) {
              return new Mont(num);
            };
            function Mont(m) {
              Red.call(this, m);
              this.shift = this.m.bitLength();
              if (this.shift % 26 !== 0) {
                this.shift += 26 - this.shift % 26;
              }
              this.r = new BN(1).iushln(this.shift);
              this.r2 = this.imod(this.r.sqr());
              this.rinv = this.r._invmp(this.m);
              this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
              this.minv = this.minv.umod(this.r);
              this.minv = this.r.sub(this.minv);
            }
            inherits(Mont, Red);
            Mont.prototype.convertTo = function convertTo(num) {
              return this.imod(num.ushln(this.shift));
            };
            Mont.prototype.convertFrom = function convertFrom(num) {
              var r = this.imod(num.mul(this.rinv));
              r.red = null;
              return r;
            };
            Mont.prototype.imul = function imul(a, b) {
              if (a.isZero() || b.isZero()) {
                a.words[0] = 0;
                a.length = 1;
                return a;
              }
              var t = a.imul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.mul = function mul(a, b) {
              if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
              var t = a.mul(b);
              var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
              var u = t.isub(c).iushrn(this.shift);
              var res = u;
              if (u.cmp(this.m) >= 0) {
                res = u.isub(this.m);
              } else if (u.cmpn(0) < 0) {
                res = u.iadd(this.m);
              }
              return res._forceRed(this);
            };
            Mont.prototype.invm = function invm(a) {
              var res = this.imod(a._invmp(this.m).mul(this.r2));
              return res._forceRed(this);
            };
          })(module, bn);
        })(bn$1);
        return bn$1.exports;
      }
      var withPublic_1;
      var hasRequiredWithPublic;
      function requireWithPublic() {
        if (hasRequiredWithPublic) return withPublic_1;
        hasRequiredWithPublic = 1;
        var BN = requireBn();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        function withPublic(paddedMsg, key2) {
          return Buffer2.from(paddedMsg.toRed(BN.mont(key2.modulus)).redPow(new BN(key2.publicExponent)).fromRed().toArray());
        }
        withPublic_1 = withPublic;
        return withPublic_1;
      }
      var publicEncrypt;
      var hasRequiredPublicEncrypt;
      function requirePublicEncrypt() {
        if (hasRequiredPublicEncrypt) return publicEncrypt;
        hasRequiredPublicEncrypt = 1;
        var parseKeys = requireParseAsn1();
        var randomBytes = requireBrowser$b();
        var createHash = requireBrowser$a();
        var mgf2 = requireMgf();
        var xor2 = requireXor();
        var BN = requireBn();
        var withPublic = requireWithPublic();
        var crt = /* @__PURE__ */ requireBrowserifyRsa();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        publicEncrypt = function publicEncrypt2(publicKey, msg, reverse) {
          var padding;
          if (publicKey.padding) {
            padding = publicKey.padding;
          } else if (reverse) {
            padding = 1;
          } else {
            padding = 4;
          }
          var key2 = parseKeys(publicKey);
          var paddedMsg;
          if (padding === 4) {
            paddedMsg = oaep(key2, msg);
          } else if (padding === 1) {
            paddedMsg = pkcs1(key2, msg, reverse);
          } else if (padding === 3) {
            paddedMsg = new BN(msg);
            if (paddedMsg.cmp(key2.modulus) >= 0) {
              throw new Error("data too long for modulus");
            }
          } else {
            throw new Error("unknown padding");
          }
          if (reverse) {
            return crt(paddedMsg, key2);
          } else {
            return withPublic(paddedMsg, key2);
          }
        };
        function oaep(key2, msg) {
          var k = key2.modulus.byteLength();
          var mLen = msg.length;
          var iHash = createHash("sha1").update(Buffer2.alloc(0)).digest();
          var hLen = iHash.length;
          var hLen2 = 2 * hLen;
          if (mLen > k - hLen2 - 2) {
            throw new Error("message too long");
          }
          var ps = Buffer2.alloc(k - mLen - hLen2 - 2);
          var dblen = k - hLen - 1;
          var seed = randomBytes(hLen);
          var maskedDb = xor2(Buffer2.concat([iHash, ps, Buffer2.alloc(1, 1), msg], dblen), mgf2(seed, dblen));
          var maskedSeed = xor2(seed, mgf2(maskedDb, hLen));
          return new BN(Buffer2.concat([Buffer2.alloc(1), maskedSeed, maskedDb], k));
        }
        function pkcs1(key2, msg, reverse) {
          var mLen = msg.length;
          var k = key2.modulus.byteLength();
          if (mLen > k - 11) {
            throw new Error("message too long");
          }
          var ps;
          if (reverse) {
            ps = Buffer2.alloc(k - mLen - 3, 255);
          } else {
            ps = nonZero(k - mLen - 3);
          }
          return new BN(Buffer2.concat([Buffer2.from([0, reverse ? 1 : 2]), ps, Buffer2.alloc(1), msg], k));
        }
        function nonZero(len2) {
          var out = Buffer2.allocUnsafe(len2);
          var i2 = 0;
          var cache = randomBytes(len2 * 2);
          var cur = 0;
          var num;
          while (i2 < len2) {
            if (cur === cache.length) {
              cache = randomBytes(len2 * 2);
              cur = 0;
            }
            num = cache[cur++];
            if (num) {
              out[i2++] = num;
            }
          }
          return out;
        }
        return publicEncrypt;
      }
      var privateDecrypt;
      var hasRequiredPrivateDecrypt;
      function requirePrivateDecrypt() {
        if (hasRequiredPrivateDecrypt) return privateDecrypt;
        hasRequiredPrivateDecrypt = 1;
        var parseKeys = requireParseAsn1();
        var mgf2 = requireMgf();
        var xor2 = requireXor();
        var BN = requireBn();
        var crt = /* @__PURE__ */ requireBrowserifyRsa();
        var createHash = requireBrowser$a();
        var withPublic = requireWithPublic();
        var Buffer2 = requireSafeBuffer$9().Buffer;
        privateDecrypt = function privateDecrypt2(privateKey, enc, reverse) {
          var padding;
          if (privateKey.padding) {
            padding = privateKey.padding;
          } else if (reverse) {
            padding = 1;
          } else {
            padding = 4;
          }
          var key2 = parseKeys(privateKey);
          var k = key2.modulus.byteLength();
          if (enc.length > k || new BN(enc).cmp(key2.modulus) >= 0) {
            throw new Error("decryption error");
          }
          var msg;
          if (reverse) {
            msg = withPublic(new BN(enc), key2);
          } else {
            msg = crt(enc, key2);
          }
          var zBuffer = Buffer2.alloc(k - msg.length);
          msg = Buffer2.concat([zBuffer, msg], k);
          if (padding === 4) {
            return oaep(key2, msg);
          } else if (padding === 1) {
            return pkcs1(key2, msg, reverse);
          } else if (padding === 3) {
            return msg;
          } else {
            throw new Error("unknown padding");
          }
        };
        function oaep(key2, msg) {
          var k = key2.modulus.byteLength();
          var iHash = createHash("sha1").update(Buffer2.alloc(0)).digest();
          var hLen = iHash.length;
          if (msg[0] !== 0) {
            throw new Error("decryption error");
          }
          var maskedSeed = msg.slice(1, hLen + 1);
          var maskedDb = msg.slice(hLen + 1);
          var seed = xor2(maskedSeed, mgf2(maskedDb, hLen));
          var db = xor2(maskedDb, mgf2(seed, k - hLen - 1));
          if (compare(iHash, db.slice(0, hLen))) {
            throw new Error("decryption error");
          }
          var i2 = hLen;
          while (db[i2] === 0) {
            i2++;
          }
          if (db[i2++] !== 1) {
            throw new Error("decryption error");
          }
          return db.slice(i2);
        }
        function pkcs1(key2, msg, reverse) {
          var p1 = msg.slice(0, 2);
          var i2 = 2;
          var status = 0;
          while (msg[i2++] !== 0) {
            if (i2 >= msg.length) {
              status++;
              break;
            }
          }
          var ps = msg.slice(2, i2 - 1);
          if (p1.toString("hex") !== "0002" && !reverse || p1.toString("hex") !== "0001" && reverse) {
            status++;
          }
          if (ps.length < 8) {
            status++;
          }
          if (status) {
            throw new Error("decryption error");
          }
          return msg.slice(i2);
        }
        function compare(a, b) {
          a = Buffer2.from(a);
          b = Buffer2.from(b);
          var dif = 0;
          var len2 = a.length;
          if (a.length !== b.length) {
            dif++;
            len2 = Math.min(a.length, b.length);
          }
          var i2 = -1;
          while (++i2 < len2) {
            dif += a[i2] ^ b[i2];
          }
          return dif;
        }
        return privateDecrypt;
      }
      var hasRequiredBrowser$2;
      function requireBrowser$2() {
        if (hasRequiredBrowser$2) return browser$3;
        hasRequiredBrowser$2 = 1;
        (function(exports$12) {
          exports$12.publicEncrypt = requirePublicEncrypt();
          exports$12.privateDecrypt = requirePrivateDecrypt();
          exports$12.privateEncrypt = function privateEncrypt(key2, buf) {
            return exports$12.publicEncrypt(key2, buf, true);
          };
          exports$12.publicDecrypt = function publicDecrypt(key2, buf) {
            return exports$12.privateDecrypt(key2, buf, true);
          };
        })(browser$3);
        return browser$3;
      }
      var browser$2 = {};
      var hasRequiredBrowser$1;
      function requireBrowser$1() {
        if (hasRequiredBrowser$1) return browser$2;
        hasRequiredBrowser$1 = 1;
        function oldBrowser() {
          throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11");
        }
        var safeBuffer2 = requireSafeBuffer$9();
        var randombytes = requireBrowser$b();
        var Buffer2 = safeBuffer2.Buffer;
        var kBufferMaxLength = safeBuffer2.kMaxLength;
        var crypto = commonjsGlobal.crypto || commonjsGlobal.msCrypto;
        var kMaxUint32 = Math.pow(2, 32) - 1;
        function assertOffset(offset, length) {
          if (typeof offset !== "number" || offset !== offset) {
            throw new TypeError("offset must be a number");
          }
          if (offset > kMaxUint32 || offset < 0) {
            throw new TypeError("offset must be a uint32");
          }
          if (offset > kBufferMaxLength || offset > length) {
            throw new RangeError("offset out of range");
          }
        }
        function assertSize(size, offset, length) {
          if (typeof size !== "number" || size !== size) {
            throw new TypeError("size must be a number");
          }
          if (size > kMaxUint32 || size < 0) {
            throw new TypeError("size must be a uint32");
          }
          if (size + offset > length || size > kBufferMaxLength) {
            throw new RangeError("buffer too small");
          }
        }
        if (crypto && crypto.getRandomValues || !process$1.browser) {
          browser$2.randomFill = randomFill;
          browser$2.randomFillSync = randomFillSync;
        } else {
          browser$2.randomFill = oldBrowser;
          browser$2.randomFillSync = oldBrowser;
        }
        function randomFill(buf, offset, size, cb) {
          if (!Buffer2.isBuffer(buf) && !(buf instanceof commonjsGlobal.Uint8Array)) {
            throw new TypeError('"buf" argument must be a Buffer or Uint8Array');
          }
          if (typeof offset === "function") {
            cb = offset;
            offset = 0;
            size = buf.length;
          } else if (typeof size === "function") {
            cb = size;
            size = buf.length - offset;
          } else if (typeof cb !== "function") {
            throw new TypeError('"cb" argument must be a function');
          }
          assertOffset(offset, buf.length);
          assertSize(size, offset, buf.length);
          return actualFill(buf, offset, size, cb);
        }
        function actualFill(buf, offset, size, cb) {
          if (process$1.browser) {
            var ourBuf = buf.buffer;
            var uint = new Uint8Array(ourBuf, offset, size);
            crypto.getRandomValues(uint);
            if (cb) {
              process$1.nextTick(function() {
                cb(null, buf);
              });
              return;
            }
            return buf;
          }
          if (cb) {
            randombytes(size, function(err, bytes2) {
              if (err) {
                return cb(err);
              }
              bytes2.copy(buf, offset);
              cb(null, buf);
            });
            return;
          }
          var bytes = randombytes(size);
          bytes.copy(buf, offset);
          return buf;
        }
        function randomFillSync(buf, offset, size) {
          if (typeof offset === "undefined") {
            offset = 0;
          }
          if (!Buffer2.isBuffer(buf) && !(buf instanceof commonjsGlobal.Uint8Array)) {
            throw new TypeError('"buf" argument must be a Buffer or Uint8Array');
          }
          assertOffset(offset, buf.length);
          if (size === void 0) size = buf.length - offset;
          assertSize(size, offset, buf.length);
          return actualFill(buf, offset, size);
        }
        return browser$2;
      }
      var hasRequiredCryptoBrowserify;
      function requireCryptoBrowserify() {
        if (hasRequiredCryptoBrowserify) return cryptoBrowserify;
        hasRequiredCryptoBrowserify = 1;
        cryptoBrowserify.randomBytes = cryptoBrowserify.rng = cryptoBrowserify.pseudoRandomBytes = cryptoBrowserify.prng = requireBrowser$b();
        cryptoBrowserify.createHash = cryptoBrowserify.Hash = requireBrowser$a();
        cryptoBrowserify.createHmac = cryptoBrowserify.Hmac = requireBrowser$9();
        var algos2 = requireAlgos();
        var algoKeys = Object.keys(algos2);
        var hashes = [
          "sha1",
          "sha224",
          "sha256",
          "sha384",
          "sha512",
          "md5",
          "rmd160"
        ].concat(algoKeys);
        cryptoBrowserify.getHashes = function() {
          return hashes;
        };
        var p = requireBrowser$8();
        cryptoBrowserify.pbkdf2 = p.pbkdf2;
        cryptoBrowserify.pbkdf2Sync = p.pbkdf2Sync;
        var aes2 = requireBrowser$6();
        cryptoBrowserify.Cipher = aes2.Cipher;
        cryptoBrowserify.createCipher = aes2.createCipher;
        cryptoBrowserify.Cipheriv = aes2.Cipheriv;
        cryptoBrowserify.createCipheriv = aes2.createCipheriv;
        cryptoBrowserify.Decipher = aes2.Decipher;
        cryptoBrowserify.createDecipher = aes2.createDecipher;
        cryptoBrowserify.Decipheriv = aes2.Decipheriv;
        cryptoBrowserify.createDecipheriv = aes2.createDecipheriv;
        cryptoBrowserify.getCiphers = aes2.getCiphers;
        cryptoBrowserify.listCiphers = aes2.listCiphers;
        var dh2 = requireBrowser$5();
        cryptoBrowserify.DiffieHellmanGroup = dh2.DiffieHellmanGroup;
        cryptoBrowserify.createDiffieHellmanGroup = dh2.createDiffieHellmanGroup;
        cryptoBrowserify.getDiffieHellman = dh2.getDiffieHellman;
        cryptoBrowserify.createDiffieHellman = dh2.createDiffieHellman;
        cryptoBrowserify.DiffieHellman = dh2.DiffieHellman;
        var sign2 = requireBrowser$4();
        cryptoBrowserify.createSign = sign2.createSign;
        cryptoBrowserify.Sign = sign2.Sign;
        cryptoBrowserify.createVerify = sign2.createVerify;
        cryptoBrowserify.Verify = sign2.Verify;
        cryptoBrowserify.createECDH = requireBrowser$3();
        var publicEncrypt2 = requireBrowser$2();
        cryptoBrowserify.publicEncrypt = publicEncrypt2.publicEncrypt;
        cryptoBrowserify.privateEncrypt = publicEncrypt2.privateEncrypt;
        cryptoBrowserify.publicDecrypt = publicEncrypt2.publicDecrypt;
        cryptoBrowserify.privateDecrypt = publicEncrypt2.privateDecrypt;
        var rf = requireBrowser$1();
        cryptoBrowserify.randomFill = rf.randomFill;
        cryptoBrowserify.randomFillSync = rf.randomFillSync;
        cryptoBrowserify.createCredentials = function() {
          throw new Error("sorry, createCredentials is not implemented yet\nwe accept pull requests\nhttps://github.com/browserify/crypto-browserify");
        };
        cryptoBrowserify.constants = {
          DH_CHECK_P_NOT_SAFE_PRIME: 2,
          DH_CHECK_P_NOT_PRIME: 1,
          DH_UNABLE_TO_CHECK_GENERATOR: 4,
          DH_NOT_SUITABLE_GENERATOR: 8,
          NPN_ENABLED: 1,
          ALPN_ENABLED: 1,
          RSA_PKCS1_PADDING: 1,
          RSA_SSLV23_PADDING: 2,
          RSA_NO_PADDING: 3,
          RSA_PKCS1_OAEP_PADDING: 4,
          RSA_X931_PADDING: 5,
          RSA_PKCS1_PSS_PADDING: 6,
          POINT_CONVERSION_COMPRESSED: 2,
          POINT_CONVERSION_UNCOMPRESSED: 4,
          POINT_CONVERSION_HYBRID: 6
        };
        return cryptoBrowserify;
      }
      var core = core$1.exports;
      var hasRequiredCore;
      function requireCore() {
        if (hasRequiredCore) return core$1.exports;
        hasRequiredCore = 1;
        (function(module, exports$12) {
          (function(root, factory) {
            {
              module.exports = factory();
            }
          })(core, function() {
            var CryptoJS = CryptoJS || (function(Math2, undefined$1) {
              var crypto;
              if (typeof window !== "undefined" && window.crypto) {
                crypto = window.crypto;
              }
              if (typeof self !== "undefined" && self.crypto) {
                crypto = self.crypto;
              }
              if (typeof globalThis !== "undefined" && globalThis.crypto) {
                crypto = globalThis.crypto;
              }
              if (!crypto && typeof window !== "undefined" && window.msCrypto) {
                crypto = window.msCrypto;
              }
              if (!crypto && typeof commonjsGlobal !== "undefined" && commonjsGlobal.crypto) {
                crypto = commonjsGlobal.crypto;
              }
              if (!crypto && typeof commonjsRequire === "function") {
                try {
                  crypto = requireCryptoBrowserify();
                } catch (err) {
                }
              }
              var cryptoSecureRandomInt = function() {
                if (crypto) {
                  if (typeof crypto.getRandomValues === "function") {
                    try {
                      return crypto.getRandomValues(new Uint32Array(1))[0];
                    } catch (err) {
                    }
                  }
                  if (typeof crypto.randomBytes === "function") {
                    try {
                      return crypto.randomBytes(4).readInt32LE();
                    } catch (err) {
                    }
                  }
                }
                throw new Error("Native crypto module could not be used to get secure random number.");
              };
              var create = Object.create || /* @__PURE__ */ (function() {
                function F() {
                }
                return function(obj) {
                  var subtype;
                  F.prototype = obj;
                  subtype = new F();
                  F.prototype = null;
                  return subtype;
                };
              })();
              var C = {};
              var C_lib = C.lib = {};
              var Base = C_lib.Base = /* @__PURE__ */ (function() {
                return {
                  /**
                   * Creates a new object that inherits from this object.
                   *
                   * @param {Object} overrides Properties to copy into the new object.
                   *
                   * @return {Object} The new object.
                   *
                   * @static
                   *
                   * @example
                   *
                   *     var MyType = CryptoJS.lib.Base.extend({
                   *         field: 'value',
                   *
                   *         method: function () {
                   *         }
                   *     });
                   */
                  extend: function(overrides) {
                    var subtype = create(this);
                    if (overrides) {
                      subtype.mixIn(overrides);
                    }
                    if (!subtype.hasOwnProperty("init") || this.init === subtype.init) {
                      subtype.init = function() {
                        subtype.$super.init.apply(this, arguments);
                      };
                    }
                    subtype.init.prototype = subtype;
                    subtype.$super = this;
                    return subtype;
                  },
                  /**
                   * Extends this object and runs the init method.
                   * Arguments to create() will be passed to init().
                   *
                   * @return {Object} The new object.
                   *
                   * @static
                   *
                   * @example
                   *
                   *     var instance = MyType.create();
                   */
                  create: function() {
                    var instance = this.extend();
                    instance.init.apply(instance, arguments);
                    return instance;
                  },
                  /**
                   * Initializes a newly created object.
                   * Override this method to add some logic when your objects are created.
                   *
                   * @example
                   *
                   *     var MyType = CryptoJS.lib.Base.extend({
                   *         init: function () {
                   *             // ...
                   *         }
                   *     });
                   */
                  init: function() {
                  },
                  /**
                   * Copies properties into this object.
                   *
                   * @param {Object} properties The properties to mix in.
                   *
                   * @example
                   *
                   *     MyType.mixIn({
                   *         field: 'value'
                   *     });
                   */
                  mixIn: function(properties) {
                    for (var propertyName in properties) {
                      if (properties.hasOwnProperty(propertyName)) {
                        this[propertyName] = properties[propertyName];
                      }
                    }
                    if (properties.hasOwnProperty("toString")) {
                      this.toString = properties.toString;
                    }
                  },
                  /**
                   * Creates a copy of this object.
                   *
                   * @return {Object} The clone.
                   *
                   * @example
                   *
                   *     var clone = instance.clone();
                   */
                  clone: function() {
                    return this.init.prototype.extend(this);
                  }
                };
              })();
              var WordArray = C_lib.WordArray = Base.extend({
                /**
                 * Initializes a newly created word array.
                 *
                 * @param {Array} words (Optional) An array of 32-bit words.
                 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
                 *
                 * @example
                 *
                 *     var wordArray = CryptoJS.lib.WordArray.create();
                 *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
                 *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
                 */
                init: function(words, sigBytes) {
                  words = this.words = words || [];
                  if (sigBytes != undefined$1) {
                    this.sigBytes = sigBytes;
                  } else {
                    this.sigBytes = words.length * 4;
                  }
                },
                /**
                 * Converts this word array to a string.
                 *
                 * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
                 *
                 * @return {string} The stringified word array.
                 *
                 * @example
                 *
                 *     var string = wordArray + '';
                 *     var string = wordArray.toString();
                 *     var string = wordArray.toString(CryptoJS.enc.Utf8);
                 */
                toString: function(encoder) {
                  return (encoder || Hex).stringify(this);
                },
                /**
                 * Concatenates a word array to this word array.
                 *
                 * @param {WordArray} wordArray The word array to append.
                 *
                 * @return {WordArray} This word array.
                 *
                 * @example
                 *
                 *     wordArray1.concat(wordArray2);
                 */
                concat: function(wordArray) {
                  var thisWords = this.words;
                  var thatWords = wordArray.words;
                  var thisSigBytes = this.sigBytes;
                  var thatSigBytes = wordArray.sigBytes;
                  this.clamp();
                  if (thisSigBytes % 4) {
                    for (var i2 = 0; i2 < thatSigBytes; i2++) {
                      var thatByte = thatWords[i2 >>> 2] >>> 24 - i2 % 4 * 8 & 255;
                      thisWords[thisSigBytes + i2 >>> 2] |= thatByte << 24 - (thisSigBytes + i2) % 4 * 8;
                    }
                  } else {
                    for (var j = 0; j < thatSigBytes; j += 4) {
                      thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];
                    }
                  }
                  this.sigBytes += thatSigBytes;
                  return this;
                },
                /**
                 * Removes insignificant bits.
                 *
                 * @example
                 *
                 *     wordArray.clamp();
                 */
                clamp: function() {
                  var words = this.words;
                  var sigBytes = this.sigBytes;
                  words[sigBytes >>> 2] &= 4294967295 << 32 - sigBytes % 4 * 8;
                  words.length = Math2.ceil(sigBytes / 4);
                },
                /**
                 * Creates a copy of this word array.
                 *
                 * @return {WordArray} The clone.
                 *
                 * @example
                 *
                 *     var clone = wordArray.clone();
                 */
                clone: function() {
                  var clone = Base.clone.call(this);
                  clone.words = this.words.slice(0);
                  return clone;
                },
                /**
                 * Creates a word array filled with random bytes.
                 *
                 * @param {number} nBytes The number of random bytes to generate.
                 *
                 * @return {WordArray} The random word array.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var wordArray = CryptoJS.lib.WordArray.random(16);
                 */
                random: function(nBytes) {
                  var words = [];
                  for (var i2 = 0; i2 < nBytes; i2 += 4) {
                    words.push(cryptoSecureRandomInt());
                  }
                  return new WordArray.init(words, nBytes);
                }
              });
              var C_enc = C.enc = {};
              var Hex = C_enc.Hex = {
                /**
                 * Converts a word array to a hex string.
                 *
                 * @param {WordArray} wordArray The word array.
                 *
                 * @return {string} The hex string.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);
                 */
                stringify: function(wordArray) {
                  var words = wordArray.words;
                  var sigBytes = wordArray.sigBytes;
                  var hexChars = [];
                  for (var i2 = 0; i2 < sigBytes; i2++) {
                    var bite = words[i2 >>> 2] >>> 24 - i2 % 4 * 8 & 255;
                    hexChars.push((bite >>> 4).toString(16));
                    hexChars.push((bite & 15).toString(16));
                  }
                  return hexChars.join("");
                },
                /**
                 * Converts a hex string to a word array.
                 *
                 * @param {string} hexStr The hex string.
                 *
                 * @return {WordArray} The word array.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var wordArray = CryptoJS.enc.Hex.parse(hexString);
                 */
                parse: function(hexStr) {
                  var hexStrLength = hexStr.length;
                  var words = [];
                  for (var i2 = 0; i2 < hexStrLength; i2 += 2) {
                    words[i2 >>> 3] |= parseInt(hexStr.substr(i2, 2), 16) << 24 - i2 % 8 * 4;
                  }
                  return new WordArray.init(words, hexStrLength / 2);
                }
              };
              var Latin1 = C_enc.Latin1 = {
                /**
                 * Converts a word array to a Latin1 string.
                 *
                 * @param {WordArray} wordArray The word array.
                 *
                 * @return {string} The Latin1 string.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
                 */
                stringify: function(wordArray) {
                  var words = wordArray.words;
                  var sigBytes = wordArray.sigBytes;
                  var latin1Chars = [];
                  for (var i2 = 0; i2 < sigBytes; i2++) {
                    var bite = words[i2 >>> 2] >>> 24 - i2 % 4 * 8 & 255;
                    latin1Chars.push(String.fromCharCode(bite));
                  }
                  return latin1Chars.join("");
                },
                /**
                 * Converts a Latin1 string to a word array.
                 *
                 * @param {string} latin1Str The Latin1 string.
                 *
                 * @return {WordArray} The word array.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
                 */
                parse: function(latin1Str) {
                  var latin1StrLength = latin1Str.length;
                  var words = [];
                  for (var i2 = 0; i2 < latin1StrLength; i2++) {
                    words[i2 >>> 2] |= (latin1Str.charCodeAt(i2) & 255) << 24 - i2 % 4 * 8;
                  }
                  return new WordArray.init(words, latin1StrLength);
                }
              };
              var Utf8 = C_enc.Utf8 = {
                /**
                 * Converts a word array to a UTF-8 string.
                 *
                 * @param {WordArray} wordArray The word array.
                 *
                 * @return {string} The UTF-8 string.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
                 */
                stringify: function(wordArray) {
                  try {
                    return decodeURIComponent(escape(Latin1.stringify(wordArray)));
                  } catch (e) {
                    throw new Error("Malformed UTF-8 data");
                  }
                },
                /**
                 * Converts a UTF-8 string to a word array.
                 *
                 * @param {string} utf8Str The UTF-8 string.
                 *
                 * @return {WordArray} The word array.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
                 */
                parse: function(utf8Str) {
                  return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
                }
              };
              var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
                /**
                 * Resets this block algorithm's data buffer to its initial state.
                 *
                 * @example
                 *
                 *     bufferedBlockAlgorithm.reset();
                 */
                reset: function() {
                  this._data = new WordArray.init();
                  this._nDataBytes = 0;
                },
                /**
                 * Adds new data to this block algorithm's buffer.
                 *
                 * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
                 *
                 * @example
                 *
                 *     bufferedBlockAlgorithm._append('data');
                 *     bufferedBlockAlgorithm._append(wordArray);
                 */
                _append: function(data) {
                  if (typeof data == "string") {
                    data = Utf8.parse(data);
                  }
                  this._data.concat(data);
                  this._nDataBytes += data.sigBytes;
                },
                /**
                 * Processes available data blocks.
                 *
                 * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
                 *
                 * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
                 *
                 * @return {WordArray} The processed data.
                 *
                 * @example
                 *
                 *     var processedData = bufferedBlockAlgorithm._process();
                 *     var processedData = bufferedBlockAlgorithm._process(!!'flush');
                 */
                _process: function(doFlush) {
                  var processedWords;
                  var data = this._data;
                  var dataWords = data.words;
                  var dataSigBytes = data.sigBytes;
                  var blockSize = this.blockSize;
                  var blockSizeBytes = blockSize * 4;
                  var nBlocksReady = dataSigBytes / blockSizeBytes;
                  if (doFlush) {
                    nBlocksReady = Math2.ceil(nBlocksReady);
                  } else {
                    nBlocksReady = Math2.max((nBlocksReady | 0) - this._minBufferSize, 0);
                  }
                  var nWordsReady = nBlocksReady * blockSize;
                  var nBytesReady = Math2.min(nWordsReady * 4, dataSigBytes);
                  if (nWordsReady) {
                    for (var offset = 0; offset < nWordsReady; offset += blockSize) {
                      this._doProcessBlock(dataWords, offset);
                    }
                    processedWords = dataWords.splice(0, nWordsReady);
                    data.sigBytes -= nBytesReady;
                  }
                  return new WordArray.init(processedWords, nBytesReady);
                },
                /**
                 * Creates a copy of this object.
                 *
                 * @return {Object} The clone.
                 *
                 * @example
                 *
                 *     var clone = bufferedBlockAlgorithm.clone();
                 */
                clone: function() {
                  var clone = Base.clone.call(this);
                  clone._data = this._data.clone();
                  return clone;
                },
                _minBufferSize: 0
              });
              C_lib.Hasher = BufferedBlockAlgorithm.extend({
                /**
                 * Configuration options.
                 */
                cfg: Base.extend(),
                /**
                 * Initializes a newly created hasher.
                 *
                 * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
                 *
                 * @example
                 *
                 *     var hasher = CryptoJS.algo.SHA256.create();
                 */
                init: function(cfg) {
                  this.cfg = this.cfg.extend(cfg);
                  this.reset();
                },
                /**
                 * Resets this hasher to its initial state.
                 *
                 * @example
                 *
                 *     hasher.reset();
                 */
                reset: function() {
                  BufferedBlockAlgorithm.reset.call(this);
                  this._doReset();
                },
                /**
                 * Updates this hasher with a message.
                 *
                 * @param {WordArray|string} messageUpdate The message to append.
                 *
                 * @return {Hasher} This hasher.
                 *
                 * @example
                 *
                 *     hasher.update('message');
                 *     hasher.update(wordArray);
                 */
                update: function(messageUpdate) {
                  this._append(messageUpdate);
                  this._process();
                  return this;
                },
                /**
                 * Finalizes the hash computation.
                 * Note that the finalize operation is effectively a destructive, read-once operation.
                 *
                 * @param {WordArray|string} messageUpdate (Optional) A final message update.
                 *
                 * @return {WordArray} The hash.
                 *
                 * @example
                 *
                 *     var hash = hasher.finalize();
                 *     var hash = hasher.finalize('message');
                 *     var hash = hasher.finalize(wordArray);
                 */
                finalize: function(messageUpdate) {
                  if (messageUpdate) {
                    this._append(messageUpdate);
                  }
                  var hash2 = this._doFinalize();
                  return hash2;
                },
                blockSize: 512 / 32,
                /**
                 * Creates a shortcut function to a hasher's object interface.
                 *
                 * @param {Hasher} hasher The hasher to create a helper for.
                 *
                 * @return {Function} The shortcut function.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
                 */
                _createHelper: function(hasher) {
                  return function(message, cfg) {
                    return new hasher.init(cfg).finalize(message);
                  };
                },
                /**
                 * Creates a shortcut function to the HMAC's object interface.
                 *
                 * @param {Hasher} hasher The hasher to use in this HMAC helper.
                 *
                 * @return {Function} The shortcut function.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
                 */
                _createHmacHelper: function(hasher) {
                  return function(message, key2) {
                    return new C_algo.HMAC.init(hasher, key2).finalize(message);
                  };
                }
              });
              var C_algo = C.algo = {};
              return C;
            })(Math);
            return CryptoJS;
          });
        })(core$1);
        return core$1.exports;
      }
      var encBase64$1 = { exports: {} };
      var encBase64 = encBase64$1.exports;
      var hasRequiredEncBase64;
      function requireEncBase64() {
        if (hasRequiredEncBase64) return encBase64$1.exports;
        hasRequiredEncBase64 = 1;
        (function(module, exports$12) {
          (function(root, factory) {
            {
              module.exports = factory(requireCore());
            }
          })(encBase64, function(CryptoJS) {
            (function() {
              var C = CryptoJS;
              var C_lib = C.lib;
              var WordArray = C_lib.WordArray;
              var C_enc = C.enc;
              C_enc.Base64 = {
                /**
                 * Converts a word array to a Base64 string.
                 *
                 * @param {WordArray} wordArray The word array.
                 *
                 * @return {string} The Base64 string.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);
                 */
                stringify: function(wordArray) {
                  var words = wordArray.words;
                  var sigBytes = wordArray.sigBytes;
                  var map = this._map;
                  wordArray.clamp();
                  var base64Chars = [];
                  for (var i2 = 0; i2 < sigBytes; i2 += 3) {
                    var byte1 = words[i2 >>> 2] >>> 24 - i2 % 4 * 8 & 255;
                    var byte2 = words[i2 + 1 >>> 2] >>> 24 - (i2 + 1) % 4 * 8 & 255;
                    var byte3 = words[i2 + 2 >>> 2] >>> 24 - (i2 + 2) % 4 * 8 & 255;
                    var triplet = byte1 << 16 | byte2 << 8 | byte3;
                    for (var j = 0; j < 4 && i2 + j * 0.75 < sigBytes; j++) {
                      base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 63));
                    }
                  }
                  var paddingChar = map.charAt(64);
                  if (paddingChar) {
                    while (base64Chars.length % 4) {
                      base64Chars.push(paddingChar);
                    }
                  }
                  return base64Chars.join("");
                },
                /**
                 * Converts a Base64 string to a word array.
                 *
                 * @param {string} base64Str The Base64 string.
                 *
                 * @return {WordArray} The word array.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var wordArray = CryptoJS.enc.Base64.parse(base64String);
                 */
                parse: function(base64Str) {
                  var base64StrLength = base64Str.length;
                  var map = this._map;
                  var reverseMap = this._reverseMap;
                  if (!reverseMap) {
                    reverseMap = this._reverseMap = [];
                    for (var j = 0; j < map.length; j++) {
                      reverseMap[map.charCodeAt(j)] = j;
                    }
                  }
                  var paddingChar = map.charAt(64);
                  if (paddingChar) {
                    var paddingIndex = base64Str.indexOf(paddingChar);
                    if (paddingIndex !== -1) {
                      base64StrLength = paddingIndex;
                    }
                  }
                  return parseLoop(base64Str, base64StrLength, reverseMap);
                },
                _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
              };
              function parseLoop(base64Str, base64StrLength, reverseMap) {
                var words = [];
                var nBytes = 0;
                for (var i2 = 0; i2 < base64StrLength; i2++) {
                  if (i2 % 4) {
                    var bits1 = reverseMap[base64Str.charCodeAt(i2 - 1)] << i2 % 4 * 2;
                    var bits2 = reverseMap[base64Str.charCodeAt(i2)] >>> 6 - i2 % 4 * 2;
                    var bitsCombined = bits1 | bits2;
                    words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;
                    nBytes++;
                  }
                }
                return WordArray.create(words, nBytes);
              }
            })();
            return CryptoJS.enc.Base64;
          });
        })(encBase64$1);
        return encBase64$1.exports;
      }
      var md5$1 = { exports: {} };
      var md5 = md5$1.exports;
      var hasRequiredMd5;
      function requireMd5() {
        if (hasRequiredMd5) return md5$1.exports;
        hasRequiredMd5 = 1;
        (function(module, exports$12) {
          (function(root, factory) {
            {
              module.exports = factory(requireCore());
            }
          })(md5, function(CryptoJS) {
            (function(Math2) {
              var C = CryptoJS;
              var C_lib = C.lib;
              var WordArray = C_lib.WordArray;
              var Hasher = C_lib.Hasher;
              var C_algo = C.algo;
              var T = [];
              (function() {
                for (var i2 = 0; i2 < 64; i2++) {
                  T[i2] = Math2.abs(Math2.sin(i2 + 1)) * 4294967296 | 0;
                }
              })();
              var MD5 = C_algo.MD5 = Hasher.extend({
                _doReset: function() {
                  this._hash = new WordArray.init([
                    1732584193,
                    4023233417,
                    2562383102,
                    271733878
                  ]);
                },
                _doProcessBlock: function(M, offset) {
                  for (var i2 = 0; i2 < 16; i2++) {
                    var offset_i = offset + i2;
                    var M_offset_i = M[offset_i];
                    M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 16711935 | (M_offset_i << 24 | M_offset_i >>> 8) & 4278255360;
                  }
                  var H = this._hash.words;
                  var M_offset_0 = M[offset + 0];
                  var M_offset_1 = M[offset + 1];
                  var M_offset_2 = M[offset + 2];
                  var M_offset_3 = M[offset + 3];
                  var M_offset_4 = M[offset + 4];
                  var M_offset_5 = M[offset + 5];
                  var M_offset_6 = M[offset + 6];
                  var M_offset_7 = M[offset + 7];
                  var M_offset_8 = M[offset + 8];
                  var M_offset_9 = M[offset + 9];
                  var M_offset_10 = M[offset + 10];
                  var M_offset_11 = M[offset + 11];
                  var M_offset_12 = M[offset + 12];
                  var M_offset_13 = M[offset + 13];
                  var M_offset_14 = M[offset + 14];
                  var M_offset_15 = M[offset + 15];
                  var a = H[0];
                  var b = H[1];
                  var c = H[2];
                  var d = H[3];
                  a = FF(a, b, c, d, M_offset_0, 7, T[0]);
                  d = FF(d, a, b, c, M_offset_1, 12, T[1]);
                  c = FF(c, d, a, b, M_offset_2, 17, T[2]);
                  b = FF(b, c, d, a, M_offset_3, 22, T[3]);
                  a = FF(a, b, c, d, M_offset_4, 7, T[4]);
                  d = FF(d, a, b, c, M_offset_5, 12, T[5]);
                  c = FF(c, d, a, b, M_offset_6, 17, T[6]);
                  b = FF(b, c, d, a, M_offset_7, 22, T[7]);
                  a = FF(a, b, c, d, M_offset_8, 7, T[8]);
                  d = FF(d, a, b, c, M_offset_9, 12, T[9]);
                  c = FF(c, d, a, b, M_offset_10, 17, T[10]);
                  b = FF(b, c, d, a, M_offset_11, 22, T[11]);
                  a = FF(a, b, c, d, M_offset_12, 7, T[12]);
                  d = FF(d, a, b, c, M_offset_13, 12, T[13]);
                  c = FF(c, d, a, b, M_offset_14, 17, T[14]);
                  b = FF(b, c, d, a, M_offset_15, 22, T[15]);
                  a = GG(a, b, c, d, M_offset_1, 5, T[16]);
                  d = GG(d, a, b, c, M_offset_6, 9, T[17]);
                  c = GG(c, d, a, b, M_offset_11, 14, T[18]);
                  b = GG(b, c, d, a, M_offset_0, 20, T[19]);
                  a = GG(a, b, c, d, M_offset_5, 5, T[20]);
                  d = GG(d, a, b, c, M_offset_10, 9, T[21]);
                  c = GG(c, d, a, b, M_offset_15, 14, T[22]);
                  b = GG(b, c, d, a, M_offset_4, 20, T[23]);
                  a = GG(a, b, c, d, M_offset_9, 5, T[24]);
                  d = GG(d, a, b, c, M_offset_14, 9, T[25]);
                  c = GG(c, d, a, b, M_offset_3, 14, T[26]);
                  b = GG(b, c, d, a, M_offset_8, 20, T[27]);
                  a = GG(a, b, c, d, M_offset_13, 5, T[28]);
                  d = GG(d, a, b, c, M_offset_2, 9, T[29]);
                  c = GG(c, d, a, b, M_offset_7, 14, T[30]);
                  b = GG(b, c, d, a, M_offset_12, 20, T[31]);
                  a = HH(a, b, c, d, M_offset_5, 4, T[32]);
                  d = HH(d, a, b, c, M_offset_8, 11, T[33]);
                  c = HH(c, d, a, b, M_offset_11, 16, T[34]);
                  b = HH(b, c, d, a, M_offset_14, 23, T[35]);
                  a = HH(a, b, c, d, M_offset_1, 4, T[36]);
                  d = HH(d, a, b, c, M_offset_4, 11, T[37]);
                  c = HH(c, d, a, b, M_offset_7, 16, T[38]);
                  b = HH(b, c, d, a, M_offset_10, 23, T[39]);
                  a = HH(a, b, c, d, M_offset_13, 4, T[40]);
                  d = HH(d, a, b, c, M_offset_0, 11, T[41]);
                  c = HH(c, d, a, b, M_offset_3, 16, T[42]);
                  b = HH(b, c, d, a, M_offset_6, 23, T[43]);
                  a = HH(a, b, c, d, M_offset_9, 4, T[44]);
                  d = HH(d, a, b, c, M_offset_12, 11, T[45]);
                  c = HH(c, d, a, b, M_offset_15, 16, T[46]);
                  b = HH(b, c, d, a, M_offset_2, 23, T[47]);
                  a = II(a, b, c, d, M_offset_0, 6, T[48]);
                  d = II(d, a, b, c, M_offset_7, 10, T[49]);
                  c = II(c, d, a, b, M_offset_14, 15, T[50]);
                  b = II(b, c, d, a, M_offset_5, 21, T[51]);
                  a = II(a, b, c, d, M_offset_12, 6, T[52]);
                  d = II(d, a, b, c, M_offset_3, 10, T[53]);
                  c = II(c, d, a, b, M_offset_10, 15, T[54]);
                  b = II(b, c, d, a, M_offset_1, 21, T[55]);
                  a = II(a, b, c, d, M_offset_8, 6, T[56]);
                  d = II(d, a, b, c, M_offset_15, 10, T[57]);
                  c = II(c, d, a, b, M_offset_6, 15, T[58]);
                  b = II(b, c, d, a, M_offset_13, 21, T[59]);
                  a = II(a, b, c, d, M_offset_4, 6, T[60]);
                  d = II(d, a, b, c, M_offset_11, 10, T[61]);
                  c = II(c, d, a, b, M_offset_2, 15, T[62]);
                  b = II(b, c, d, a, M_offset_9, 21, T[63]);
                  H[0] = H[0] + a | 0;
                  H[1] = H[1] + b | 0;
                  H[2] = H[2] + c | 0;
                  H[3] = H[3] + d | 0;
                },
                _doFinalize: function() {
                  var data = this._data;
                  var dataWords = data.words;
                  var nBitsTotal = this._nDataBytes * 8;
                  var nBitsLeft = data.sigBytes * 8;
                  dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
                  var nBitsTotalH = Math2.floor(nBitsTotal / 4294967296);
                  var nBitsTotalL = nBitsTotal;
                  dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 16711935 | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 4278255360;
                  dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 16711935 | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 4278255360;
                  data.sigBytes = (dataWords.length + 1) * 4;
                  this._process();
                  var hash2 = this._hash;
                  var H = hash2.words;
                  for (var i2 = 0; i2 < 4; i2++) {
                    var H_i = H[i2];
                    H[i2] = (H_i << 8 | H_i >>> 24) & 16711935 | (H_i << 24 | H_i >>> 8) & 4278255360;
                  }
                  return hash2;
                },
                clone: function() {
                  var clone = Hasher.clone.call(this);
                  clone._hash = this._hash.clone();
                  return clone;
                }
              });
              function FF(a, b, c, d, x, s, t) {
                var n = a + (b & c | ~b & d) + x + t;
                return (n << s | n >>> 32 - s) + b;
              }
              function GG(a, b, c, d, x, s, t) {
                var n = a + (b & d | c & ~d) + x + t;
                return (n << s | n >>> 32 - s) + b;
              }
              function HH(a, b, c, d, x, s, t) {
                var n = a + (b ^ c ^ d) + x + t;
                return (n << s | n >>> 32 - s) + b;
              }
              function II(a, b, c, d, x, s, t) {
                var n = a + (c ^ (b | ~d)) + x + t;
                return (n << s | n >>> 32 - s) + b;
              }
              C.MD5 = Hasher._createHelper(MD5);
              C.HmacMD5 = Hasher._createHmacHelper(MD5);
            })(Math);
            return CryptoJS.MD5;
          });
        })(md5$1);
        return md5$1.exports;
      }
      var evpkdf$1 = { exports: {} };
      var sha1$1 = { exports: {} };
      var sha1 = sha1$1.exports;
      var hasRequiredSha1;
      function requireSha1() {
        if (hasRequiredSha1) return sha1$1.exports;
        hasRequiredSha1 = 1;
        (function(module, exports$12) {
          (function(root, factory) {
            {
              module.exports = factory(requireCore());
            }
          })(sha1, function(CryptoJS) {
            (function() {
              var C = CryptoJS;
              var C_lib = C.lib;
              var WordArray = C_lib.WordArray;
              var Hasher = C_lib.Hasher;
              var C_algo = C.algo;
              var W = [];
              var SHA1 = C_algo.SHA1 = Hasher.extend({
                _doReset: function() {
                  this._hash = new WordArray.init([
                    1732584193,
                    4023233417,
                    2562383102,
                    271733878,
                    3285377520
                  ]);
                },
                _doProcessBlock: function(M, offset) {
                  var H = this._hash.words;
                  var a = H[0];
                  var b = H[1];
                  var c = H[2];
                  var d = H[3];
                  var e = H[4];
                  for (var i2 = 0; i2 < 80; i2++) {
                    if (i2 < 16) {
                      W[i2] = M[offset + i2] | 0;
                    } else {
                      var n = W[i2 - 3] ^ W[i2 - 8] ^ W[i2 - 14] ^ W[i2 - 16];
                      W[i2] = n << 1 | n >>> 31;
                    }
                    var t = (a << 5 | a >>> 27) + e + W[i2];
                    if (i2 < 20) {
                      t += (b & c | ~b & d) + 1518500249;
                    } else if (i2 < 40) {
                      t += (b ^ c ^ d) + 1859775393;
                    } else if (i2 < 60) {
                      t += (b & c | b & d | c & d) - 1894007588;
                    } else {
                      t += (b ^ c ^ d) - 899497514;
                    }
                    e = d;
                    d = c;
                    c = b << 30 | b >>> 2;
                    b = a;
                    a = t;
                  }
                  H[0] = H[0] + a | 0;
                  H[1] = H[1] + b | 0;
                  H[2] = H[2] + c | 0;
                  H[3] = H[3] + d | 0;
                  H[4] = H[4] + e | 0;
                },
                _doFinalize: function() {
                  var data = this._data;
                  var dataWords = data.words;
                  var nBitsTotal = this._nDataBytes * 8;
                  var nBitsLeft = data.sigBytes * 8;
                  dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
                  dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 4294967296);
                  dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;
                  data.sigBytes = dataWords.length * 4;
                  this._process();
                  return this._hash;
                },
                clone: function() {
                  var clone = Hasher.clone.call(this);
                  clone._hash = this._hash.clone();
                  return clone;
                }
              });
              C.SHA1 = Hasher._createHelper(SHA1);
              C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
            })();
            return CryptoJS.SHA1;
          });
        })(sha1$1);
        return sha1$1.exports;
      }
      var hmac$1 = { exports: {} };
      var hmac = hmac$1.exports;
      var hasRequiredHmac;
      function requireHmac() {
        if (hasRequiredHmac) return hmac$1.exports;
        hasRequiredHmac = 1;
        (function(module, exports$12) {
          (function(root, factory) {
            {
              module.exports = factory(requireCore());
            }
          })(hmac, function(CryptoJS) {
            (function() {
              var C = CryptoJS;
              var C_lib = C.lib;
              var Base = C_lib.Base;
              var C_enc = C.enc;
              var Utf8 = C_enc.Utf8;
              var C_algo = C.algo;
              C_algo.HMAC = Base.extend({
                /**
                 * Initializes a newly created HMAC.
                 *
                 * @param {Hasher} hasher The hash algorithm to use.
                 * @param {WordArray|string} key The secret key.
                 *
                 * @example
                 *
                 *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
                 */
                init: function(hasher, key2) {
                  hasher = this._hasher = new hasher.init();
                  if (typeof key2 == "string") {
                    key2 = Utf8.parse(key2);
                  }
                  var hasherBlockSize = hasher.blockSize;
                  var hasherBlockSizeBytes = hasherBlockSize * 4;
                  if (key2.sigBytes > hasherBlockSizeBytes) {
                    key2 = hasher.finalize(key2);
                  }
                  key2.clamp();
                  var oKey = this._oKey = key2.clone();
                  var iKey = this._iKey = key2.clone();
                  var oKeyWords = oKey.words;
                  var iKeyWords = iKey.words;
                  for (var i2 = 0; i2 < hasherBlockSize; i2++) {
                    oKeyWords[i2] ^= 1549556828;
                    iKeyWords[i2] ^= 909522486;
                  }
                  oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
                  this.reset();
                },
                /**
                 * Resets this HMAC to its initial state.
                 *
                 * @example
                 *
                 *     hmacHasher.reset();
                 */
                reset: function() {
                  var hasher = this._hasher;
                  hasher.reset();
                  hasher.update(this._iKey);
                },
                /**
                 * Updates this HMAC with a message.
                 *
                 * @param {WordArray|string} messageUpdate The message to append.
                 *
                 * @return {HMAC} This HMAC instance.
                 *
                 * @example
                 *
                 *     hmacHasher.update('message');
                 *     hmacHasher.update(wordArray);
                 */
                update: function(messageUpdate) {
                  this._hasher.update(messageUpdate);
                  return this;
                },
                /**
                 * Finalizes the HMAC computation.
                 * Note that the finalize operation is effectively a destructive, read-once operation.
                 *
                 * @param {WordArray|string} messageUpdate (Optional) A final message update.
                 *
                 * @return {WordArray} The HMAC.
                 *
                 * @example
                 *
                 *     var hmac = hmacHasher.finalize();
                 *     var hmac = hmacHasher.finalize('message');
                 *     var hmac = hmacHasher.finalize(wordArray);
                 */
                finalize: function(messageUpdate) {
                  var hasher = this._hasher;
                  var innerHash = hasher.finalize(messageUpdate);
                  hasher.reset();
                  var hmac2 = hasher.finalize(this._oKey.clone().concat(innerHash));
                  return hmac2;
                }
              });
            })();
          });
        })(hmac$1);
        return hmac$1.exports;
      }
      var evpkdf = evpkdf$1.exports;
      var hasRequiredEvpkdf;
      function requireEvpkdf() {
        if (hasRequiredEvpkdf) return evpkdf$1.exports;
        hasRequiredEvpkdf = 1;
        (function(module, exports$12) {
          (function(root, factory, undef) {
            {
              module.exports = factory(requireCore(), requireSha1(), requireHmac());
            }
          })(evpkdf, function(CryptoJS) {
            (function() {
              var C = CryptoJS;
              var C_lib = C.lib;
              var Base = C_lib.Base;
              var WordArray = C_lib.WordArray;
              var C_algo = C.algo;
              var MD5 = C_algo.MD5;
              var EvpKDF = C_algo.EvpKDF = Base.extend({
                /**
                 * Configuration options.
                 *
                 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
                 * @property {Hasher} hasher The hash algorithm to use. Default: MD5
                 * @property {number} iterations The number of iterations to perform. Default: 1
                 */
                cfg: Base.extend({
                  keySize: 128 / 32,
                  hasher: MD5,
                  iterations: 1
                }),
                /**
                 * Initializes a newly created key derivation function.
                 *
                 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
                 *
                 * @example
                 *
                 *     var kdf = CryptoJS.algo.EvpKDF.create();
                 *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
                 *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
                 */
                init: function(cfg) {
                  this.cfg = this.cfg.extend(cfg);
                },
                /**
                 * Derives a key from a password.
                 *
                 * @param {WordArray|string} password The password.
                 * @param {WordArray|string} salt A salt.
                 *
                 * @return {WordArray} The derived key.
                 *
                 * @example
                 *
                 *     var key = kdf.compute(password, salt);
                 */
                compute: function(password, salt) {
                  var block;
                  var cfg = this.cfg;
                  var hasher = cfg.hasher.create();
                  var derivedKey = WordArray.create();
                  var derivedKeyWords = derivedKey.words;
                  var keySize = cfg.keySize;
                  var iterations = cfg.iterations;
                  while (derivedKeyWords.length < keySize) {
                    if (block) {
                      hasher.update(block);
                    }
                    block = hasher.update(password).finalize(salt);
                    hasher.reset();
                    for (var i2 = 1; i2 < iterations; i2++) {
                      block = hasher.finalize(block);
                      hasher.reset();
                    }
                    derivedKey.concat(block);
                  }
                  derivedKey.sigBytes = keySize * 4;
                  return derivedKey;
                }
              });
              C.EvpKDF = function(password, salt, cfg) {
                return EvpKDF.create(cfg).compute(password, salt);
              };
            })();
            return CryptoJS.EvpKDF;
          });
        })(evpkdf$1);
        return evpkdf$1.exports;
      }
      var cipherCore$1 = { exports: {} };
      var cipherCore = cipherCore$1.exports;
      var hasRequiredCipherCore;
      function requireCipherCore() {
        if (hasRequiredCipherCore) return cipherCore$1.exports;
        hasRequiredCipherCore = 1;
        (function(module, exports$12) {
          (function(root, factory, undef) {
            {
              module.exports = factory(requireCore(), requireEvpkdf());
            }
          })(cipherCore, function(CryptoJS) {
            CryptoJS.lib.Cipher || (function(undefined$1) {
              var C = CryptoJS;
              var C_lib = C.lib;
              var Base = C_lib.Base;
              var WordArray = C_lib.WordArray;
              var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
              var C_enc = C.enc;
              C_enc.Utf8;
              var Base64 = C_enc.Base64;
              var C_algo = C.algo;
              var EvpKDF = C_algo.EvpKDF;
              var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
                /**
                 * Configuration options.
                 *
                 * @property {WordArray} iv The IV to use for this operation.
                 */
                cfg: Base.extend(),
                /**
                 * Creates this cipher in encryption mode.
                 *
                 * @param {WordArray} key The key.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @return {Cipher} A cipher instance.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
                 */
                createEncryptor: function(key2, cfg) {
                  return this.create(this._ENC_XFORM_MODE, key2, cfg);
                },
                /**
                 * Creates this cipher in decryption mode.
                 *
                 * @param {WordArray} key The key.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @return {Cipher} A cipher instance.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
                 */
                createDecryptor: function(key2, cfg) {
                  return this.create(this._DEC_XFORM_MODE, key2, cfg);
                },
                /**
                 * Initializes a newly created cipher.
                 *
                 * @param {number} xformMode Either the encryption or decryption transormation mode constant.
                 * @param {WordArray} key The key.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @example
                 *
                 *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
                 */
                init: function(xformMode, key2, cfg) {
                  this.cfg = this.cfg.extend(cfg);
                  this._xformMode = xformMode;
                  this._key = key2;
                  this.reset();
                },
                /**
                 * Resets this cipher to its initial state.
                 *
                 * @example
                 *
                 *     cipher.reset();
                 */
                reset: function() {
                  BufferedBlockAlgorithm.reset.call(this);
                  this._doReset();
                },
                /**
                 * Adds data to be encrypted or decrypted.
                 *
                 * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
                 *
                 * @return {WordArray} The data after processing.
                 *
                 * @example
                 *
                 *     var encrypted = cipher.process('data');
                 *     var encrypted = cipher.process(wordArray);
                 */
                process: function(dataUpdate) {
                  this._append(dataUpdate);
                  return this._process();
                },
                /**
                 * Finalizes the encryption or decryption process.
                 * Note that the finalize operation is effectively a destructive, read-once operation.
                 *
                 * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
                 *
                 * @return {WordArray} The data after final processing.
                 *
                 * @example
                 *
                 *     var encrypted = cipher.finalize();
                 *     var encrypted = cipher.finalize('data');
                 *     var encrypted = cipher.finalize(wordArray);
                 */
                finalize: function(dataUpdate) {
                  if (dataUpdate) {
                    this._append(dataUpdate);
                  }
                  var finalProcessedData = this._doFinalize();
                  return finalProcessedData;
                },
                keySize: 128 / 32,
                ivSize: 128 / 32,
                _ENC_XFORM_MODE: 1,
                _DEC_XFORM_MODE: 2,
                /**
                 * Creates shortcut functions to a cipher's object interface.
                 *
                 * @param {Cipher} cipher The cipher to create a helper for.
                 *
                 * @return {Object} An object with encrypt and decrypt shortcut functions.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
                 */
                _createHelper: /* @__PURE__ */ (function() {
                  function selectCipherStrategy(key2) {
                    if (typeof key2 == "string") {
                      return PasswordBasedCipher;
                    } else {
                      return SerializableCipher;
                    }
                  }
                  return function(cipher2) {
                    return {
                      encrypt: function(message, key2, cfg) {
                        return selectCipherStrategy(key2).encrypt(cipher2, message, key2, cfg);
                      },
                      decrypt: function(ciphertext, key2, cfg) {
                        return selectCipherStrategy(key2).decrypt(cipher2, ciphertext, key2, cfg);
                      }
                    };
                  };
                })()
              });
              C_lib.StreamCipher = Cipher.extend({
                _doFinalize: function() {
                  var finalProcessedBlocks = this._process(true);
                  return finalProcessedBlocks;
                },
                blockSize: 1
              });
              var C_mode = C.mode = {};
              var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
                /**
                 * Creates this mode for encryption.
                 *
                 * @param {Cipher} cipher A block cipher instance.
                 * @param {Array} iv The IV words.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
                 */
                createEncryptor: function(cipher2, iv) {
                  return this.Encryptor.create(cipher2, iv);
                },
                /**
                 * Creates this mode for decryption.
                 *
                 * @param {Cipher} cipher A block cipher instance.
                 * @param {Array} iv The IV words.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
                 */
                createDecryptor: function(cipher2, iv) {
                  return this.Decryptor.create(cipher2, iv);
                },
                /**
                 * Initializes a newly created mode.
                 *
                 * @param {Cipher} cipher A block cipher instance.
                 * @param {Array} iv The IV words.
                 *
                 * @example
                 *
                 *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
                 */
                init: function(cipher2, iv) {
                  this._cipher = cipher2;
                  this._iv = iv;
                }
              });
              var CBC = C_mode.CBC = (function() {
                var CBC2 = BlockCipherMode.extend();
                CBC2.Encryptor = CBC2.extend({
                  /**
                   * Processes the data block at offset.
                   *
                   * @param {Array} words The data words to operate on.
                   * @param {number} offset The offset where the block starts.
                   *
                   * @example
                   *
                   *     mode.processBlock(data.words, offset);
                   */
                  processBlock: function(words, offset) {
                    var cipher2 = this._cipher;
                    var blockSize = cipher2.blockSize;
                    xorBlock.call(this, words, offset, blockSize);
                    cipher2.encryptBlock(words, offset);
                    this._prevBlock = words.slice(offset, offset + blockSize);
                  }
                });
                CBC2.Decryptor = CBC2.extend({
                  /**
                   * Processes the data block at offset.
                   *
                   * @param {Array} words The data words to operate on.
                   * @param {number} offset The offset where the block starts.
                   *
                   * @example
                   *
                   *     mode.processBlock(data.words, offset);
                   */
                  processBlock: function(words, offset) {
                    var cipher2 = this._cipher;
                    var blockSize = cipher2.blockSize;
                    var thisBlock = words.slice(offset, offset + blockSize);
                    cipher2.decryptBlock(words, offset);
                    xorBlock.call(this, words, offset, blockSize);
                    this._prevBlock = thisBlock;
                  }
                });
                function xorBlock(words, offset, blockSize) {
                  var block;
                  var iv = this._iv;
                  if (iv) {
                    block = iv;
                    this._iv = undefined$1;
                  } else {
                    block = this._prevBlock;
                  }
                  for (var i2 = 0; i2 < blockSize; i2++) {
                    words[offset + i2] ^= block[i2];
                  }
                }
                return CBC2;
              })();
              var C_pad = C.pad = {};
              var Pkcs7 = C_pad.Pkcs7 = {
                /**
                 * Pads data using the algorithm defined in PKCS #5/7.
                 *
                 * @param {WordArray} data The data to pad.
                 * @param {number} blockSize The multiple that the data should be padded to.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);
                 */
                pad: function(data, blockSize) {
                  var blockSizeBytes = blockSize * 4;
                  var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
                  var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;
                  var paddingWords = [];
                  for (var i2 = 0; i2 < nPaddingBytes; i2 += 4) {
                    paddingWords.push(paddingWord);
                  }
                  var padding = WordArray.create(paddingWords, nPaddingBytes);
                  data.concat(padding);
                },
                /**
                 * Unpads data that had been padded using the algorithm defined in PKCS #5/7.
                 *
                 * @param {WordArray} data The data to unpad.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     CryptoJS.pad.Pkcs7.unpad(wordArray);
                 */
                unpad: function(data) {
                  var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 255;
                  data.sigBytes -= nPaddingBytes;
                }
              };
              C_lib.BlockCipher = Cipher.extend({
                /**
                 * Configuration options.
                 *
                 * @property {Mode} mode The block mode to use. Default: CBC
                 * @property {Padding} padding The padding strategy to use. Default: Pkcs7
                 */
                cfg: Cipher.cfg.extend({
                  mode: CBC,
                  padding: Pkcs7
                }),
                reset: function() {
                  var modeCreator;
                  Cipher.reset.call(this);
                  var cfg = this.cfg;
                  var iv = cfg.iv;
                  var mode = cfg.mode;
                  if (this._xformMode == this._ENC_XFORM_MODE) {
                    modeCreator = mode.createEncryptor;
                  } else {
                    modeCreator = mode.createDecryptor;
                    this._minBufferSize = 1;
                  }
                  if (this._mode && this._mode.__creator == modeCreator) {
                    this._mode.init(this, iv && iv.words);
                  } else {
                    this._mode = modeCreator.call(mode, this, iv && iv.words);
                    this._mode.__creator = modeCreator;
                  }
                },
                _doProcessBlock: function(words, offset) {
                  this._mode.processBlock(words, offset);
                },
                _doFinalize: function() {
                  var finalProcessedBlocks;
                  var padding = this.cfg.padding;
                  if (this._xformMode == this._ENC_XFORM_MODE) {
                    padding.pad(this._data, this.blockSize);
                    finalProcessedBlocks = this._process(true);
                  } else {
                    finalProcessedBlocks = this._process(true);
                    padding.unpad(finalProcessedBlocks);
                  }
                  return finalProcessedBlocks;
                },
                blockSize: 128 / 32
              });
              var CipherParams = C_lib.CipherParams = Base.extend({
                /**
                 * Initializes a newly created cipher params object.
                 *
                 * @param {Object} cipherParams An object with any of the possible cipher parameters.
                 *
                 * @example
                 *
                 *     var cipherParams = CryptoJS.lib.CipherParams.create({
                 *         ciphertext: ciphertextWordArray,
                 *         key: keyWordArray,
                 *         iv: ivWordArray,
                 *         salt: saltWordArray,
                 *         algorithm: CryptoJS.algo.AES,
                 *         mode: CryptoJS.mode.CBC,
                 *         padding: CryptoJS.pad.PKCS7,
                 *         blockSize: 4,
                 *         formatter: CryptoJS.format.OpenSSL
                 *     });
                 */
                init: function(cipherParams) {
                  this.mixIn(cipherParams);
                },
                /**
                 * Converts this cipher params object to a string.
                 *
                 * @param {Format} formatter (Optional) The formatting strategy to use.
                 *
                 * @return {string} The stringified cipher params.
                 *
                 * @throws Error If neither the formatter nor the default formatter is set.
                 *
                 * @example
                 *
                 *     var string = cipherParams + '';
                 *     var string = cipherParams.toString();
                 *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);
                 */
                toString: function(formatter) {
                  return (formatter || this.formatter).stringify(this);
                }
              });
              var C_format = C.format = {};
              var OpenSSLFormatter = C_format.OpenSSL = {
                /**
                 * Converts a cipher params object to an OpenSSL-compatible string.
                 *
                 * @param {CipherParams} cipherParams The cipher params object.
                 *
                 * @return {string} The OpenSSL-compatible string.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
                 */
                stringify: function(cipherParams) {
                  var wordArray;
                  var ciphertext = cipherParams.ciphertext;
                  var salt = cipherParams.salt;
                  if (salt) {
                    wordArray = WordArray.create([1398893684, 1701076831]).concat(salt).concat(ciphertext);
                  } else {
                    wordArray = ciphertext;
                  }
                  return wordArray.toString(Base64);
                },
                /**
                 * Converts an OpenSSL-compatible string to a cipher params object.
                 *
                 * @param {string} openSSLStr The OpenSSL-compatible string.
                 *
                 * @return {CipherParams} The cipher params object.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
                 */
                parse: function(openSSLStr) {
                  var salt;
                  var ciphertext = Base64.parse(openSSLStr);
                  var ciphertextWords = ciphertext.words;
                  if (ciphertextWords[0] == 1398893684 && ciphertextWords[1] == 1701076831) {
                    salt = WordArray.create(ciphertextWords.slice(2, 4));
                    ciphertextWords.splice(0, 4);
                    ciphertext.sigBytes -= 16;
                  }
                  return CipherParams.create({ ciphertext, salt });
                }
              };
              var SerializableCipher = C_lib.SerializableCipher = Base.extend({
                /**
                 * Configuration options.
                 *
                 * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
                 */
                cfg: Base.extend({
                  format: OpenSSLFormatter
                }),
                /**
                 * Encrypts a message.
                 *
                 * @param {Cipher} cipher The cipher algorithm to use.
                 * @param {WordArray|string} message The message to encrypt.
                 * @param {WordArray} key The key.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @return {CipherParams} A cipher params object.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
                 *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
                 *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
                 */
                encrypt: function(cipher2, message, key2, cfg) {
                  cfg = this.cfg.extend(cfg);
                  var encryptor = cipher2.createEncryptor(key2, cfg);
                  var ciphertext = encryptor.finalize(message);
                  var cipherCfg = encryptor.cfg;
                  return CipherParams.create({
                    ciphertext,
                    key: key2,
                    iv: cipherCfg.iv,
                    algorithm: cipher2,
                    mode: cipherCfg.mode,
                    padding: cipherCfg.padding,
                    blockSize: cipher2.blockSize,
                    formatter: cfg.format
                  });
                },
                /**
                 * Decrypts serialized ciphertext.
                 *
                 * @param {Cipher} cipher The cipher algorithm to use.
                 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
                 * @param {WordArray} key The key.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @return {WordArray} The plaintext.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
                 *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
                 */
                decrypt: function(cipher2, ciphertext, key2, cfg) {
                  cfg = this.cfg.extend(cfg);
                  ciphertext = this._parse(ciphertext, cfg.format);
                  var plaintext = cipher2.createDecryptor(key2, cfg).finalize(ciphertext.ciphertext);
                  return plaintext;
                },
                /**
                 * Converts serialized ciphertext to CipherParams,
                 * else assumed CipherParams already and returns ciphertext unchanged.
                 *
                 * @param {CipherParams|string} ciphertext The ciphertext.
                 * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
                 *
                 * @return {CipherParams} The unserialized ciphertext.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
                 */
                _parse: function(ciphertext, format) {
                  if (typeof ciphertext == "string") {
                    return format.parse(ciphertext, this);
                  } else {
                    return ciphertext;
                  }
                }
              });
              var C_kdf = C.kdf = {};
              var OpenSSLKdf = C_kdf.OpenSSL = {
                /**
                 * Derives a key and IV from a password.
                 *
                 * @param {string} password The password to derive from.
                 * @param {number} keySize The size in words of the key to generate.
                 * @param {number} ivSize The size in words of the IV to generate.
                 * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.
                 *
                 * @return {CipherParams} A cipher params object with the key, IV, and salt.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
                 *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
                 */
                execute: function(password, keySize, ivSize, salt, hasher) {
                  if (!salt) {
                    salt = WordArray.random(64 / 8);
                  }
                  if (!hasher) {
                    var key2 = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
                  } else {
                    var key2 = EvpKDF.create({ keySize: keySize + ivSize, hasher }).compute(password, salt);
                  }
                  var iv = WordArray.create(key2.words.slice(keySize), ivSize * 4);
                  key2.sigBytes = keySize * 4;
                  return CipherParams.create({ key: key2, iv, salt });
                }
              };
              var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
                /**
                 * Configuration options.
                 *
                 * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
                 */
                cfg: SerializableCipher.cfg.extend({
                  kdf: OpenSSLKdf
                }),
                /**
                 * Encrypts a message using a password.
                 *
                 * @param {Cipher} cipher The cipher algorithm to use.
                 * @param {WordArray|string} message The message to encrypt.
                 * @param {string} password The password.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @return {CipherParams} A cipher params object.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
                 *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
                 */
                encrypt: function(cipher2, message, password, cfg) {
                  cfg = this.cfg.extend(cfg);
                  var derivedParams = cfg.kdf.execute(password, cipher2.keySize, cipher2.ivSize, cfg.salt, cfg.hasher);
                  cfg.iv = derivedParams.iv;
                  var ciphertext = SerializableCipher.encrypt.call(this, cipher2, message, derivedParams.key, cfg);
                  ciphertext.mixIn(derivedParams);
                  return ciphertext;
                },
                /**
                 * Decrypts serialized ciphertext using a password.
                 *
                 * @param {Cipher} cipher The cipher algorithm to use.
                 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
                 * @param {string} password The password.
                 * @param {Object} cfg (Optional) The configuration options to use for this operation.
                 *
                 * @return {WordArray} The plaintext.
                 *
                 * @static
                 *
                 * @example
                 *
                 *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
                 *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
                 */
                decrypt: function(cipher2, ciphertext, password, cfg) {
                  cfg = this.cfg.extend(cfg);
                  ciphertext = this._parse(ciphertext, cfg.format);
                  var derivedParams = cfg.kdf.execute(password, cipher2.keySize, cipher2.ivSize, ciphertext.salt, cfg.hasher);
                  cfg.iv = derivedParams.iv;
                  var plaintext = SerializableCipher.decrypt.call(this, cipher2, ciphertext, derivedParams.key, cfg);
                  return plaintext;
                }
              });
            })();
          });
        })(cipherCore$1);
        return cipherCore$1.exports;
      }
      var aes$1 = aes$3.exports;
      var hasRequiredAes;
      function requireAes() {
        if (hasRequiredAes) return aes$3.exports;
        hasRequiredAes = 1;
        (function(module, exports$12) {
          (function(root, factory, undef) {
            {
              module.exports = factory(requireCore(), requireEncBase64(), requireMd5(), requireEvpkdf(), requireCipherCore());
            }
          })(aes$1, function(CryptoJS) {
            (function() {
              var C = CryptoJS;
              var C_lib = C.lib;
              var BlockCipher = C_lib.BlockCipher;
              var C_algo = C.algo;
              var SBOX = [];
              var INV_SBOX = [];
              var SUB_MIX_0 = [];
              var SUB_MIX_1 = [];
              var SUB_MIX_2 = [];
              var SUB_MIX_3 = [];
              var INV_SUB_MIX_0 = [];
              var INV_SUB_MIX_1 = [];
              var INV_SUB_MIX_2 = [];
              var INV_SUB_MIX_3 = [];
              (function() {
                var d = [];
                for (var i2 = 0; i2 < 256; i2++) {
                  if (i2 < 128) {
                    d[i2] = i2 << 1;
                  } else {
                    d[i2] = i2 << 1 ^ 283;
                  }
                }
                var x = 0;
                var xi = 0;
                for (var i2 = 0; i2 < 256; i2++) {
                  var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
                  sx = sx >>> 8 ^ sx & 255 ^ 99;
                  SBOX[x] = sx;
                  INV_SBOX[sx] = x;
                  var x2 = d[x];
                  var x4 = d[x2];
                  var x8 = d[x4];
                  var t = d[sx] * 257 ^ sx * 16843008;
                  SUB_MIX_0[x] = t << 24 | t >>> 8;
                  SUB_MIX_1[x] = t << 16 | t >>> 16;
                  SUB_MIX_2[x] = t << 8 | t >>> 24;
                  SUB_MIX_3[x] = t;
                  var t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;
                  INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;
                  INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;
                  INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;
                  INV_SUB_MIX_3[sx] = t;
                  if (!x) {
                    x = xi = 1;
                  } else {
                    x = x2 ^ d[d[d[x8 ^ x2]]];
                    xi ^= d[d[xi]];
                  }
                }
              })();
              var RCON = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
              var AES2 = C_algo.AES = BlockCipher.extend({
                _doReset: function() {
                  var t;
                  if (this._nRounds && this._keyPriorReset === this._key) {
                    return;
                  }
                  var key2 = this._keyPriorReset = this._key;
                  var keyWords = key2.words;
                  var keySize = key2.sigBytes / 4;
                  var nRounds = this._nRounds = keySize + 6;
                  var ksRows = (nRounds + 1) * 4;
                  var keySchedule = this._keySchedule = [];
                  for (var ksRow = 0; ksRow < ksRows; ksRow++) {
                    if (ksRow < keySize) {
                      keySchedule[ksRow] = keyWords[ksRow];
                    } else {
                      t = keySchedule[ksRow - 1];
                      if (!(ksRow % keySize)) {
                        t = t << 8 | t >>> 24;
                        t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
                        t ^= RCON[ksRow / keySize | 0] << 24;
                      } else if (keySize > 6 && ksRow % keySize == 4) {
                        t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
                      }
                      keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
                    }
                  }
                  var invKeySchedule = this._invKeySchedule = [];
                  for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
                    var ksRow = ksRows - invKsRow;
                    if (invKsRow % 4) {
                      var t = keySchedule[ksRow];
                    } else {
                      var t = keySchedule[ksRow - 4];
                    }
                    if (invKsRow < 4 || ksRow <= 4) {
                      invKeySchedule[invKsRow] = t;
                    } else {
                      invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 255]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 255]] ^ INV_SUB_MIX_3[SBOX[t & 255]];
                    }
                  }
                },
                encryptBlock: function(M, offset) {
                  this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
                },
                decryptBlock: function(M, offset) {
                  var t = M[offset + 1];
                  M[offset + 1] = M[offset + 3];
                  M[offset + 3] = t;
                  this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
                  var t = M[offset + 1];
                  M[offset + 1] = M[offset + 3];
                  M[offset + 3] = t;
                },
                _doCryptBlock: function(M, offset, keySchedule, SUB_MIX_02, SUB_MIX_12, SUB_MIX_22, SUB_MIX_32, SBOX2) {
                  var nRounds = this._nRounds;
                  var s0 = M[offset] ^ keySchedule[0];
                  var s1 = M[offset + 1] ^ keySchedule[1];
                  var s2 = M[offset + 2] ^ keySchedule[2];
                  var s3 = M[offset + 3] ^ keySchedule[3];
                  var ksRow = 4;
                  for (var round2 = 1; round2 < nRounds; round2++) {
                    var t0 = SUB_MIX_02[s0 >>> 24] ^ SUB_MIX_12[s1 >>> 16 & 255] ^ SUB_MIX_22[s2 >>> 8 & 255] ^ SUB_MIX_32[s3 & 255] ^ keySchedule[ksRow++];
                    var t1 = SUB_MIX_02[s1 >>> 24] ^ SUB_MIX_12[s2 >>> 16 & 255] ^ SUB_MIX_22[s3 >>> 8 & 255] ^ SUB_MIX_32[s0 & 255] ^ keySchedule[ksRow++];
                    var t2 = SUB_MIX_02[s2 >>> 24] ^ SUB_MIX_12[s3 >>> 16 & 255] ^ SUB_MIX_22[s0 >>> 8 & 255] ^ SUB_MIX_32[s1 & 255] ^ keySchedule[ksRow++];
                    var t3 = SUB_MIX_02[s3 >>> 24] ^ SUB_MIX_12[s0 >>> 16 & 255] ^ SUB_MIX_22[s1 >>> 8 & 255] ^ SUB_MIX_32[s2 & 255] ^ keySchedule[ksRow++];
                    s0 = t0;
                    s1 = t1;
                    s2 = t2;
                    s3 = t3;
                  }
                  var t0 = (SBOX2[s0 >>> 24] << 24 | SBOX2[s1 >>> 16 & 255] << 16 | SBOX2[s2 >>> 8 & 255] << 8 | SBOX2[s3 & 255]) ^ keySchedule[ksRow++];
                  var t1 = (SBOX2[s1 >>> 24] << 24 | SBOX2[s2 >>> 16 & 255] << 16 | SBOX2[s3 >>> 8 & 255] << 8 | SBOX2[s0 & 255]) ^ keySchedule[ksRow++];
                  var t2 = (SBOX2[s2 >>> 24] << 24 | SBOX2[s3 >>> 16 & 255] << 16 | SBOX2[s0 >>> 8 & 255] << 8 | SBOX2[s1 & 255]) ^ keySchedule[ksRow++];
                  var t3 = (SBOX2[s3 >>> 24] << 24 | SBOX2[s0 >>> 16 & 255] << 16 | SBOX2[s1 >>> 8 & 255] << 8 | SBOX2[s2 & 255]) ^ keySchedule[ksRow++];
                  M[offset] = t0;
                  M[offset + 1] = t1;
                  M[offset + 2] = t2;
                  M[offset + 3] = t3;
                },
                keySize: 256 / 32
              });
              C.AES = BlockCipher._createHelper(AES2);
            })();
            return CryptoJS.AES;
          });
        })(aes$3);
        return aes$3.exports;
      }
      var aesExports = requireAes();
      const aes = /* @__PURE__ */ getDefaultExportFromCjs(aesExports);
      const __CJS__import__1__$2 = /* @__PURE__ */ _mergeNamespaces({
        __proto__: null,
        default: aes
      }, [aesExports]);
      var encUtf8$2 = { exports: {} };
      var encUtf8$1 = encUtf8$2.exports;
      var hasRequiredEncUtf8;
      function requireEncUtf8() {
        if (hasRequiredEncUtf8) return encUtf8$2.exports;
        hasRequiredEncUtf8 = 1;
        (function(module, exports$12) {
          (function(root, factory) {
            {
              module.exports = factory(requireCore());
            }
          })(encUtf8$1, function(CryptoJS) {
            return CryptoJS.enc.Utf8;
          });
        })(encUtf8$2);
        return encUtf8$2.exports;
      }
      var encUtf8Exports = requireEncUtf8();
      const encUtf8 = /* @__PURE__ */ getDefaultExportFromCjs(encUtf8Exports);
      const __CJS__import__2__ = /* @__PURE__ */ _mergeNamespaces({
        __proto__: null,
        default: encUtf8
      }, [encUtf8Exports]);
      let AES;
      let ENC;
      {
        AES = aes || __CJS__import__1__$2;
        ENC = encUtf8 || __CJS__import__2__;
      }
      const CryptoController = {
        encrypt(obj, secretKey) {
          const encrypted = AES.encrypt(JSON.stringify(obj), secretKey);
          return encrypted.toString();
        },
        decrypt(encryptedText, secretKey) {
          const decryptedStr = AES.decrypt(encryptedText, secretKey).toString(ENC);
          return decryptedStr;
        }
      };
      function canBeSerialized(obj) {
        const ParseObject2 = CoreManager.getParseObject();
        if (!(obj instanceof ParseObject2)) {
          return true;
        }
        const attributes = obj.attributes;
        for (const attr in attributes) {
          const val = attributes[attr];
          if (!canBeSerializedHelper(val)) {
            return false;
          }
        }
        return true;
      }
      function canBeSerializedHelper(value) {
        if (typeof value !== "object") {
          return true;
        }
        if (value instanceof ParseRelation) {
          return true;
        }
        const ParseObject2 = CoreManager.getParseObject();
        if (value instanceof ParseObject2) {
          return !!value.id;
        }
        if (value instanceof ParseFile) {
          if (value.url()) {
            return true;
          }
          return false;
        }
        if (Array.isArray(value)) {
          for (let i2 = 0; i2 < value.length; i2++) {
            if (!canBeSerializedHelper(value[i2])) {
              return false;
            }
          }
          return true;
        }
        for (const k in value) {
          if (!canBeSerializedHelper(value[k])) {
            return false;
          }
        }
        return true;
      }
      const encoded = {
        "&": "&",
        "<": "<",
        ">": ">",
        "/": "/",
        "'": "'",
        '"': """
      };
      function escape$1(str) {
        return str.replace(/[&<>\/'"]/g, function(char) {
          return encoded[char];
        });
      }
      function parseDate(iso8601) {
        const regexp = new RegExp(
          "^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})T([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(.([0-9]+))?Z$"
        );
        const match = regexp.exec(iso8601);
        if (!match) {
          return null;
        }
        const year = parseInt(match[1]) || 0;
        const month = (parseInt(match[2]) || 1) - 1;
        const day = parseInt(match[3]) || 0;
        const hour = parseInt(match[4]) || 0;
        const minute = parseInt(match[5]) || 0;
        const second = parseInt(match[6]) || 0;
        const milli = parseInt(match[8]) || 0;
        return new Date(Date.UTC(year, month, day, hour, minute, second, milli));
      }
      function resolvingPromise() {
        let res;
        let rej;
        const promise = new Promise((resolve, reject) => {
          res = resolve;
          rej = reject;
        });
        const defer = promise;
        defer.resolve = res;
        defer.reject = rej;
        return defer;
      }
      function when(promises) {
        let objects;
        const arrayArgument = Array.isArray(promises);
        if (arrayArgument) {
          objects = promises;
        } else {
          objects = arguments;
        }
        let total = objects.length;
        let hadError = false;
        const results = [];
        const returnValue = arrayArgument ? [results] : results;
        const errors = [];
        results.length = objects.length;
        errors.length = objects.length;
        if (total === 0) {
          return Promise.resolve(returnValue);
        }
        const promise = resolvingPromise();
        const resolveOne = function() {
          total--;
          if (total <= 0) {
            if (hadError) {
              promise.reject(errors);
            } else {
              promise.resolve(returnValue);
            }
          }
        };
        const chain = function(object, index) {
          if (object && typeof object.then === "function") {
            object.then(
              function(result) {
                results[index] = result;
                resolveOne();
              },
              function(error) {
                errors[index] = error;
                hadError = true;
                resolveOne();
              }
            );
          } else {
            results[index] = object;
            resolveOne();
          }
        };
        for (let i2 = 0; i2 < objects.length; i2++) {
          chain(objects[i2], i2);
        }
        return promise;
      }
      function continueWhile(test, emitter) {
        if (test()) {
          return emitter().then(() => {
            return continueWhile(test, emitter);
          });
        }
        return Promise.resolve();
      }
      const DEFAULT_PIN = "_default";
      const PIN_PREFIX = "parsePin_";
      const OBJECT_PREFIX = "Parse_LDS_";
      function isLocalDatastoreKey(key2) {
        return !!(key2 && (key2 === DEFAULT_PIN || key2.startsWith(PIN_PREFIX) || key2.startsWith(OBJECT_PREFIX)));
      }
      requireCryptoBrowserify();
      let uuid;
      {
        uuid = () => globalThis.crypto.randomUUID();
      }
      const uuidv4 = uuid;
      function arrayContainsObject(array, object) {
        if (array.indexOf(object) > -1) {
          return true;
        }
        const ParseObject2 = CoreManager.getParseObject();
        for (let i2 = 0; i2 < array.length; i2++) {
          if (array[i2] instanceof ParseObject2 && array[i2].className === object.className && array[i2]._getId() === object._getId()) {
            return true;
          }
        }
        return false;
      }
      function unique(arr) {
        const uniques = [];
        arr.forEach((value) => {
          const ParseObject2 = CoreManager.getParseObject();
          if (value instanceof ParseObject2) {
            if (!arrayContainsObject(uniques, value)) {
              uniques.push(value);
            }
          } else {
            if (uniques.indexOf(value) < 0) {
              uniques.push(value);
            }
          }
        });
        return uniques;
      }
      function opFromJSON(json) {
        if (!json || !json.__op) {
          return null;
        }
        switch (json.__op) {
          case "Delete":
            return new UnsetOp();
          case "Increment":
            return new IncrementOp(json.amount);
          case "Add":
            return new AddOp(decode(json.objects));
          case "AddUnique":
            return new AddUniqueOp(decode(json.objects));
          case "Remove":
            return new RemoveOp(decode(json.objects));
          case "AddRelation": {
            const toAdd = decode(json.objects);
            if (!Array.isArray(toAdd)) {
              return new RelationOp([], []);
            }
            return new RelationOp(toAdd, []);
          }
          case "RemoveRelation": {
            const toRemove = decode(json.objects);
            if (!Array.isArray(toRemove)) {
              return new RelationOp([], []);
            }
            return new RelationOp([], toRemove);
          }
          case "Batch": {
            let toAdd = [];
            let toRemove = [];
            for (let i2 = 0; i2 < json.ops.length; i2++) {
              if (json.ops[i2].__op === "AddRelation") {
                toAdd = toAdd.concat(decode(json.ops[i2].objects));
              } else if (json.ops[i2].__op === "RemoveRelation") {
                toRemove = toRemove.concat(decode(json.ops[i2].objects));
              }
            }
            return new RelationOp(toAdd, toRemove);
          }
        }
        return null;
      }
      class Op {
        // Empty parent class
        applyTo(value) {
        }
        /* eslint-disable-line @typescript-eslint/no-unused-vars */
        mergeWith(previous) {
        }
        /* eslint-disable-line */
        toJSON(offline) {
        }
        /* eslint-disable-line @typescript-eslint/no-unused-vars */
      }
      class SetOp extends Op {
        constructor(value) {
          super();
          this._value = value;
        }
        applyTo() {
          return this._value;
        }
        mergeWith() {
          return new SetOp(this._value);
        }
        toJSON(offline) {
          return encode$1(this._value, false, true, void 0, offline);
        }
      }
      class UnsetOp extends Op {
        applyTo() {
          return void 0;
        }
        mergeWith() {
          return new UnsetOp();
        }
        toJSON() {
          return { __op: "Delete" };
        }
      }
      class IncrementOp extends Op {
        constructor(amount) {
          super();
          if (typeof amount !== "number") {
            throw new TypeError("Increment Op must be initialized with a numeric amount.");
          }
          this._amount = amount;
        }
        applyTo(value) {
          if (typeof value === "undefined") {
            return this._amount;
          }
          if (typeof value !== "number") {
            throw new TypeError("Cannot increment a non-numeric value.");
          }
          return this._amount + value;
        }
        mergeWith(previous) {
          if (!previous) {
            return this;
          }
          if (previous instanceof SetOp) {
            return new SetOp(this.applyTo(previous._value));
          }
          if (previous instanceof UnsetOp) {
            return new SetOp(this._amount);
          }
          if (previous instanceof IncrementOp) {
            return new IncrementOp(this.applyTo(previous._amount));
          }
          throw new Error("Cannot merge Increment Op with the previous Op");
        }
        toJSON() {
          return { __op: "Increment", amount: this._amount };
        }
      }
      class AddOp extends Op {
        constructor(value) {
          super();
          this._value = Array.isArray(value) ? value : [value];
        }
        applyTo(value) {
          if (value == null) {
            return this._value;
          }
          if (Array.isArray(value)) {
            return value.concat(this._value);
          }
          throw new Error("Cannot add elements to a non-array value");
        }
        mergeWith(previous) {
          if (!previous) {
            return this;
          }
          if (previous instanceof SetOp) {
            return new SetOp(this.applyTo(previous._value));
          }
          if (previous instanceof UnsetOp) {
            return new SetOp(this._value);
          }
          if (previous instanceof AddOp) {
            return new AddOp(this.applyTo(previous._value));
          }
          throw new Error("Cannot merge Add Op with the previous Op");
        }
        toJSON() {
          return { __op: "Add", objects: encode$1(this._value, false, true) };
        }
      }
      class AddUniqueOp extends Op {
        constructor(value) {
          super();
          this._value = unique(Array.isArray(value) ? value : [value]);
        }
        applyTo(value) {
          if (value == null) {
            return this._value || [];
          }
          if (Array.isArray(value)) {
            const ParseObject2 = CoreManager.getParseObject();
            const toAdd = [];
            this._value.forEach((v) => {
              if (v instanceof ParseObject2) {
                if (!arrayContainsObject(value, v)) {
                  toAdd.push(v);
                }
              } else {
                if (value.indexOf(v) < 0) {
                  toAdd.push(v);
                }
              }
            });
            return value.concat(toAdd);
          }
          throw new Error("Cannot add elements to a non-array value");
        }
        mergeWith(previous) {
          if (!previous) {
            return this;
          }
          if (previous instanceof SetOp) {
            return new SetOp(this.applyTo(previous._value));
          }
          if (previous instanceof UnsetOp) {
            return new SetOp(this._value);
          }
          if (previous instanceof AddUniqueOp) {
            return new AddUniqueOp(this.applyTo(previous._value));
          }
          throw new Error("Cannot merge AddUnique Op with the previous Op");
        }
        toJSON() {
          return { __op: "AddUnique", objects: encode$1(this._value, false, true) };
        }
      }
      class RemoveOp extends Op {
        constructor(value) {
          super();
          this._value = unique(Array.isArray(value) ? value : [value]);
        }
        applyTo(value) {
          if (value == null) {
            return [];
          }
          if (Array.isArray(value)) {
            const ParseObject2 = CoreManager.getParseObject();
            const removed = value.concat([]);
            for (let i2 = 0; i2 < this._value.length; i2++) {
              let index = removed.indexOf(this._value[i2]);
              while (index > -1) {
                removed.splice(index, 1);
                index = removed.indexOf(this._value[i2]);
              }
              if (this._value[i2] instanceof ParseObject2 && this._value[i2].id) {
                for (let j = 0; j < removed.length; j++) {
                  if (removed[j] instanceof ParseObject2 && this._value[i2].id === removed[j].id) {
                    removed.splice(j, 1);
                    j--;
                  }
                }
              }
            }
            return removed;
          }
          throw new Error("Cannot remove elements from a non-array value");
        }
        mergeWith(previous) {
          if (!previous) {
            return this;
          }
          if (previous instanceof SetOp) {
            return new SetOp(this.applyTo(previous._value));
          }
          if (previous instanceof UnsetOp) {
            return new UnsetOp();
          }
          if (previous instanceof RemoveOp) {
            const ParseObject2 = CoreManager.getParseObject();
            const uniques = previous._value.concat([]);
            for (let i2 = 0; i2 < this._value.length; i2++) {
              if (this._value[i2] instanceof ParseObject2) {
                if (!arrayContainsObject(uniques, this._value[i2])) {
                  uniques.push(this._value[i2]);
                }
              } else {
                if (uniques.indexOf(this._value[i2]) < 0) {
                  uniques.push(this._value[i2]);
                }
              }
            }
            return new RemoveOp(uniques);
          }
          throw new Error("Cannot merge Remove Op with the previous Op");
        }
        toJSON() {
          return { __op: "Remove", objects: encode$1(this._value, false, true) };
        }
      }
      class RelationOp extends Op {
        constructor(adds, removes) {
          super();
          this._targetClassName = null;
          if (Array.isArray(adds)) {
            this.relationsToAdd = unique(adds.map(this._extractId, this));
          }
          if (Array.isArray(removes)) {
            this.relationsToRemove = unique(removes.map(this._extractId, this));
          }
        }
        _extractId(obj) {
          if (typeof obj === "string") {
            return obj;
          }
          if (!obj.id) {
            throw new Error("You cannot add or remove an unsaved Parse Object from a relation");
          }
          if (!this._targetClassName) {
            this._targetClassName = obj.className;
          }
          if (this._targetClassName !== obj.className) {
            throw new Error(
              "Tried to create a Relation with 2 different object types: " + this._targetClassName + " and " + obj.className + "."
            );
          }
          return obj.id;
        }
        applyTo(value, parent, key2) {
          if (!value) {
            if (!parent || !key2) {
              throw new Error(
                "Cannot apply a RelationOp without either a previous value, or an object and a key"
              );
            }
            const relation = new ParseRelation(parent, key2);
            relation.targetClassName = this._targetClassName;
            return relation;
          }
          if (value instanceof ParseRelation) {
            if (this._targetClassName) {
              if (value.targetClassName) {
                if (this._targetClassName !== value.targetClassName) {
                  throw new Error(
                    "Related object must be a " + value.targetClassName + ", but a " + this._targetClassName + " was passed in."
                  );
                }
              } else {
                value.targetClassName = this._targetClassName;
              }
            }
            return value;
          } else {
            throw new Error("Relation cannot be applied to a non-relation field");
          }
        }
        mergeWith(previous) {
          if (!previous) {
            return this;
          } else if (previous instanceof UnsetOp) {
            throw new Error("You cannot modify a relation after deleting it.");
          } else if (previous instanceof SetOp && previous._value instanceof ParseRelation) {
            return this;
          } else if (previous instanceof RelationOp) {
            if (previous._targetClassName && previous._targetClassName !== this._targetClassName) {
              throw new Error(
                "Related object must be of class " + previous._targetClassName + ", but " + (this._targetClassName || "null") + " was passed in."
              );
            }
            const newAdd = previous.relationsToAdd.concat([]);
            this.relationsToRemove.forEach((r) => {
              const index = newAdd.indexOf(r);
              if (index > -1) {
                newAdd.splice(index, 1);
              }
            });
            this.relationsToAdd.forEach((r) => {
              const index = newAdd.indexOf(r);
              if (index < 0) {
                newAdd.push(r);
              }
            });
            const newRemove = previous.relationsToRemove.concat([]);
            this.relationsToAdd.forEach((r) => {
              const index = newRemove.indexOf(r);
              if (index > -1) {
                newRemove.splice(index, 1);
              }
            });
            this.relationsToRemove.forEach((r) => {
              const index = newRemove.indexOf(r);
              if (index < 0) {
                newRemove.push(r);
              }
            });
            const newRelation = new RelationOp(newAdd, newRemove);
            newRelation._targetClassName = this._targetClassName;
            return newRelation;
          }
          throw new Error("Cannot merge Relation Op with the previous Op");
        }
        toJSON() {
          const idToPointer = (id) => {
            return {
              __type: "Pointer",
              className: this._targetClassName,
              objectId: id
            };
          };
          let pointers = null;
          let adds = null;
          let removes = null;
          if (this.relationsToAdd.length > 0) {
            pointers = this.relationsToAdd.map(idToPointer);
            adds = { __op: "AddRelation", objects: pointers };
          }
          if (this.relationsToRemove.length > 0) {
            pointers = this.relationsToRemove.map(idToPointer);
            removes = { __op: "RemoveRelation", objects: pointers };
          }
          if (adds && removes) {
            return { __op: "Batch", ops: [adds, removes] };
          }
          return adds || removes || {};
        }
      }
      CoreManager.setParseOp({
        Op,
        opFromJSON,
        SetOp,
        UnsetOp,
        IncrementOp,
        AddOp,
        RelationOp,
        RemoveOp,
        AddUniqueOp
      });
      class TaskQueue {
        constructor() {
          this.queue = [];
        }
        enqueue(task) {
          const taskComplete = resolvingPromise();
          this.queue.push({
            task,
            _completion: taskComplete
          });
          if (this.queue.length === 1) {
            task().then(
              () => {
                this._dequeue();
                taskComplete.resolve();
              },
              (error) => {
                this._dequeue();
                taskComplete.reject(error);
              }
            );
          }
          return taskComplete;
        }
        _dequeue() {
          this.queue.shift();
          if (this.queue.length) {
            const next = this.queue[0];
            next.task().then(
              () => {
                this._dequeue();
                next._completion.resolve();
              },
              (error) => {
                this._dequeue();
                next._completion.reject(error);
              }
            );
          }
        }
      }
      function defaultState() {
        return {
          serverData: /* @__PURE__ */ Object.create(null),
          pendingOps: [/* @__PURE__ */ Object.create(null)],
          objectCache: /* @__PURE__ */ Object.create(null),
          tasks: new TaskQueue(),
          existed: false
        };
      }
      function setServerData$2(serverData, attributes) {
        for (const attr in attributes) {
          if (!Object.prototype.hasOwnProperty.call(attributes, attr)) {
            continue;
          }
          if (isDangerousKey(attr)) {
            continue;
          }
          if (typeof attributes[attr] !== "undefined") {
            serverData[attr] = attributes[attr];
          } else {
            delete serverData[attr];
          }
        }
      }
      function setPendingOp$2(pendingOps, attr, op) {
        if (isDangerousKey(attr)) {
          return;
        }
        const last = pendingOps.length - 1;
        if (op) {
          pendingOps[last][attr] = op;
        } else {
          delete pendingOps[last][attr];
        }
      }
      function pushPendingState$2(pendingOps) {
        pendingOps.push(/* @__PURE__ */ Object.create(null));
      }
      function popPendingState$2(pendingOps) {
        const first = pendingOps.shift();
        if (!pendingOps.length) {
          pendingOps[0] = /* @__PURE__ */ Object.create(null);
        }
        return first;
      }
      function mergeFirstPendingState$2(pendingOps) {
        const first = popPendingState$2(pendingOps);
        const next = pendingOps[0];
        for (const attr in first) {
          if (!Object.prototype.hasOwnProperty.call(first, attr)) {
            continue;
          }
          if (isDangerousKey(attr)) {
            continue;
          }
          if (next[attr] && first[attr]) {
            const merged = next[attr].mergeWith(first[attr]);
            if (merged) {
              next[attr] = merged;
            }
          } else {
            next[attr] = first[attr];
          }
        }
      }
      function estimateAttribute$2(serverData, pendingOps, object, attr) {
        if (isDangerousKey(attr)) {
          return void 0;
        }
        let value = serverData[attr];
        for (let i2 = 0; i2 < pendingOps.length; i2++) {
          if (pendingOps[i2][attr]) {
            if (pendingOps[i2][attr] instanceof RelationOp) {
              if (object.id) {
                value = pendingOps[i2][attr].applyTo(value, object, attr);
              }
            } else {
              value = pendingOps[i2][attr].applyTo(value);
            }
          }
        }
        return value;
      }
      function estimateAttributes$2(serverData, pendingOps, object) {
        const data = /* @__PURE__ */ Object.create(null);
        let attr;
        for (attr in serverData) {
          data[attr] = serverData[attr];
        }
        for (let i2 = 0; i2 < pendingOps.length; i2++) {
          for (attr in pendingOps[i2]) {
            if (!Object.prototype.hasOwnProperty.call(pendingOps[i2], attr)) {
              continue;
            }
            if (isDangerousKey(attr)) {
              continue;
            }
            if (pendingOps[i2][attr] instanceof RelationOp) {
              if (object.id) {
                data[attr] = pendingOps[i2][attr].applyTo(data[attr], object, attr);
              }
            } else {
              if (attr.includes(".")) {
                const fields = attr.split(".");
                const last = fields[fields.length - 1];
                let object2 = data;
                for (let i22 = 0; i22 < fields.length - 1; i22++) {
                  const key2 = fields[i22];
                  if (!(key2 in object2)) {
                    const nextKey = fields[i22 + 1];
                    if (!isNaN(nextKey)) {
                      object2[key2] = [];
                    } else {
                      object2[key2] = /* @__PURE__ */ Object.create(null);
                    }
                  } else {
                    if (Array.isArray(object2[key2])) {
                      object2[key2] = [...object2[key2]];
                    } else {
                      object2[key2] = { ...object2[key2] };
                    }
                  }
                  object2 = object2[key2];
                }
                object2[last] = pendingOps[i2][attr].applyTo(object2[last]);
              } else {
                data[attr] = pendingOps[i2][attr].applyTo(data[attr]);
              }
            }
          }
        }
        return data;
      }
      function nestedSet(obj, key2, value) {
        const paths = key2.split(".");
        for (let i2 = 0; i2 < paths.length - 1; i2++) {
          const path = paths[i2];
          if (!(path in obj)) {
            const nextPath = paths[i2 + 1];
            if (!isNaN(nextPath)) {
              obj[path] = [];
            } else {
              obj[path] = /* @__PURE__ */ Object.create(null);
            }
          }
          obj = obj[path];
        }
        if (typeof value === "undefined") {
          delete obj[paths[paths.length - 1]];
        } else {
          obj[paths[paths.length - 1]] = value;
        }
      }
      function commitServerChanges$2(serverData, objectCache, changes) {
        const ParseObject2 = CoreManager.getParseObject();
        for (const attr in changes) {
          if (!Object.prototype.hasOwnProperty.call(changes, attr)) {
            continue;
          }
          if (isDangerousKey(attr)) {
            continue;
          }
          const val = changes[attr];
          nestedSet(serverData, attr, val);
          if (val && typeof val === "object" && !(val instanceof ParseObject2) && !(val instanceof ParseFile) && !(val instanceof ParseRelation)) {
            const json = encode$1(val, false, true);
            objectCache[attr] = JSON.stringify(json);
          }
        }
      }
      let objectState$1 = /* @__PURE__ */ Object.create(null);
      function getState$1(obj) {
        const classData = objectState$1[obj.className];
        if (classData) {
          return classData[obj.id] || null;
        }
        return null;
      }
      function initializeState$1(obj, initial) {
        let state2 = getState$1(obj);
        if (state2) {
          return state2;
        }
        if (!objectState$1[obj.className]) {
          objectState$1[obj.className] = /* @__PURE__ */ Object.create(null);
        }
        if (!initial) {
          initial = defaultState();
        }
        state2 = objectState$1[obj.className][obj.id] = initial;
        return state2;
      }
      function removeState$1(obj) {
        const state2 = getState$1(obj);
        if (state2 === null) {
          return null;
        }
        delete objectState$1[obj.className][obj.id];
        return state2;
      }
      function getServerData$1(obj) {
        const state2 = getState$1(obj);
        if (state2) {
          return state2.serverData;
        }
        return {};
      }
      function setServerData$1(obj, attributes) {
        const serverData = initializeState$1(obj).serverData;
        setServerData$2(serverData, attributes);
      }
      function getPendingOps$1(obj) {
        const state2 = getState$1(obj);
        if (state2) {
          return state2.pendingOps;
        }
        return [{}];
      }
      function setPendingOp$1(obj, attr, op) {
        const pendingOps = initializeState$1(obj).pendingOps;
        setPendingOp$2(pendingOps, attr, op);
      }
      function pushPendingState$1(obj) {
        const pendingOps = initializeState$1(obj).pendingOps;
        pushPendingState$2(pendingOps);
      }
      function popPendingState$1(obj) {
        const pendingOps = initializeState$1(obj).pendingOps;
        return popPendingState$2(pendingOps);
      }
      function mergeFirstPendingState$1(obj) {
        const pendingOps = getPendingOps$1(obj);
        mergeFirstPendingState$2(pendingOps);
      }
      function getObjectCache$1(obj) {
        const state2 = getState$1(obj);
        if (state2) {
          return state2.objectCache;
        }
        return {};
      }
      function estimateAttribute$1(obj, attr) {
        const serverData = getServerData$1(obj);
        const pendingOps = getPendingOps$1(obj);
        return estimateAttribute$2(
          serverData,
          pendingOps,
          obj,
          attr
        );
      }
      function estimateAttributes$1(obj) {
        const serverData = getServerData$1(obj);
        const pendingOps = getPendingOps$1(obj);
        return estimateAttributes$2(serverData, pendingOps, obj);
      }
      function commitServerChanges$1(obj, changes) {
        const state2 = initializeState$1(obj);
        commitServerChanges$2(
          state2.serverData,
          state2.objectCache,
          changes
        );
      }
      function enqueueTask$1(obj, task) {
        const state2 = initializeState$1(obj);
        return state2.tasks.enqueue(task);
      }
      function clearAllState$1() {
        objectState$1 = /* @__PURE__ */ Object.create(null);
      }
      function duplicateState$1(source, dest) {
        dest.id = source.id;
      }
      const SingleInstanceStateController = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
        __proto__: null,
        clearAllState: clearAllState$1,
        commitServerChanges: commitServerChanges$1,
        duplicateState: duplicateState$1,
        enqueueTask: enqueueTask$1,
        estimateAttribute: estimateAttribute$1,
        estimateAttributes: estimateAttributes$1,
        getObjectCache: getObjectCache$1,
        getPendingOps: getPendingOps$1,
        getServerData: getServerData$1,
        getState: getState$1,
        initializeState: initializeState$1,
        mergeFirstPendingState: mergeFirstPendingState$1,
        popPendingState: popPendingState$1,
        pushPendingState: pushPendingState$1,
        removeState: removeState$1,
        setPendingOp: setPendingOp$1,
        setServerData: setServerData$1
      }, Symbol.toStringTag, { value: "Module" }));
      let objectState = /* @__PURE__ */ new WeakMap();
      function getState(obj) {
        const classData = objectState.get(obj);
        return classData || null;
      }
      function initializeState(obj, initial) {
        let state2 = getState(obj);
        if (state2) {
          return state2;
        }
        if (!initial) {
          initial = {
            serverData: {},
            pendingOps: [{}],
            objectCache: {},
            tasks: new TaskQueue(),
            existed: false
          };
        }
        state2 = initial;
        objectState.set(obj, state2);
        return state2;
      }
      function removeState(obj) {
        const state2 = getState(obj);
        if (state2 === null) {
          return null;
        }
        objectState.delete(obj);
        return state2;
      }
      function getServerData(obj) {
        const state2 = getState(obj);
        if (state2) {
          return state2.serverData;
        }
        return {};
      }
      function setServerData(obj, attributes) {
        const serverData = initializeState(obj).serverData;
        setServerData$2(serverData, attributes);
      }
      function getPendingOps(obj) {
        const state2 = getState(obj);
        if (state2) {
          return state2.pendingOps;
        }
        return [{}];
      }
      function setPendingOp(obj, attr, op) {
        const pendingOps = initializeState(obj).pendingOps;
        setPendingOp$2(pendingOps, attr, op);
      }
      function pushPendingState(obj) {
        const pendingOps = initializeState(obj).pendingOps;
        pushPendingState$2(pendingOps);
      }
      function popPendingState(obj) {
        const pendingOps = initializeState(obj).pendingOps;
        return popPendingState$2(pendingOps);
      }
      function mergeFirstPendingState(obj) {
        const pendingOps = getPendingOps(obj);
        mergeFirstPendingState$2(pendingOps);
      }
      function getObjectCache(obj) {
        const state2 = getState(obj);
        if (state2) {
          return state2.objectCache;
        }
        return {};
      }
      function estimateAttribute(obj, attr) {
        const serverData = getServerData(obj);
        const pendingOps = getPendingOps(obj);
        return estimateAttribute$2(serverData, pendingOps, obj, attr);
      }
      function estimateAttributes(obj) {
        const serverData = getServerData(obj);
        const pendingOps = getPendingOps(obj);
        return estimateAttributes$2(serverData, pendingOps, obj);
      }
      function commitServerChanges(obj, changes) {
        const state2 = initializeState(obj);
        commitServerChanges$2(state2.serverData, state2.objectCache, changes);
      }
      function enqueueTask(obj, task) {
        const state2 = initializeState(obj);
        return state2.tasks.enqueue(task);
      }
      function duplicateState(source, dest) {
        const oldState = initializeState(source);
        const newState = initializeState(dest);
        for (const key2 in oldState.serverData) {
          newState.serverData[key2] = oldState.serverData[key2];
        }
        for (let index = 0; index < oldState.pendingOps.length; index++) {
          for (const key2 in oldState.pendingOps[index]) {
            newState.pendingOps[index][key2] = oldState.pendingOps[index][key2];
          }
        }
        for (const key2 in oldState.objectCache) {
          newState.objectCache[key2] = oldState.objectCache[key2];
        }
        newState.existed = oldState.existed;
      }
      function clearAllState() {
        objectState = /* @__PURE__ */ new WeakMap();
      }
      const UniqueInstanceStateController = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
        __proto__: null,
        clearAllState,
        commitServerChanges,
        duplicateState,
        enqueueTask,
        estimateAttribute,
        estimateAttributes,
        getObjectCache,
        getPendingOps,
        getServerData,
        getState,
        initializeState,
        mergeFirstPendingState,
        popPendingState,
        pushPendingState,
        removeState,
        setPendingOp,
        setServerData
      }, Symbol.toStringTag, { value: "Module" }));
      function unsavedChildren(obj, allowDeepUnsaved) {
        const encountered = {
          objects: {},
          files: []
        };
        const identifier = obj.className + ":" + obj._getId();
        encountered.objects[identifier] = obj.dirty() ? obj : true;
        const attributes = obj.attributes;
        for (const attr in attributes) {
          if (typeof attributes[attr] === "object") {
            traverse(attributes[attr], encountered, false, !!allowDeepUnsaved);
          }
        }
        const unsaved = [];
        for (const id in encountered.objects) {
          if (id !== identifier && encountered.objects[id] !== true) {
            unsaved.push(encountered.objects[id]);
          }
        }
        return unsaved.concat(encountered.files);
      }
      function traverse(obj, encountered, shouldThrow, allowDeepUnsaved) {
        const ParseObject2 = CoreManager.getParseObject();
        if (obj instanceof ParseObject2) {
          if (!obj.id && shouldThrow) {
            throw new Error("Cannot create a pointer to an unsaved Object.");
          }
          const identifier = obj.className + ":" + obj._getId();
          if (!encountered.objects[identifier]) {
            encountered.objects[identifier] = obj.dirty() ? obj : true;
            const attributes = obj.attributes;
            for (const attr in attributes) {
              if (typeof attributes[attr] === "object") {
                traverse(attributes[attr], encountered, !allowDeepUnsaved, allowDeepUnsaved);
              }
            }
          }
          return;
        }
        if (obj instanceof ParseFile) {
          if (!obj.url() && encountered.files.indexOf(obj) < 0) {
            encountered.files.push(obj);
          }
          return;
        }
        if (obj instanceof ParseRelation) {
          return;
        }
        if (Array.isArray(obj)) {
          obj.forEach((el) => {
            if (typeof el === "object") {
              traverse(el, encountered, shouldThrow, allowDeepUnsaved);
            }
          });
        }
        for (const k in obj) {
          if (typeof obj[k] === "object") {
            traverse(obj[k], encountered, shouldThrow, allowDeepUnsaved);
          }
        }
      }
      const classMap = /* @__PURE__ */ Object.create(null);
      let objectCount = 0;
      let singleInstance = !CoreManager.get("IS_NODE");
      if (singleInstance) {
        CoreManager.setObjectStateController(SingleInstanceStateController);
      } else {
        CoreManager.setObjectStateController(UniqueInstanceStateController);
      }
      function getServerUrlPath() {
        let serverUrl = CoreManager.get("SERVER_URL");
        if (serverUrl[serverUrl.length - 1] !== "/") {
          serverUrl += "/";
        }
        const url = serverUrl.replace(/https?:\/\//, "");
        return url.substr(url.indexOf("/"));
      }
      class ParseObject {
        /**
         * @param {string} className The class name for the object
         * @param {object} attributes The initial set of data to store in the object.
         * @param {object} options The options for this object instance.
         * @param {boolean} [options.ignoreValidation] Set to `true` ignore any attribute validation errors.
         */
        constructor(className, attributes, options) {
          if (typeof this.initialize === "function") {
            this.initialize.apply(this, arguments);
          }
          let toSet = null;
          this._objCount = objectCount++;
          if (typeof className === "string") {
            this.className = className;
            if (attributes && typeof attributes === "object") {
              toSet = attributes;
            }
          } else if (className && typeof className === "object") {
            this.className = className.className;
            toSet = {};
            for (const attr in className) {
              if (attr !== "className") {
                toSet[attr] = className[attr];
              }
            }
            if (attributes && typeof attributes === "object") {
              options = attributes;
            }
          }
          if (toSet) {
            try {
              this.set(toSet, options);
            } catch (_) {
              throw new Error("Can't create an invalid Parse Object");
            }
          }
          if (CoreManager.get("NODE_LOGGING")) {
            this[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = function() {
              return `ParseObject: className: ${this.className}, id: ${this.id}
    Attributes: ${JSON.stringify(this.attributes, null, 2)}`;
            };
          }
        }
        /* Prototype getters / setters */
        get attributes() {
          const stateController = CoreManager.getObjectStateController();
          return Object.freeze(stateController.estimateAttributes(this._getStateIdentifier()));
        }
        /**
         * The first time this object was saved on the server.
         *
         * @property {Date} createdAt
         * @returns {Date}
         */
        get createdAt() {
          return this._getServerData().createdAt;
        }
        /**
         * The last time this object was updated on the server.
         *
         * @property {Date} updatedAt
         * @returns {Date}
         */
        get updatedAt() {
          return this._getServerData().updatedAt;
        }
        /* Private methods */
        /**
         * Returns a local or server Id used uniquely identify this object
         *
         * @returns {string}
         */
        _getId() {
          if (typeof this.id === "string") {
            return this.id;
          }
          if (typeof this._localId === "string") {
            return this._localId;
          }
          const localId = "local" + uuidv4();
          this._localId = localId;
          return localId;
        }
        /**
         * Returns a unique identifier used to pull data from the State Controller.
         *
         * @returns {Parse.Object|object}
         */
        _getStateIdentifier() {
          if (singleInstance) {
            let id = this.id;
            if (!id) {
              id = this._getId();
            }
            return {
              id,
              className: this.className
            };
          } else {
            return this;
          }
        }
        _getServerData() {
          const stateController = CoreManager.getObjectStateController();
          return stateController.getServerData(this._getStateIdentifier());
        }
        _clearServerData() {
          const serverData = this._getServerData();
          const unset = {};
          for (const attr in serverData) {
            unset[attr] = void 0;
          }
          const stateController = CoreManager.getObjectStateController();
          stateController.setServerData(this._getStateIdentifier(), unset);
        }
        _getPendingOps() {
          const stateController = CoreManager.getObjectStateController();
          return stateController.getPendingOps(this._getStateIdentifier());
        }
        /**
         * @param {Array} [keysToClear] - if specified, only ops matching
         * these fields will be cleared
         */
        _clearPendingOps(keysToClear) {
          const pending = this._getPendingOps();
          const latest = pending[pending.length - 1];
          const keys2 = keysToClear || Object.keys(latest);
          keys2.forEach((key2) => {
            delete latest[key2];
          });
        }
        _getDirtyObjectAttributes() {
          const attributes = this.attributes;
          const stateController = CoreManager.getObjectStateController();
          const objectCache = stateController.getObjectCache(this._getStateIdentifier());
          const dirty = {};
          for (const attr in attributes) {
            const val = attributes[attr];
            if (val && typeof val === "object" && !(val instanceof ParseObject) && !(val instanceof ParseFile) && !(val instanceof ParseRelation)) {
              try {
                const json = encode$1(val, false, true);
                const stringified = JSON.stringify(json);
                if (objectCache[attr] !== stringified) {
                  dirty[attr] = val;
                }
              } catch (_) {
                dirty[attr] = val;
              }
            }
          }
          return dirty;
        }
        _toFullJSON(seen, offline) {
          const json = this.toJSON(seen, offline);
          json.__type = "Object";
          json.className = this.className;
          return json;
        }
        _getSaveJSON() {
          const pending = this._getPendingOps();
          const dirtyObjects = this._getDirtyObjectAttributes();
          const json = {};
          let attr;
          for (attr in dirtyObjects) {
            let isDotNotation = false;
            for (let i2 = 0; i2 < pending.length; i2 += 1) {
              for (const field in pending[i2]) {
                if (field.includes(".")) {
                  const fieldName = field.split(".")[0];
                  if (fieldName === attr) {
                    isDotNotation = true;
                    break;
                  }
                }
              }
            }
            if (!isDotNotation) {
              json[attr] = new SetOp(dirtyObjects[attr]).toJSON();
            }
          }
          for (attr in pending[0]) {
            json[attr] = pending[0][attr].toJSON();
          }
          return json;
        }
        _getSaveParams() {
          let method = this.id ? "PUT" : "POST";
          const body = this._getSaveJSON();
          let path = "classes/" + this.className;
          if (CoreManager.get("ALLOW_CUSTOM_OBJECT_ID")) {
            if (!this.createdAt) {
              method = "POST";
              body.objectId = this.id;
            } else {
              method = "PUT";
              path += "/" + this.id;
            }
          } else if (this.id) {
            path += "/" + this.id;
          } else if (this.className === "_User") {
            path = "users";
          }
          return {
            method,
            body,
            path
          };
        }
        _finishFetch(serverData) {
          if (!this.id && serverData.objectId) {
            this.id = serverData.objectId;
          }
          const stateController = CoreManager.getObjectStateController();
          stateController.initializeState(this._getStateIdentifier());
          const decoded = {};
          for (const attr in serverData) {
            if (attr === "ACL") {
              decoded[attr] = new ParseACL(serverData[attr]);
            } else if (attr !== "objectId") {
              decoded[attr] = decode(serverData[attr]);
              if (decoded[attr] instanceof ParseRelation) {
                decoded[attr]._ensureParentAndKey(this, attr);
              }
            }
          }
          if (decoded.createdAt && typeof decoded.createdAt === "string") {
            decoded.createdAt = parseDate(decoded.createdAt);
          }
          if (decoded.updatedAt && typeof decoded.updatedAt === "string") {
            decoded.updatedAt = parseDate(decoded.updatedAt);
          }
          if (!decoded.updatedAt && decoded.createdAt) {
            decoded.updatedAt = decoded.createdAt;
          }
          stateController.commitServerChanges(this._getStateIdentifier(), decoded);
        }
        _setExisted(existed) {
          const stateController = CoreManager.getObjectStateController();
          const state2 = stateController.getState(this._getStateIdentifier());
          if (state2) {
            state2.existed = existed;
          }
        }
        _migrateId(serverId) {
          if (this._localId && serverId) {
            if (singleInstance) {
              const stateController = CoreManager.getObjectStateController();
              const oldState = stateController.removeState(this._getStateIdentifier());
              this.id = serverId;
              delete this._localId;
              if (oldState) {
                stateController.initializeState(this._getStateIdentifier(), oldState);
              }
            } else {
              this.id = serverId;
              delete this._localId;
            }
          }
        }
        _handleSaveResponse(response, status) {
          const changes = {};
          let attr;
          const stateController = CoreManager.getObjectStateController();
          const pending = stateController.popPendingState(this._getStateIdentifier());
          for (attr in pending) {
            if (pending[attr] instanceof RelationOp) {
              changes[attr] = pending[attr].applyTo(void 0, this, attr);
            } else if (!(attr in response)) {
              changes[attr] = pending[attr].applyTo(void 0);
            }
          }
          for (attr in response) {
            if ((attr === "createdAt" || attr === "updatedAt") && typeof response[attr] === "string") {
              changes[attr] = parseDate(response[attr]);
            } else if (attr === "ACL") {
              changes[attr] = new ParseACL(response[attr]);
            } else if (attr !== "objectId") {
              const val = decode(response[attr]);
              if (val && Object.getPrototypeOf(val) === Object.prototype) {
                changes[attr] = { ...this.attributes[attr], ...val };
              } else {
                changes[attr] = val;
              }
              if (changes[attr] instanceof UnsetOp) {
                changes[attr] = void 0;
              }
            }
          }
          if (changes.createdAt && !changes.updatedAt) {
            changes.updatedAt = changes.createdAt;
          }
          this._migrateId(response.objectId);
          if (status !== 201) {
            this._setExisted(true);
          }
          stateController.commitServerChanges(this._getStateIdentifier(), changes);
        }
        _handleSaveError() {
          const stateController = CoreManager.getObjectStateController();
          stateController.mergeFirstPendingState(this._getStateIdentifier());
        }
        static _getClassMap() {
          return classMap;
        }
        static _getRequestOptions(options = {}) {
          const requestOptions = {};
          if (Object.prototype.toString.call(options) !== "[object Object]") {
            throw new Error("request options must be of type Object");
          }
          const { hasOwn } = Object;
          if (hasOwn(options, "useMasterKey")) {
            requestOptions.useMasterKey = !!options.useMasterKey;
          }
          if (hasOwn(options, "useMaintenanceKey")) {
            requestOptions.useMaintenanceKey = !!options.useMaintenanceKey;
          }
          if (hasOwn(options, "sessionToken") && typeof options.sessionToken === "string") {
            requestOptions.sessionToken = options.sessionToken;
          }
          if (hasOwn(options, "installationId") && typeof options.installationId === "string") {
            requestOptions.installationId = options.installationId;
          }
          if (hasOwn(options, "transaction") && typeof options.transaction === "boolean") {
            requestOptions.transaction = options.transaction;
          }
          if (hasOwn(options, "batchSize") && typeof options.batchSize === "number") {
            requestOptions.batchSize = options.batchSize;
          }
          if (hasOwn(options, "context") && typeof options.context === "object") {
            requestOptions.context = options.context;
          }
          if (hasOwn(options, "include")) {
            requestOptions.include = ParseObject.handleIncludeOptions(options);
          }
          if (hasOwn(options, "usePost")) {
            requestOptions.usePost = options.usePost;
          }
          if (hasOwn(options, "json")) {
            requestOptions.json = options.json;
          }
          return requestOptions;
        }
        /* Public methods */
        initialize() {
        }
        /**
         * Returns a JSON version of the object suitable for saving to Parse.
         *
         * @param seen
         * @param offline
         * @returns {object}
         */
        toJSON(seen, offline) {
          const seenEntry = this.id ? this.className + ":" + this.id : this;
          seen = seen || [seenEntry];
          const json = {};
          const attrs = this.attributes;
          for (const attr in attrs) {
            if ((attr === "createdAt" || attr === "updatedAt") && attrs[attr].toJSON) {
              json[attr] = attrs[attr].toJSON();
            } else {
              json[attr] = encode$1(attrs[attr], false, false, seen, offline);
            }
          }
          const pending = this._getPendingOps();
          for (const attr in pending[0]) {
            if (attr.indexOf(".") < 0) {
              json[attr] = pending[0][attr].toJSON(offline);
            }
          }
          if (this.id) {
            json.objectId = this.id;
          }
          return json;
        }
        /**
         * Determines whether this ParseObject is equal to another ParseObject
         *
         * @param {object} other - An other object ot compare
         * @returns {boolean}
         */
        equals(other) {
          if (this === other) {
            return true;
          }
          return other instanceof ParseObject && this.className === other.className && this.id === other.id && typeof this.id !== "undefined";
        }
        /**
         * Returns true if this object has been modified since its last
         * save/refresh.  If an attribute is specified, it returns true only if that
         * particular attribute has been modified since the last save/refresh.
         *
         * @param {string} attr An attribute name (optional).
         * @returns {boolean}
         */
        dirty(attr) {
          if (!this.id) {
            return true;
          }
          const pendingOps = this._getPendingOps();
          const dirtyObjects = this._getDirtyObjectAttributes();
          if (attr) {
            if (Object.hasOwn(dirtyObjects, attr)) {
              return true;
            }
            for (let i2 = 0; i2 < pendingOps.length; i2++) {
              if (Object.hasOwn(pendingOps[i2], attr)) {
                return true;
              }
            }
            return false;
          }
          if (Object.keys(pendingOps[0]).length !== 0) {
            return true;
          }
          if (Object.keys(dirtyObjects).length !== 0) {
            return true;
          }
          return false;
        }
        /**
         * Returns an array of keys that have been modified since last save/refresh
         *
         * @returns {string[]}
         */
        dirtyKeys() {
          const pendingOps = this._getPendingOps();
          const keys2 = {};
          for (let i2 = 0; i2 < pendingOps.length; i2++) {
            for (const attr in pendingOps[i2]) {
              keys2[attr] = true;
            }
          }
          const dirtyObjects = this._getDirtyObjectAttributes();
          for (const attr in dirtyObjects) {
            keys2[attr] = true;
          }
          return Object.keys(keys2);
        }
        /**
         * Returns true if the object has been fetched.
         *
         * @returns {boolean}
         */
        isDataAvailable() {
          const serverData = this._getServerData();
          return !!Object.keys(serverData).length;
        }
        /**
         * Gets a Pointer referencing this Object.
         *
         * @returns {Pointer}
         */
        toPointer() {
          if (!this.id) {
            throw new Error("Cannot create a pointer to an unsaved ParseObject");
          }
          return {
            __type: "Pointer",
            className: this.className,
            objectId: this.id
          };
        }
        /**
         * Gets a Pointer referencing this Object.
         *
         * @returns {Pointer}
         */
        toOfflinePointer() {
          if (!this._localId) {
            throw new Error("Cannot create a offline pointer to a saved ParseObject");
          }
          return {
            __type: "Object",
            className: this.className,
            _localId: this._localId
          };
        }
        /**
         * Gets the value of an attribute.
         *
         * @param {string} attr The string name of an attribute.
         * @returns {*}
         */
        get(attr) {
          return this.attributes[attr];
        }
        /**
         * Gets a relation on the given class for the attribute.
         *
         * @param {string} attr The attribute to get the relation for.
         * @returns {Parse.Relation}
         */
        relation(attr) {
          const value = this.get(attr);
          if (value) {
            if (!(value instanceof ParseRelation)) {
              throw new Error("Called relation() on non-relation field " + attr);
            }
            value._ensureParentAndKey(this, attr);
            return value;
          }
          return new ParseRelation(this, attr);
        }
        /**
         * Gets the HTML-escaped value of an attribute.
         *
         * @param {string} attr The string name of an attribute.
         * @returns {string}
         */
        escape(attr) {
          let val = this.attributes[attr];
          if (val == null) {
            return "";
          }
          if (typeof val !== "string") {
            if (typeof val.toString !== "function") {
              return "";
            }
            val = val.toString();
          }
          return escape$1(val);
        }
        /**
         * Returns true if the attribute contains a value that is not
         * null or undefined.
         *
         * @param {string} attr The string name of the attribute.
         * @returns {boolean}
         */
        has(attr) {
          const attributes = this.attributes;
          if (Object.hasOwn(attributes, attr)) {
            return attributes[attr] != null;
          }
          return false;
        }
        /**
         * Sets a hash of model attributes on the object.
         *
         * 

    You can call it with an object containing keys and values, with one * key and value, or dot notation. For example:

         *   gameTurn.set({
         *     player: player1,
         *     diceRoll: 2
         *   }, {
         *     error: function(gameTurnAgain, error) {
         *       // The set failed validation.
         *     }
         *   });
         *
         *   game.set("currentPlayer", player2, {
         *     error: function(gameTurnAgain, error) {
         *       // The set failed validation.
         *     }
         *   });
         *
         *   game.set("finished", true);

    * * game.set("player.score", 10);

    * * @param {(string|object)} key The key to set. * @param {(string|object)} value The value to give it. * @param {object} options A set of options for the set. * The only supported option is error. * @returns {Parse.Object} Returns the object, so you can chain this call. */ set(key2, value, options) { let changes = {}; const newOps = {}; if (key2 && typeof key2 === "object") { changes = key2; options = value; } else if (typeof key2 === "string") { changes[key2] = value; } else { return this; } options = options || {}; let readonly = []; if (typeof this.constructor.readOnlyAttributes === "function") { readonly = readonly.concat(this.constructor.readOnlyAttributes()); } for (const k in changes) { if (k === "createdAt" || k === "updatedAt") { continue; } if (readonly.indexOf(k) > -1) { throw new Error("Cannot modify readonly attribute: " + k); } if (options.unset) { newOps[k] = new UnsetOp(); } else if (changes[k] instanceof Op) { newOps[k] = changes[k]; } else if (changes[k] && typeof changes[k] === "object" && typeof changes[k].__op === "string") { newOps[k] = opFromJSON(changes[k]); } else if (k === "objectId" || k === "id") { if (typeof changes[k] === "string") { this.id = changes[k]; } } else if (k === "ACL" && typeof changes[k] === "object" && !(changes[k] instanceof ParseACL)) { newOps[k] = new SetOp(new ParseACL(changes[k])); } else if (changes[k] instanceof ParseRelation) { const relation = new ParseRelation(this, k); relation.targetClassName = changes[k].targetClassName; newOps[k] = new SetOp(relation); } else { newOps[k] = new SetOp(changes[k]); } } const currentAttributes = this.attributes; const newValues = {}; for (const attr in newOps) { if (newOps[attr] instanceof RelationOp) { newValues[attr] = newOps[attr].applyTo(currentAttributes[attr], this, attr); } else if (!(newOps[attr] instanceof UnsetOp)) { newValues[attr] = newOps[attr].applyTo(currentAttributes[attr]); } } if (!options.ignoreValidation) { const validationError = this.validate(newValues); if (validationError) { throw validationError; } } const pendingOps = this._getPendingOps(); const last = pendingOps.length - 1; const stateController = CoreManager.getObjectStateController(); for (const attr in newOps) { const nextOp = newOps[attr].mergeWith(pendingOps[last][attr]); stateController.setPendingOp(this._getStateIdentifier(), attr, nextOp); } return this; } /** * Remove an attribute from the model. This is a noop if the attribute doesn't * exist. * * @param {string} attr The string name of an attribute. * @param options * @returns {Parse.Object} Returns the object, so you can chain this call. */ unset(attr, options) { options = options || {}; options.unset = true; return this.set(attr, null, options); } /** * Atomically increments the value of the given attribute the next time the * object is saved. If no amount is specified, 1 is used by default. * * @param attr {String} The key. * @param amount {Number} The amount to increment by (optional). * @returns {Parse.Object} Returns the object, so you can chain this call. */ increment(attr, amount) { if (typeof amount === "undefined") { amount = 1; } if (typeof amount !== "number") { throw new Error("Cannot increment by a non-numeric amount."); } return this.set(attr, new IncrementOp(amount)); } /** * Atomically decrements the value of the given attribute the next time the * object is saved. If no amount is specified, 1 is used by default. * * @param attr {String} The key. * @param amount {Number} The amount to decrement by (optional). * @returns {Parse.Object} Returns the object, so you can chain this call. */ decrement(attr, amount) { if (typeof amount === "undefined") { amount = 1; } if (typeof amount !== "number") { throw new Error("Cannot decrement by a non-numeric amount."); } return this.set(attr, new IncrementOp(amount * -1)); } /** * Atomically add an object to the end of the array associated with a given * key. * * @param attr {String} The key. * @param item {} The item to add. * @returns {Parse.Object} Returns the object, so you can chain this call. */ add(attr, item) { return this.set(attr, new AddOp([item])); } /** * Atomically add the objects to the end of the array associated with a given * key. * * @param attr {String} The key. * @param items {Object[]} The items to add. * @returns {Parse.Object} Returns the object, so you can chain this call. */ addAll(attr, items) { return this.set(attr, new AddOp(items)); } /** * Atomically add an object to the array associated with a given key, only * if it is not already present in the array. The position of the insert is * not guaranteed. * * @param attr {String} The key. * @param item {} The object to add. * @returns {Parse.Object} Returns the object, so you can chain this call. */ addUnique(attr, item) { return this.set(attr, new AddUniqueOp([item])); } /** * Atomically add the objects to the array associated with a given key, only * if it is not already present in the array. The position of the insert is * not guaranteed. * * @param attr {String} The key. * @param items {Object[]} The objects to add. * @returns {Parse.Object} Returns the object, so you can chain this call. */ addAllUnique(attr, items) { return this.set(attr, new AddUniqueOp(items)); } /** * Atomically remove all instances of an object from the array associated * with a given key. * * @param attr {String} The key. * @param item {} The object to remove. * @returns {Parse.Object} Returns the object, so you can chain this call. */ remove(attr, item) { return this.set(attr, new RemoveOp([item])); } /** * Atomically remove all instances of the objects from the array associated * with a given key. * * @param attr {String} The key. * @param items {Object[]} The object to remove. * @returns {Parse.Object} Returns the object, so you can chain this call. */ removeAll(attr, items) { return this.set(attr, new RemoveOp(items)); } /** * Returns an instance of a subclass of Parse.Op describing what kind of * modification has been performed on this field since the last time it was * saved. For example, after calling object.increment("x"), calling * object.op("x") would return an instance of Parse.Op.Increment. * * @param attr {String} The key. * @returns {Parse.Op | undefined} The operation, or undefined if none. */ op(attr) { const pending = this._getPendingOps(); for (let i2 = 0; i2 < pending.length; i2 += 1) { if (pending[i2][attr]) { return pending[i2][attr]; } } } /** * Creates a new model with identical attributes to this one. * * @returns {Parse.Object} */ clone() { const clone = new this.constructor(this.className); let attributes = this.attributes; if (typeof this.constructor.readOnlyAttributes === "function") { const readonly = this.constructor.readOnlyAttributes() || []; const copy = {}; for (const a in attributes) { if (readonly.indexOf(a) < 0) { copy[a] = attributes[a]; } } attributes = copy; } if (clone.set) { clone.set(attributes); } return clone; } /** * Creates a new instance of this object. Not to be confused with clone() * * @returns {Parse.Object} */ newInstance() { const clone = new this.constructor(this.className); clone.id = this.id; if (singleInstance) { return clone; } const stateController = CoreManager.getObjectStateController(); if (stateController) { stateController.duplicateState(this._getStateIdentifier(), clone._getStateIdentifier()); } return clone; } /** * Returns true if this object has never been saved to Parse. * * @returns {boolean} */ isNew() { return !this.id; } /** * Returns true if this object was created by the Parse server when the * object might have already been there (e.g. in the case of a Facebook * login) * * @returns {boolean} */ existed() { if (!this.id) { return false; } const stateController = CoreManager.getObjectStateController(); const state2 = stateController.getState(this._getStateIdentifier()); if (state2) { return state2.existed; } return false; } /** * Returns true if this object exists on the Server * * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @returns {Promise} A boolean promise that is fulfilled if object exists. */ async exists(options) { if (!this.id) { return false; } try { const ParseQuery2 = CoreManager.getParseQuery(); const query = new ParseQuery2(this.className); await query.get(this.id, options); return true; } catch (e) { if (e.code === ParseError.OBJECT_NOT_FOUND) { return false; } throw e; } } /** * Checks if the model is currently in a valid state. * * @returns {boolean} */ isValid() { return !this.validate(this.attributes); } /** * You should not call this function directly unless you subclass * Parse.Object, in which case you can override this method * to provide additional validation on set and * save. Your implementation should return * * @param {object} attrs The current data to validate. * @returns {Parse.Error|boolean} False if the data is valid. An error object otherwise. * @see Parse.Object#set */ validate(attrs) { if (Object.hasOwn(attrs, "ACL") && !(attrs.ACL instanceof ParseACL)) { return new ParseError(ParseError.OTHER_CAUSE, "ACL must be a Parse ACL."); } for (const key2 in attrs) { if (!/^[A-Za-z_][0-9A-Za-z_.]*$/.test(key2)) { return new ParseError(ParseError.INVALID_KEY_NAME, `Invalid key name: ${key2}`); } } return false; } /** * Returns the ACL for this object. * * @returns {Parse.ACL|null} An instance of Parse.ACL. * @see Parse.Object#get */ getACL() { const acl = this.get("ACL"); if (acl instanceof ParseACL) { return acl; } return null; } /** * Sets the ACL to be used for this object. * * @param {Parse.ACL} acl An instance of Parse.ACL. * @param {object} options * @returns {Parse.Object} Returns the object, so you can chain this call. * @see Parse.Object#set */ setACL(acl, options) { return this.set("ACL", acl, options); } /** * Clears any (or specific) changes to this object made since the last call to save() * * @param {string} [keys] - specify which fields to revert */ revert(...keys2) { let keysToRevert; if (keys2.length) { keysToRevert = []; for (const key2 of keys2) { if (typeof key2 === "string") { keysToRevert.push(key2); } else { throw new Error("Parse.Object#revert expects either no, or a list of string, arguments."); } } } this._clearPendingOps(keysToRevert); } /** * Clears all attributes on a model * * @returns {Parse.Object} Returns the object, so you can chain this call. */ clear() { const attributes = this.attributes; const erasable = {}; let readonly = ["createdAt", "updatedAt"]; if (typeof this.constructor.readOnlyAttributes === "function") { readonly = readonly.concat(this.constructor.readOnlyAttributes()); } for (const attr in attributes) { if (readonly.indexOf(attr) < 0) { erasable[attr] = true; } } return this.set(erasable, { unset: true }); } /** * Fetch the model from the server. If the server's representation of the * model differs from its current attributes, they will be overriden. * * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • include: The name(s) of the key(s) to include. Can be a string, an array of strings, * or an array of array of strings. *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. *
    * @returns {Promise} A promise that is fulfilled when the fetch * completes. */ fetch(options) { const fetchOptions = ParseObject._getRequestOptions(options); const controller = CoreManager.getObjectController(); return controller.fetch(this, true, fetchOptions); } /** * Fetch the model from the server. If the server's representation of the * model differs from its current attributes, they will be overriden. * * Includes nested Parse.Objects for the provided key. You can use dot * notation to specify which fields in the included object are also fetched. * * @param {string | Array>} keys The name(s) of the key(s) to include. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @returns {Promise} A promise that is fulfilled when the fetch * completes. */ fetchWithInclude(keys2, options) { options = options || {}; options.include = keys2; return this.fetch(options); } /** * Saves this object to the server at some unspecified time in the future, * even if Parse is currently inaccessible. * * Use this when you may not have a solid network connection, and don't need to know when the save completes. * If there is some problem with the object such that it can't be saved, it will be silently discarded. * * Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to Parse. * They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is * available. Objects saved this way will persist even after the app is closed, in which case they will be sent the * next time the app is opened. * * @param {object} [options] * Used to pass option parameters to method if arg1 and arg2 were both passed as strings. * Valid options are: *
      *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • cascadeSave: If `false`, nested objects will not be saved (default is `true`). *
    • context: A dictionary that is accessible in Cloud Code `beforeSave` and `afterSave` triggers. *
    * @returns {Promise} A promise that is fulfilled when the save * completes. */ async saveEventually(options) { try { await this.save(null, options); } catch (e) { if (e.code === ParseError.CONNECTION_FAILED) { await CoreManager.getEventuallyQueue().save(this, options); CoreManager.getEventuallyQueue().poll(); } } return this; } async save(arg1, arg2, arg3) { let attrs; let options; if (typeof arg1 === "object" || typeof arg1 === "undefined") { attrs = arg1; if (typeof arg2 === "object") { options = arg2; } } else { attrs = {}; attrs[arg1] = arg2; options = arg3; } options = options || {}; if (attrs) { this.set(attrs, options); } const saveOptions = ParseObject._getRequestOptions(options); const controller = CoreManager.getObjectController(); const unsaved = options.cascadeSave !== false ? unsavedChildren(this) : null; if (unsaved && unsaved.length && options.transaction === true && unsaved.some((el) => el instanceof ParseObject)) { const unsavedFiles = []; const unsavedObjects = []; unsaved.forEach((el) => { if (el instanceof ParseFile) unsavedFiles.push(el); else unsavedObjects.push(el); }); unsavedObjects.push(this); const filePromise = unsavedFiles.length ? controller.save(unsavedFiles, saveOptions) : Promise.resolve(); return filePromise.then(() => controller.save(unsavedObjects, saveOptions)).then((savedOjbects) => savedOjbects.pop()); } await controller.save(unsaved, saveOptions); return controller.save(this, saveOptions); } /** * Deletes this object from the server at some unspecified time in the future, * even if Parse is currently inaccessible. * * Use this when you may not have a solid network connection, * and don't need to know when the delete completes. If there is some problem with the object * such that it can't be deleted, the request will be silently discarded. * * Delete instructions made with this method will be stored locally in an on-disk cache until they can be transmitted * to Parse. They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection * is available. Delete requests will persist even after the app is closed, in which case they will be sent the * next time the app is opened. * * @param {object} [options] * Valid options are:
      *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeDelete` and `afterDelete` triggers. *
    * @returns {Promise} A promise that is fulfilled when the destroy * completes. */ async destroyEventually(options) { try { await this.destroy(options); } catch (e) { if (e.code === ParseError.CONNECTION_FAILED) { await CoreManager.getEventuallyQueue().destroy(this, options); CoreManager.getEventuallyQueue().poll(); } } return this; } /** * Destroy this model on the server if it was already persisted. * * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeDelete` and `afterDelete` triggers. *
    * @returns {Promise} A promise that is fulfilled when the destroy * completes. */ destroy(options) { if (!this.id) { return Promise.resolve(void 0); } const destroyOptions = ParseObject._getRequestOptions(options); return CoreManager.getObjectController().destroy(this, destroyOptions); } /** * Asynchronously stores the object and every object it points to in the local datastore, * recursively, using a default pin name: _default. * * If those other objects have not been fetched from Parse, they will not be stored. * However, if they have changed data, all the changes will be retained. * *
         * await object.pin();
         * 
    * * To retrieve object: * query.fromLocalDatastore() or query.fromPin() * * @returns {Promise} A promise that is fulfilled when the pin completes. */ pin() { return ParseObject.pinAllWithName(DEFAULT_PIN, [this]); } /** * Asynchronously removes the object and every object it points to in the local datastore, * recursively, using a default pin name: _default. * *
         * await object.unPin();
         * 
    * * @returns {Promise} A promise that is fulfilled when the unPin completes. */ unPin() { return ParseObject.unPinAllWithName(DEFAULT_PIN, [this]); } /** * Asynchronously returns if the object is pinned * *
         * const isPinned = await object.isPinned();
         * 
    * * @returns {Promise} A boolean promise that is fulfilled if object is pinned. */ async isPinned() { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } const objectKey = localDatastore.getKeyForObject(this); const pin = await localDatastore.fromPinWithName(objectKey); return pin.length > 0; } /** * Asynchronously stores the objects and every object they point to in the local datastore, recursively. * * If those other objects have not been fetched from Parse, they will not be stored. * However, if they have changed data, all the changes will be retained. * *
         * await object.pinWithName(name);
         * 
    * * To retrieve object: * query.fromLocalDatastore() or query.fromPinWithName(name) * * @param {string} name Name of Pin. * @returns {Promise} A promise that is fulfilled when the pin completes. */ pinWithName(name) { return ParseObject.pinAllWithName(name, [this]); } /** * Asynchronously removes the object and every object it points to in the local datastore, recursively. * *
         * await object.unPinWithName(name);
         * 
    * * @param {string} name Name of Pin. * @returns {Promise} A promise that is fulfilled when the unPin completes. */ unPinWithName(name) { return ParseObject.unPinAllWithName(name, [this]); } /** * Asynchronously loads data from the local datastore into this object. * *
         * await object.fetchFromLocalDatastore();
         * 
    * * You can create an unfetched pointer with Parse.Object.createWithoutData() * and then call fetchFromLocalDatastore() on it. * * @returns {Promise} A promise that is fulfilled when the fetch completes. */ async fetchFromLocalDatastore() { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { throw new Error("Parse.enableLocalDatastore() must be called first"); } const objectKey = localDatastore.getKeyForObject(this); const pinned = await localDatastore._serializeObject(objectKey); if (!pinned) { throw new Error("Cannot fetch an unsaved ParseObject"); } const result = ParseObject.fromJSON(pinned); this._finishFetch(result.toJSON()); return this; } /* Static methods */ static _clearAllState() { const stateController = CoreManager.getObjectStateController(); stateController.clearAllState(); } /** * Fetches the given list of Parse.Object. * If any error is encountered, stops and calls the error handler. * *
         *   Parse.Object.fetchAll([object1, object2, ...])
         *    .then((list) => {
         *      // All the objects were fetched.
         *    }, (error) => {
         *      // An error occurred while fetching one of the objects.
         *    });
         * 
    * * @param {Array} list A list of Parse.Object. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • include: The name(s) of the key(s) to include. Can be a string, an array of strings, * or an array of array of strings. *
    * @static * @returns {Parse.Object[]} */ static fetchAll(list, options) { const fetchOptions = ParseObject._getRequestOptions(options); return CoreManager.getObjectController().fetch(list, true, fetchOptions); } /** * Fetches the given list of Parse.Object. * * Includes nested Parse.Objects for the provided key. You can use dot * notation to specify which fields in the included object are also fetched. * * If any error is encountered, stops and calls the error handler. * *
         *   Parse.Object.fetchAllWithInclude([object1, object2, ...], [pointer1, pointer2, ...])
         *    .then((list) => {
         *      // All the objects were fetched.
         *    }, (error) => {
         *      // An error occurred while fetching one of the objects.
         *    });
         * 
    * * @param {Array} list A list of Parse.Object. * @param {string | Array>} keys The name(s) of the key(s) to include. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @static * @returns {Parse.Object[]} */ static fetchAllWithInclude(list, keys2, options) { options = options || {}; options.include = keys2; return ParseObject.fetchAll(list, options); } /** * Fetches the given list of Parse.Object if needed. * If any error is encountered, stops and calls the error handler. * * Includes nested Parse.Objects for the provided key. You can use dot * notation to specify which fields in the included object are also fetched. * * If any error is encountered, stops and calls the error handler. * *
         *   Parse.Object.fetchAllIfNeededWithInclude([object1, object2, ...], [pointer1, pointer2, ...])
         *    .then((list) => {
         *      // All the objects were fetched.
         *    }, (error) => {
         *      // An error occurred while fetching one of the objects.
         *    });
         * 
    * * @param {Array} list A list of Parse.Object. * @param {string | Array>} keys The name(s) of the key(s) to include. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @static * @returns {Parse.Object[]} */ static fetchAllIfNeededWithInclude(list, keys2, options) { options = options || {}; options.include = keys2; return ParseObject.fetchAllIfNeeded(list, options); } /** * Fetches the given list of Parse.Object if needed. * If any error is encountered, stops and calls the error handler. * *
         *   Parse.Object.fetchAllIfNeeded([object1, ...])
         *    .then((list) => {
         *      // Objects were fetched and updated.
         *    }, (error) => {
         *      // An error occurred while fetching one of the objects.
         *    });
         * 
    * * @param {Array} list A list of Parse.Object. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • include: The name(s) of the key(s) to include. Can be a string, an array of strings, * or an array of array of strings. *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. *
    * @static * @returns {Parse.Object[]} */ static fetchAllIfNeeded(list, options) { const fetchOptions = ParseObject._getRequestOptions(options); return CoreManager.getObjectController().fetch(list, false, fetchOptions); } static handleIncludeOptions(options) { let include = []; if (Array.isArray(options.include)) { options.include.forEach((key2) => { if (Array.isArray(key2)) { include = include.concat(key2); } else { include.push(key2); } }); } else { include.push(options.include); } return include; } /** * Destroy the given list of models on the server if it was already persisted. * *

    Unlike saveAll, if an error occurs while deleting an individual model, * this method will continue trying to delete the rest of the models if * possible, except in the case of a fatal error like a connection error. * *

    In particular, the Parse.Error object returned in the case of error may * be one of two types: * *

      *
    • A Parse.Error.AGGREGATE_ERROR. This object's "errors" property is an * array of other Parse.Error objects. Each error object in this array * has an "object" property that references the object that could not be * deleted (for instance, because that object could not be found).
    • *
    • A non-aggregate Parse.Error. This indicates a serious error that * caused the delete operation to be aborted partway through (for * instance, a connection failure in the middle of the delete).
    • *
    * *
         * Parse.Object.destroyAll([object1, object2, ...])
         * .then((list) => {
         * // All the objects were deleted.
         * }, (error) => {
         * // An error occurred while deleting one or more of the objects.
         * // If this is an aggregate error, then we can inspect each error
         * // object individually to determine the reason why a particular
         * // object was not deleted.
         * if (error.code === Parse.Error.AGGREGATE_ERROR) {
         * for (var i = 0; i < error.errors.length; i++) {
         * console.log("Couldn't delete " + error.errors[i].object.id +
         * "due to " + error.errors[i].message);
         * }
         * } else {
         * console.log("Delete aborted because of " + error.message);
         * }
         * });
         * 
    * * @param {Array} list A list of Parse.Object. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeDelete` and `afterDelete` triggers. *
    • transaction: Set to true to enable transactions *
    • batchSize: How many objects to yield in each batch (default: 20) *
    * @static * @returns {Promise} A promise that is fulfilled when the destroyAll * completes. */ static destroyAll(list, options) { const destroyOptions = ParseObject._getRequestOptions(options); return CoreManager.getObjectController().destroy(list, destroyOptions); } /** * Saves the given list of Parse.Object. * If any error is encountered, stops and calls the error handler. * *
         * Parse.Object.saveAll([object1, object2, ...])
         * .then((list) => {
         * // All the objects were saved.
         * }, (error) => {
         * // An error occurred while saving one of the objects.
         * });
         * 
    * * @param {Array} list A list of Parse.Object. * @param {object} options * Valid options are: *
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • cascadeSave: If `false`, nested objects will not be saved (default is `true`). *
    • context: A dictionary that is accessible in Cloud Code `beforeSave` and `afterSave` triggers. *
    • transaction: Set to true to enable transactions *
    • batchSize: How many objects to yield in each batch (default: 20) *
    * @static * @returns {Parse.Object[]} */ static saveAll(list, options) { const saveOptions = ParseObject._getRequestOptions(options); return CoreManager.getObjectController().save(list, saveOptions); } /** * Creates a reference to a subclass of Parse.Object with the given id. This * does not exist on Parse.Object, only on subclasses. * *

    A shortcut for:

         *  var Foo = Parse.Object.extend("Foo");
         *  var pointerToFoo = new Foo();
         *  pointerToFoo.id = "myObjectId";
         * 
    * * @param {string} id The ID of the object to create a reference to. * @static * @returns {Parse.Object} A Parse.Object reference. */ static createWithoutData(id) { const obj = new this(); obj.id = id; return obj; } /** * Creates a new instance of a Parse Object from a JSON representation. * * @param {object} json The JSON map of the Object's data * @param {boolean} override In single instance mode, all old server data * is overwritten if this is set to true * @param {boolean} dirty Whether the Parse.Object should set JSON keys to dirty * @static * @returns {Parse.Object} A Parse.Object reference */ static fromJSON(json, override, dirty) { if (!json.className) { throw new Error("Cannot create an object without a className"); } const constructor = classMap[json.className]; const o = constructor ? new constructor(json.className) : new ParseObject(json.className); const otherAttributes = {}; for (const attr in json) { if (attr !== "className" && attr !== "__type") { otherAttributes[attr] = json[attr]; if (dirty) { o.set(attr, json[attr]); } } } if (override) { if (otherAttributes.objectId) { o.id = otherAttributes.objectId; } let preserved = null; if (typeof o._preserveFieldsOnFetch === "function") { preserved = o._preserveFieldsOnFetch(); } o._clearServerData(); if (preserved) { o._finishFetch(preserved); } } o._finishFetch(otherAttributes); if (json.objectId) { o._setExisted(true); } return o; } /** * Registers a subclass of Parse.Object with a specific class name. * When objects of that class are retrieved from a query, they will be * instantiated with this subclass. * This is only necessary when using ES6 subclassing. * * @param {string} className The class name of the subclass * @param {Function} constructor The subclass */ static registerSubclass(className, constructor) { if (typeof className !== "string") { throw new TypeError("The first argument must be a valid class name."); } if (typeof constructor === "undefined") { throw new TypeError("You must supply a subclass constructor."); } if (typeof constructor !== "function") { throw new TypeError( "You must register the subclass constructor. Did you attempt to register an instance of the subclass?" ); } classMap[className] = constructor; if (!constructor.className) { constructor.className = className; } } /** * Unegisters a subclass of Parse.Object with a specific class name. * * @param {string} className The class name of the subclass */ static unregisterSubclass(className) { if (typeof className !== "string") { throw new TypeError("The first argument must be a valid class name."); } delete classMap[className]; } /** * Creates a new subclass of Parse.Object for the given Parse class name. * *

    Every extension of a Parse class will inherit from the most recent * previous extension of that class. When a Parse.Object is automatically * created by parsing JSON, it will use the most recent extension of that * class.

    * *

    You should call either:

         *     var MyClass = Parse.Object.extend("MyClass", {
         *         Instance methods,
         *         initialize: function(attrs, options) {
         *             this.someInstanceProperty = [],
         *             Other instance properties
         *         }
         *     }, {
         *         Class properties
         *     });
    * or, for Backbone compatibility:
         *     var MyClass = Parse.Object.extend({
         *         className: "MyClass",
         *         Instance methods,
         *         initialize: function(attrs, options) {
         *             this.someInstanceProperty = [],
         *             Other instance properties
         *         }
         *     }, {
         *         Class properties
         *     });

    * * @param {string} className The name of the Parse class backing this model. * @param {object} [protoProps] Instance properties to add to instances of the * class returned from this method. * @param {object} [classProps] Class properties to add the class returned from * this method. * @returns {Parse.Object} A new subclass of Parse.Object. */ static extend(className, protoProps, classProps) { if (typeof className !== "string") { if (className && typeof className.className === "string") { return ParseObject.extend(className.className, className, protoProps); } else { throw new Error("Parse.Object.extend's first argument should be the className."); } } let adjustedClassName = className; if (adjustedClassName === "User" && CoreManager.get("PERFORM_USER_REWRITE")) { adjustedClassName = "_User"; } let parentProto = ParseObject.prototype; if (Object.hasOwn(this, "__super__") && this.__super__) { parentProto = this.prototype; } let ParseObjectSubclass = function(attributes, options) { this.className = adjustedClassName; this._objCount = objectCount++; if (typeof this.initialize === "function") { this.initialize.apply(this, arguments); } if (this._initializers) { for (const initializer of this._initializers) { initializer.apply(this, arguments); } } if (attributes && typeof attributes === "object") { try { this.set(attributes || {}, options); } catch (_) { throw new Error("Can't create an invalid Parse Object"); } } }; if (classMap[adjustedClassName]) { ParseObjectSubclass = classMap[adjustedClassName]; } else { ParseObjectSubclass.extend = function(name, protoProps2, classProps2) { if (typeof name === "string") { return ParseObject.extend.call(ParseObjectSubclass, name, protoProps2, classProps2); } return ParseObject.extend.call(ParseObjectSubclass, adjustedClassName, name, protoProps2); }; ParseObjectSubclass.createWithoutData = ParseObject.createWithoutData; ParseObjectSubclass.className = adjustedClassName; ParseObjectSubclass.__super__ = parentProto; ParseObjectSubclass.prototype = Object.create(parentProto, { constructor: { value: ParseObjectSubclass, enumerable: false, writable: true, configurable: true } }); } if (protoProps) { for (const prop in protoProps) { if (prop === "initialize") { Object.defineProperty(ParseObjectSubclass.prototype, "_initializers", { value: [...ParseObjectSubclass.prototype._initializers || [], protoProps[prop]], enumerable: false, writable: true, configurable: true }); continue; } if (prop !== "className") { Object.defineProperty(ParseObjectSubclass.prototype, prop, { value: protoProps[prop], enumerable: false, writable: true, configurable: true }); } } } if (classProps) { for (const prop in classProps) { if (prop !== "className") { Object.defineProperty(ParseObjectSubclass, prop, { value: classProps[prop], enumerable: false, writable: true, configurable: true }); } } } classMap[adjustedClassName] = ParseObjectSubclass; return ParseObjectSubclass; } /** * Enable single instance objects, where any local objects with the same Id * share the same attributes, and stay synchronized with each other. * This is disabled by default in server environments, since it can lead to * security issues. * * @static */ static enableSingleInstance() { singleInstance = true; CoreManager.setObjectStateController(SingleInstanceStateController); } /** * Disable single instance objects, where any local objects with the same Id * share the same attributes, and stay synchronized with each other. * When disabled, you can have two instances of the same object in memory * without them sharing attributes. * * @static */ static disableSingleInstance() { singleInstance = false; CoreManager.setObjectStateController(UniqueInstanceStateController); } /** * Asynchronously stores the objects and every object they point to in the local datastore, * recursively, using a default pin name: _default. * * If those other objects have not been fetched from Parse, they will not be stored. * However, if they have changed data, all the changes will be retained. * *
         * await Parse.Object.pinAll([...]);
         * 
    * * To retrieve object: * query.fromLocalDatastore() or query.fromPin() * * @param {Array} objects A list of Parse.Object. * @returns {Promise} A promise that is fulfilled when the pin completes. * @static */ static pinAll(objects) { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } return ParseObject.pinAllWithName(DEFAULT_PIN, objects); } /** * Asynchronously stores the objects and every object they point to in the local datastore, recursively. * * If those other objects have not been fetched from Parse, they will not be stored. * However, if they have changed data, all the changes will be retained. * *
         * await Parse.Object.pinAllWithName(name, [obj1, obj2, ...]);
         * 
    * * To retrieve object: * query.fromLocalDatastore() or query.fromPinWithName(name) * * @param {string} name Name of Pin. * @param {Array} objects A list of Parse.Object. * @returns {Promise} A promise that is fulfilled when the pin completes. * @static */ static pinAllWithName(name, objects) { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } return localDatastore._handlePinAllWithName(name, objects); } /** * Asynchronously removes the objects and every object they point to in the local datastore, * recursively, using a default pin name: _default. * *
         * await Parse.Object.unPinAll([...]);
         * 
    * * @param {Array} objects A list of Parse.Object. * @returns {Promise} A promise that is fulfilled when the unPin completes. * @static */ static unPinAll(objects) { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } return ParseObject.unPinAllWithName(DEFAULT_PIN, objects); } /** * Asynchronously removes the objects and every object they point to in the local datastore, recursively. * *
         * await Parse.Object.unPinAllWithName(name, [obj1, obj2, ...]);
         * 
    * * @param {string} name Name of Pin. * @param {Array} objects A list of Parse.Object. * @returns {Promise} A promise that is fulfilled when the unPin completes. * @static */ static unPinAllWithName(name, objects) { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } return localDatastore._handleUnPinAllWithName(name, objects); } /** * Asynchronously removes all objects in the local datastore using a default pin name: _default. * *
         * await Parse.Object.unPinAllObjects();
         * 
    * * @returns {Promise} A promise that is fulfilled when the unPin completes. * @static */ static unPinAllObjects() { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } return localDatastore.unPinWithName(DEFAULT_PIN); } /** * Asynchronously removes all objects with the specified pin name. * Deletes the pin name also. * *
         * await Parse.Object.unPinAllObjectsWithName(name);
         * 
    * * @param {string} name Name of Pin. * @returns {Promise} A promise that is fulfilled when the unPin completes. * @static */ static unPinAllObjectsWithName(name) { const localDatastore = CoreManager.getLocalDatastore(); if (!localDatastore.isEnabled) { return Promise.reject("Parse.enableLocalDatastore() must be called first"); } return localDatastore.unPinWithName(PIN_PREFIX + name); } } const DefaultController$9 = { fetch(target, forceFetch, options) { const localDatastore = CoreManager.getLocalDatastore(); if (Array.isArray(target)) { if (target.length < 1) { return Promise.resolve([]); } const objs = []; const ids = []; let className = null; const results = []; let error = null; target.forEach((el) => { if (error) { return; } if (!className) { className = el.className; } if (className !== el.className) { error = new ParseError( ParseError.INVALID_CLASS_NAME, "All objects should be of the same class" ); } if (!el.id) { error = new ParseError(ParseError.MISSING_OBJECT_ID, "All objects must have an ID"); } if (forceFetch || !el.isDataAvailable()) { ids.push(el.id); objs.push(el); } results.push(el); }); if (error) { return Promise.reject(error); } const ParseQuery2 = CoreManager.getParseQuery(); const query = new ParseQuery2(className); query.containedIn("objectId", ids); if (options && options.include) { query.include(options.include); } query._limit = ids.length; return query.find(options).then(async (objects) => { const idMap = {}; objects.forEach((o) => { idMap[o.id] = o; }); for (let i2 = 0; i2 < objs.length; i2++) { const obj = objs[i2]; if (!obj || !obj.id || !idMap[obj.id]) { if (forceFetch) { return Promise.reject( new ParseError(ParseError.OBJECT_NOT_FOUND, "All objects must exist on the server.") ); } } } if (!singleInstance) { for (let i2 = 0; i2 < results.length; i2++) { const obj = results[i2]; if (obj && obj.id && idMap[obj.id]) { const id = obj.id; obj._finishFetch(idMap[id].toJSON()); results[i2] = idMap[id]; } } } for (const object of results) { await localDatastore._updateObjectIfPinned(object); } return Promise.resolve(results); }); } else if (target instanceof ParseObject) { if (!target.id) { return Promise.reject( new ParseError(ParseError.MISSING_OBJECT_ID, "Object does not have an ID") ); } const RESTController2 = CoreManager.getRESTController(); const params = {}; if (options && options.include) { params.include = options.include.join(); } return RESTController2.request( "GET", "classes/" + target.className + "/" + target._getId(), params, options ).then(async (response) => { target._clearPendingOps(); target._clearServerData(); target._finishFetch(response); await localDatastore._updateObjectIfPinned(target); return target; }); } return Promise.resolve(void 0); }, async destroy(target, options) { if (options && options.batchSize && options.transaction) throw new ParseError( ParseError.OTHER_CAUSE, "You cannot use both transaction and batchSize options simultaneously." ); let batchSize = options && options.batchSize ? options.batchSize : CoreManager.get("REQUEST_BATCH_SIZE"); const localDatastore = CoreManager.getLocalDatastore(); const RESTController2 = CoreManager.getRESTController(); if (Array.isArray(target)) { if (options && options.transaction && target.length > 1) batchSize = target.length; if (target.length < 1) { return Promise.resolve([]); } const batches = [[]]; target.forEach((obj) => { if (!obj.id) { return; } batches[batches.length - 1].push(obj); if (batches[batches.length - 1].length >= batchSize) { batches.push([]); } }); if (batches[batches.length - 1].length === 0) { batches.pop(); } let deleteCompleted = Promise.resolve(); const errors = []; batches.forEach((batch) => { const requests = batch.map((obj) => { return { method: "DELETE", path: getServerUrlPath() + "classes/" + obj.className + "/" + obj._getId(), body: {} }; }); const body = options && options.transaction && requests.length > 1 ? { requests, transaction: true } : { requests }; deleteCompleted = deleteCompleted.then(() => { return RESTController2.request("POST", "batch", body, options).then((results) => { for (let i2 = 0; i2 < results.length; i2++) { if (results[i2] && Object.hasOwn(results[i2], "error")) { const err = new ParseError(results[i2].error.code, results[i2].error.error); err.object = batch[i2]; errors.push(err); } } }); }); }); return deleteCompleted.then(async () => { if (errors.length) { const aggregate = new ParseError(ParseError.AGGREGATE_ERROR); aggregate.errors = errors; return Promise.reject(aggregate); } for (const object of target) { await localDatastore._destroyObjectIfPinned(object); } return Promise.resolve(target); }); } else if (target instanceof ParseObject) { return RESTController2.request( "DELETE", "classes/" + target.className + "/" + target._getId(), {}, options ).then(async () => { await localDatastore._destroyObjectIfPinned(target); return Promise.resolve(target); }); } return Promise.resolve(target); }, save(target, options) { if (options && options.batchSize && options.transaction) return Promise.reject( new ParseError( ParseError.OTHER_CAUSE, "You cannot use both transaction and batchSize options simultaneously." ) ); let batchSize = options && options.batchSize ? options.batchSize : CoreManager.get("REQUEST_BATCH_SIZE"); const localDatastore = CoreManager.getLocalDatastore(); const mapIdForPin = {}; const RESTController2 = CoreManager.getRESTController(); const stateController = CoreManager.getObjectStateController(); const allowCustomObjectId = CoreManager.get("ALLOW_CUSTOM_OBJECT_ID"); options = options || {}; options.returnStatus = options.returnStatus || true; if (Array.isArray(target)) { if (target.length < 1) { return Promise.resolve([]); } let unsaved = target.concat(); for (let i2 = 0; i2 < target.length; i2++) { const target_i = target[i2]; if (target_i instanceof ParseObject) { unsaved = unsaved.concat(unsavedChildren(target_i, true)); } } unsaved = unique(unsaved); const filesSaved = []; let pending = []; unsaved.forEach((el) => { if (el instanceof ParseFile) { filesSaved.push(el.save(options)); } else if (el instanceof ParseObject) { pending.push(el); } }); if (options && options.transaction && pending.length > 1) { if (pending.some((el) => !canBeSerialized(el))) return Promise.reject( new ParseError( ParseError.OTHER_CAUSE, "Tried to save a transactional batch containing an object with unserializable attributes." ) ); batchSize = pending.length; } return Promise.all(filesSaved).then(() => { let objectError = null; return continueWhile( () => { return pending.length > 0; }, () => { const batch = []; const nextPending = []; pending.forEach((el) => { if (allowCustomObjectId && Object.hasOwn(el, "id") && !el.id) { throw new ParseError( ParseError.MISSING_OBJECT_ID, "objectId must not be empty or null" ); } if (batch.length < batchSize && canBeSerialized(el)) { batch.push(el); } else { nextPending.push(el); } }); pending = nextPending; if (batch.length < 1) { return Promise.reject( new ParseError(ParseError.OTHER_CAUSE, "Tried to save a batch with a cycle.") ); } const batchReturned = resolvingPromise(); const batchReady = []; const batchTasks = []; batch.forEach((obj, index) => { const ready = resolvingPromise(); batchReady.push(ready); const task = function() { ready.resolve(); return batchReturned.then((responses) => { if (Object.hasOwn(responses[index], "success")) { const objectId = responses[index].success.objectId; const status = responses[index]._status; delete responses[index]._status; delete responses[index]._headers; mapIdForPin[objectId] = obj._localId; obj._handleSaveResponse(responses[index].success, status); } else { if (!objectError && Object.hasOwn(responses[index], "error")) { const serverError = responses[index].error; objectError = new ParseError(serverError.code, serverError.error); pending = []; } obj._handleSaveError(); } }); }; stateController.pushPendingState(obj._getStateIdentifier()); batchTasks.push(stateController.enqueueTask(obj._getStateIdentifier(), task)); }); when(batchReady).then(() => { const requests = batch.map((obj) => { const params = obj._getSaveParams(); params.path = getServerUrlPath() + params.path; return params; }); const body = options && options.transaction && requests.length > 1 ? { requests, transaction: true } : { requests }; return RESTController2.request("POST", "batch", body, options); }).then(batchReturned.resolve, (error) => { batchReturned.reject(new ParseError(ParseError.INCORRECT_TYPE, error.message)); }); return when(batchTasks); } ).then(async () => { if (objectError) { return Promise.reject(objectError); } for (const object of target) { if (object instanceof ParseObject) { await localDatastore._updateLocalIdForObject(mapIdForPin[object.id], object); await localDatastore._updateObjectIfPinned(object); } } return Promise.resolve(target); }); }); } else if (target instanceof ParseObject) { if (allowCustomObjectId && Object.hasOwn(target, "id") && !target.id) { throw new ParseError(ParseError.MISSING_OBJECT_ID, "objectId must not be empty or null"); } target._getId(); const localId = target._localId; const targetCopy = target; const task = function() { const params = targetCopy._getSaveParams(); return RESTController2.request(params.method, params.path, params.body, options).then( (response) => { const status = response._status; delete response._status; delete response._headers; targetCopy._handleSaveResponse(response, status); }, (error) => { targetCopy._handleSaveError(); return Promise.reject(error); } ); }; stateController.pushPendingState(target._getStateIdentifier()); return stateController.enqueueTask(target._getStateIdentifier(), task).then( async () => { await localDatastore._updateLocalIdForObject(localId, target); await localDatastore._updateObjectIfPinned(target); return target; }, (error) => { return Promise.reject(error); } ); } return Promise.resolve(void 0); } }; CoreManager.setParseObject(ParseObject); CoreManager.setObjectController(DefaultController$9); function equals(a, b) { const toString2 = Object.prototype.toString; if (toString2.call(a) === "[object Date]" || toString2.call(b) === "[object Date]") { const dateA = new Date(a); const dateB = new Date(b); return +dateA === +dateB; } if (typeof a !== typeof b) { return false; } if (!a || typeof a !== "object") { return a === b; } if (Array.isArray(a) || Array.isArray(b)) { if (!Array.isArray(a) || !Array.isArray(b)) { return false; } if (a.length !== b.length) { return false; } for (let i2 = 0; i2 < a.length; i2 += 1) { if (!equals(a[i2], b[i2])) { return false; } } return true; } const ParseObject2 = CoreManager.getParseObject(); if (a instanceof ParseACL || a instanceof ParseFile || a instanceof ParseGeoPoint || a instanceof ParseObject2) { return a.equals(b); } if (b instanceof ParseObject2) { if (a.__type === "Object" || a.__type === "Pointer") { return a.objectId === b.id && a.className === b.className; } } if (Object.keys(a).length !== Object.keys(b).length) { return false; } for (const k in a) { if (!equals(a[k], b[k])) { return false; } } return true; } function contains(haystack, needle) { if (needle && needle.__type && (needle.__type === "Pointer" || needle.__type === "Object")) { for (const i2 in haystack) { const ptr = haystack[i2]; if (typeof ptr === "string" && ptr === needle.objectId) { return true; } if (ptr.className === needle.className && ptr.objectId === needle.objectId) { return true; } } return false; } if (Array.isArray(needle)) { for (const need of needle) { if (contains(haystack, need)) { return true; } } } return haystack.indexOf(needle) > -1; } function transformObject(object) { if (object._toFullJSON) { return object._toFullJSON(); } return object; } function matchesQuery(className, object, objects, query) { if (object.className !== className) { return false; } let obj = object; let q = query; if (object.toJSON) { obj = object.toJSON(); } if (query.toJSON) { q = query.toJSON().where; } obj.className = className; for (const field in q) { if (!matchesKeyConstraints(className, obj, objects, field, q[field])) { return false; } } return true; } function equalObjectsGeneric(obj, compareTo, eqlFn) { if (Array.isArray(obj)) { for (let i2 = 0; i2 < obj.length; i2++) { if (eqlFn(obj[i2], compareTo)) { return true; } } return false; } return eqlFn(obj, compareTo); } function relativeTimeToDate(text, now = /* @__PURE__ */ new Date()) { text = text.toLowerCase(); let parts = text.split(" "); parts = parts.filter((part) => part !== ""); const future = parts[0] === "in"; const past = parts[parts.length - 1] === "ago"; if (!future && !past && text !== "now") { return { status: "error", info: "Time should either start with 'in' or end with 'ago'" }; } if (future && past) { return { status: "error", info: "Time cannot have both 'in' and 'ago'" }; } if (future) { parts = parts.slice(1); } else { parts = parts.slice(0, parts.length - 1); } if (parts.length % 2 !== 0 && text !== "now") { return { status: "error", info: "Invalid time string. Dangling unit or number." }; } const pairs = []; while (parts.length) { pairs.push([parts.shift(), parts.shift()]); } let seconds = 0; for (const [num, interval] of pairs) { const val = Number(num); if (!Number.isInteger(val)) { return { status: "error", info: `'${num}' is not an integer.` }; } switch (interval) { case "yr": case "yrs": case "year": case "years": seconds += val * 31536e3; break; case "wk": case "wks": case "week": case "weeks": seconds += val * 604800; break; case "d": case "day": case "days": seconds += val * 86400; break; case "hr": case "hrs": case "hour": case "hours": seconds += val * 3600; break; case "min": case "mins": case "minute": case "minutes": seconds += val * 60; break; case "sec": case "secs": case "second": case "seconds": seconds += val; break; default: return { status: "error", info: `Invalid interval: '${interval}'` }; } } const milliseconds = seconds * 1e3; if (future) { return { status: "success", info: "future", result: new Date(now.valueOf() + milliseconds) }; } else if (past) { return { status: "success", info: "past", result: new Date(now.valueOf() - milliseconds) }; } else { return { status: "success", info: "present", result: new Date(now.valueOf()) }; } } function matchesKeyConstraints(className, object, objects, key2, constraints) { if (constraints === null) { return false; } if (key2.indexOf(".") >= 0) { const keyComponents = key2.split("."); const subObjectKey = keyComponents[0]; const keyRemainder = keyComponents.slice(1).join("."); return matchesKeyConstraints( className, object[subObjectKey] || {}, objects, keyRemainder, constraints ); } let i2; if (key2 === "$or") { for (i2 = 0; i2 < constraints.length; i2++) { if (matchesQuery(className, object, objects, constraints[i2])) { return true; } } return false; } if (key2 === "$and") { for (i2 = 0; i2 < constraints.length; i2++) { if (!matchesQuery(className, object, objects, constraints[i2])) { return false; } } return true; } if (key2 === "$nor") { for (i2 = 0; i2 < constraints.length; i2++) { if (matchesQuery(className, object, objects, constraints[i2])) { return false; } } return true; } if (key2 === "$relatedTo") { return false; } if (!/^[A-Za-z][0-9A-Za-z_]*$/.test(key2)) { throw new ParseError(ParseError.INVALID_KEY_NAME, `Invalid Key: ${key2}`); } if (typeof constraints !== "object") { if (Array.isArray(object[key2])) { return object[key2].indexOf(constraints) > -1; } return object[key2] === constraints; } let compareTo; if (constraints.__type) { if (constraints.__type === "Pointer") { return equalObjectsGeneric(object[key2], constraints, function(obj, ptr) { return typeof obj !== "undefined" && ptr.className === obj.className && ptr.objectId === obj.objectId; }); } return equalObjectsGeneric(decode(object[key2]), decode(constraints), equals); } for (const condition in constraints) { compareTo = constraints[condition]; if (compareTo?.__type) { compareTo = decode(compareTo); } if (compareTo?.["$relativeTime"]) { const parserResult = relativeTimeToDate(compareTo["$relativeTime"]); if (parserResult.status !== "success") { throw new ParseError( ParseError.INVALID_JSON, `bad $relativeTime (${key2}) value. ${parserResult.info}` ); } compareTo = parserResult.result; } if (toString.call(compareTo) === "[object Date]" || typeof compareTo === "string" && new Date(compareTo).toString() !== "Invalid Date") { object[key2] = new Date(object[key2].iso ? object[key2].iso : object[key2]); } switch (condition) { case "$lt": if (object[key2] >= compareTo) { return false; } break; case "$lte": if (object[key2] > compareTo) { return false; } break; case "$gt": if (object[key2] <= compareTo) { return false; } break; case "$gte": if (object[key2] < compareTo) { return false; } break; case "$ne": if (equals(object[key2], compareTo)) { return false; } break; case "$in": if (!contains(compareTo, object[key2])) { return false; } break; case "$nin": if (contains(compareTo, object[key2])) { return false; } break; case "$all": for (i2 = 0; i2 < compareTo.length; i2++) { if (object[key2].indexOf(compareTo[i2]) < 0) { return false; } } break; case "$exists": { const propertyExists = typeof object[key2] !== "undefined"; const existenceIsRequired = constraints["$exists"]; if (typeof constraints["$exists"] !== "boolean") { break; } if (!propertyExists && existenceIsRequired || propertyExists && !existenceIsRequired) { return false; } break; } case "$regex": { if (typeof compareTo === "object") { return compareTo.test(object[key2]); } let expString = ""; let escapeEnd = -2; let escapeStart = compareTo.indexOf("\\Q"); while (escapeStart > -1) { expString += compareTo.substring(escapeEnd + 2, escapeStart); escapeEnd = compareTo.indexOf("\\E", escapeStart); if (escapeEnd > -1) { expString += compareTo.substring(escapeStart + 2, escapeEnd).replace(/\\\\\\\\E/g, "\\E").replace(/\W/g, "\\$&"); } escapeStart = compareTo.indexOf("\\Q", escapeEnd); } expString += compareTo.substring(Math.max(escapeStart, escapeEnd + 2)); let modifiers = constraints.$options || ""; modifiers = modifiers.replace("x", "").replace("s", ""); const exp = new RegExp(expString, modifiers); if (!exp.test(object[key2])) { return false; } break; } case "$nearSphere": { if (!compareTo || !object[key2]) { return false; } const distance = compareTo.radiansTo(object[key2]); const max2 = constraints.$maxDistance || Infinity; return distance <= max2; } case "$within": { if (!compareTo || !object[key2]) { return false; } const southWest = compareTo.$box[0]; const northEast = compareTo.$box[1]; if (southWest.latitude > northEast.latitude || southWest.longitude > northEast.longitude) { return false; } return object[key2].latitude > southWest.latitude && object[key2].latitude < northEast.latitude && object[key2].longitude > southWest.longitude && object[key2].longitude < northEast.longitude; } case "$options": break; case "$maxDistance": break; case "$select": { const subQueryObjects = objects.filter((obj, _index, arr) => { return matchesQuery(compareTo.query.className, obj, arr, compareTo.query.where); }); for (let i22 = 0; i22 < subQueryObjects.length; i22 += 1) { const subObject = transformObject(subQueryObjects[i22]); return equals(object[key2], subObject[compareTo.key]); } return false; } case "$dontSelect": { const subQueryObjects = objects.filter((obj, _index, arr) => { return matchesQuery(compareTo.query.className, obj, arr, compareTo.query.where); }); for (let i22 = 0; i22 < subQueryObjects.length; i22 += 1) { const subObject = transformObject(subQueryObjects[i22]); return !equals(object[key2], subObject[compareTo.key]); } return false; } case "$inQuery": { const subQueryObjects = objects.filter((obj, _index, arr) => { return matchesQuery(compareTo.className, obj, arr, compareTo.where); }); for (let i22 = 0; i22 < subQueryObjects.length; i22 += 1) { const subObject = transformObject(subQueryObjects[i22]); if (object[key2].className === subObject.className && object[key2].objectId === subObject.objectId) { return true; } } return false; } case "$notInQuery": { const subQueryObjects = objects.filter((obj, _index, arr) => { return matchesQuery(compareTo.className, obj, arr, compareTo.where); }); for (let i22 = 0; i22 < subQueryObjects.length; i22 += 1) { const subObject = transformObject(subQueryObjects[i22]); if (object[key2].className === subObject.className && object[key2].objectId === subObject.objectId) { return false; } } return true; } case "$containedBy": { for (const value of object[key2]) { if (!contains(compareTo, value)) { return false; } } return true; } case "$geoWithin": { if (compareTo.$polygon) { const points = compareTo.$polygon.map((geoPoint) => [ geoPoint.latitude, geoPoint.longitude ]); const polygon = new ParsePolygon(points); return polygon.containsPoint(object[key2]); } if (compareTo.$centerSphere) { const [WGS84Point, maxDistance] = compareTo.$centerSphere; const centerPoint = new ParseGeoPoint({ latitude: WGS84Point[1], longitude: WGS84Point[0] }); const point = new ParseGeoPoint(object[key2]); const distance = point.radiansTo(centerPoint); return distance <= maxDistance; } return false; } case "$geoIntersects": { const polygon = new ParsePolygon(object[key2].coordinates); const point = new ParseGeoPoint(compareTo.$point); return polygon.containsPoint(point); } default: return false; } } return true; } function validateQuery(query) { let q = query; if (query.toJSON) { q = query.toJSON().where; } const specialQuerykeys = [ "$and", "$or", "$nor", "_rperm", "_wperm", "_perishable_token", "_email_verify_token", "_email_verify_token_expires_at", "_account_lockout_expires_at", "_failed_login_count" ]; Object.keys(q).forEach((key2) => { if (q && q[key2] && q[key2].$regex) { if (typeof q[key2].$options === "string") { if (!q[key2].$options.match(/^[imxs]+$/)) { throw new ParseError( ParseError.INVALID_QUERY, `Bad $options value for query: ${q[key2].$options}` ); } } } if (specialQuerykeys.indexOf(key2) < 0 && !key2.match(/^[a-zA-Z][a-zA-Z0-9_\.]*$/)) { throw new ParseError(ParseError.INVALID_KEY_NAME, `Invalid key name: ${key2}`); } }); } const OfflineQuery = { matchesQuery, validateQuery }; function quote(s) { return "\\Q" + s.replace("\\E", "\\E\\\\E\\Q") + "\\E"; } function _getClassNameFromQueries(queries) { let className = null; queries.forEach((q) => { if (!className) { className = q.className; } if (className !== q.className) { throw new Error("All queries must be for the same class."); } }); return className; } function handleSelectResult(data, select) { const serverDataMask = {}; select.forEach((field) => { const hasSubObjectSelect = field.indexOf(".") !== -1; if (!hasSubObjectSelect && !Object.hasOwn(data, field)) { data[field] = void 0; } else if (hasSubObjectSelect) { const pathComponents = field.split("."); let obj = data; let serverMask = serverDataMask; pathComponents.forEach((component, index, arr) => { if (obj && !Object.hasOwn(obj, component)) { obj[component] = void 0; } if (obj && typeof obj === "object") { obj = obj[component]; } if (index < arr.length - 1) { if (!serverMask[component]) { serverMask[component] = {}; } serverMask = serverMask[component]; } }); } }); if (Object.keys(serverDataMask).length > 0) { const serverData = CoreManager.getObjectStateController().getServerData({ id: data.objectId, className: data.className }); copyMissingDataWithMask(serverData, data, serverDataMask, false); } } function copyMissingDataWithMask(src, dest, mask, copyThisLevel) { if (copyThisLevel) { for (const key2 in src) { if (Object.hasOwn(src, key2) && !Object.hasOwn(dest, key2)) { dest[key2] = src[key2]; } } } for (const key2 in mask) { if (dest[key2] !== void 0 && dest[key2] !== null && src !== void 0 && src !== null) { copyMissingDataWithMask(src[key2], dest[key2], mask[key2], true); } } } function handleOfflineSort(a, b, sorts) { let order = sorts[0]; const operator = order.slice(0, 1); const isDescending = operator === "-"; if (isDescending) { order = order.substring(1); } if (order === "_created_at") { order = "createdAt"; } if (order === "_updated_at") { order = "updatedAt"; } if (!/^[A-Za-z][0-9A-Za-z_]*$/.test(order) || order === "password") { throw new ParseError(ParseError.INVALID_KEY_NAME, `Invalid Key: ${order}`); } const field1 = a.get(order); const field2 = b.get(order); if (field1 < field2) { return isDescending ? 1 : -1; } if (field1 > field2) { return isDescending ? -1 : 1; } if (sorts.length > 1) { const remainingSorts = sorts.slice(1); return handleOfflineSort(a, b, remainingSorts); } return 0; } class ParseQuery { /** * @param {(string | Parse.Object)} objectClass An instance of a subclass of Parse.Object, or a Parse className string. */ constructor(objectClass) { if (typeof objectClass === "string") { if (objectClass === "User" && CoreManager.get("PERFORM_USER_REWRITE")) { this.className = "_User"; } else { this.className = objectClass; } } else if (objectClass instanceof ParseObject) { this.className = objectClass.className; } else if (typeof objectClass === "function") { const objClass = objectClass; if (typeof objClass.className === "string") { this.className = objClass.className; } else { const obj = new objClass(); this.className = obj.className; } } else { throw new TypeError("A ParseQuery must be constructed with a ParseObject or class name."); } this._where = {}; this._watch = []; this._include = []; this._exclude = []; this._count = false; this._limit = -1; this._skip = 0; this._readPreference = null; this._includeReadPreference = null; this._subqueryReadPreference = null; this._queriesLocalDatastore = false; this._localDatastorePinName = null; this._extraOptions = {}; this._xhrRequest = { task: null, onchange: () => { } }; this._comment = null; } /** * Adds constraint that at least one of the passed in queries matches. * * @param {Array} queries * @returns {Parse.Query} Returns the query, so you can chain this call. */ _orQuery(queries) { const queryJSON = queries.map((q) => { return q.toJSON().where; }); this._where.$or = queryJSON; return this; } /** * Adds constraint that all of the passed in queries match. * * @param {Array} queries * @returns {Parse.Query} Returns the query, so you can chain this call. */ _andQuery(queries) { const queryJSON = queries.map((q) => { return q.toJSON().where; }); this._where.$and = queryJSON; return this; } /** * Adds constraint that none of the passed in queries match. * * @param {Array} queries * @returns {Parse.Query} Returns the query, so you can chain this call. */ _norQuery(queries) { const queryJSON = queries.map((q) => { return q.toJSON().where; }); this._where.$nor = queryJSON; return this; } /** * Helper for condition queries * * @param key * @param condition * @param value * @returns {Parse.Query} */ _addCondition(key2, condition, value) { if (!this._where[key2] || typeof this._where[key2] === "string") { this._where[key2] = {}; } this._where[key2][condition] = encode$1(value, false, true); return this; } /** * Converts string for regular expression at the beginning * * @param string * @returns {string} */ _regexStartWith(string) { return "^" + quote(string); } async _handleOfflineQuery(params) { OfflineQuery.validateQuery(this); const localDatastore = CoreManager.getLocalDatastore(); const objects = await localDatastore._serializeObjectsFromPinName(this._localDatastorePinName); let results = objects.map((json, _index, arr) => { const object = ParseObject.fromJSON(json, false); if (json._localId && !json.objectId) { object._localId = json._localId; } if (!OfflineQuery.matchesQuery(this.className, object, arr, this)) { return null; } return object; }).filter((object) => object !== null); if (params.keys) { let keys2 = params.keys.split(","); const alwaysSelectedKeys = ["className", "objectId", "createdAt", "updatedAt", "ACL"]; keys2 = keys2.concat(alwaysSelectedKeys); results = results.map((object) => { const json = object._toFullJSON(); Object.keys(json).forEach((key2) => { if (!keys2.includes(key2)) { delete json[key2]; } }); return ParseObject.fromJSON(json, false); }); } if (params.order) { const sorts = params.order.split(","); results.sort((a, b) => { return handleOfflineSort(a, b, sorts); }); } let count; if (params.count) { count = results.length; } if (params.skip) { if (params.skip >= results.length) { results = []; } else { results = results.splice(params.skip, results.length); } } let limit = results.length; if (params.limit !== 0 && params.limit < results.length) { limit = params.limit; } results = results.splice(0, limit); if (typeof count === "number") { return { results, count }; } return results; } /** * Returns a JSON representation of this query. * * @returns {object} The JSON representation of the query. */ toJSON() { const params = { where: this._where }; if (this._watch.length) { params.watch = this._watch.join(","); } if (this._include.length) { params.include = this._include.join(","); } if (this._exclude.length) { params.excludeKeys = this._exclude.join(","); } if (this._select) { params.keys = this._select.join(","); } if (this._count) { params.count = 1; } if (this._limit >= 0) { params.limit = this._limit; } if (this._skip > 0) { params.skip = this._skip; } if (this._order) { params.order = this._order.join(","); } if (this._readPreference) { params.readPreference = this._readPreference; } if (this._includeReadPreference) { params.includeReadPreference = this._includeReadPreference; } if (this._subqueryReadPreference) { params.subqueryReadPreference = this._subqueryReadPreference; } if (this._hint) { params.hint = this._hint; } if (this._explain) { params.explain = true; } if (this._comment) { params.comment = this._comment; } for (const key2 in this._extraOptions) { params[key2] = this._extraOptions[key2]; } return params; } /** * Return a query with conditions from json, can be useful to send query from server side to client * Not static, all query conditions was set before calling this method will be deleted. * For example on the server side we have * var query = new Parse.Query("className"); * query.equalTo(key: value); * query.limit(100); * ... (others queries) * Create JSON representation of Query Object * var jsonFromServer = query.fromJSON(); * * On client side getting query: * var query = new Parse.Query("className"); * query.fromJSON(jsonFromServer); * * and continue to query... * query.skip(100).find().then(...); * * @param {QueryJSON} json from Parse.Query.toJSON() method * @returns {Parse.Query} Returns the query, so you can chain this call. */ withJSON(json) { if (json.where) { this._where = json.where; } if (json.watch) { this._watch = json.watch.split(","); } if (json.include) { this._include = json.include.split(","); } if (json.keys) { this._select = json.keys.split(","); } if (json.excludeKeys) { this._exclude = json.excludeKeys.split(","); } if (json.count) { this._count = json.count === 1; } if (json.limit) { this._limit = json.limit; } if (json.skip) { this._skip = json.skip; } if (json.order) { this._order = json.order.split(","); } if (json.readPreference) { this._readPreference = json.readPreference; } if (json.includeReadPreference) { this._includeReadPreference = json.includeReadPreference; } if (json.subqueryReadPreference) { this._subqueryReadPreference = json.subqueryReadPreference; } if (json.hint) { this._hint = json.hint; } if (json.explain) { this._explain = !!json.explain; } if (json.comment) { this._comment = json.comment; } for (const key2 in json) { if (Object.hasOwn(json, key2)) { if ([ "where", "include", "keys", "count", "limit", "skip", "order", "readPreference", "includeReadPreference", "subqueryReadPreference", "hint", "explain", "comment" ].indexOf(key2) === -1) { this._extraOptions[key2] = json[key2]; } } } return this; } /** * Static method to restore Parse.Query by json representation * Internally calling Parse.Query.withJSON * * @param {string} className * @param {QueryJSON} json from Parse.Query.toJSON() method * @returns {Parse.Query} new created query */ static fromJSON(className, json) { const query = new ParseQuery(className); return query.withJSON(json); } /** * Constructs a Parse.Object whose id is already known by fetching data from * the server. Unlike the first method, it never returns undefined. * * @param {string} objectId The id of the object to be fetched. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. *
    • json: Return raw json without converting to Parse.Object *
    * @returns {Promise} A promise that is resolved with the result when * the query completes. */ get(objectId, options) { this.equalTo("objectId", objectId); const firstOptions = ParseObject._getRequestOptions(options); return this.first(firstOptions).then((response) => { if (response) { return response; } const errorObject = new ParseError(ParseError.OBJECT_NOT_FOUND, "Object not found."); return Promise.reject(errorObject); }); } /** * Retrieves a list of ParseObjects that satisfy this query. * * @param {object} options Valid options * are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. *
    • json: Return raw json without converting to Parse.Object *
    * @returns {Promise} A promise that is resolved with the results when * the query completes. */ find(options) { const findOptions = ParseObject._getRequestOptions(options); this._setRequestTask(findOptions); const controller = CoreManager.getQueryController(); const select = this._select; if (this._queriesLocalDatastore) { return this._handleOfflineQuery(this.toJSON()); } return controller.find(this.className, this.toJSON(), findOptions).then((response) => { if (this._explain) { return response.results; } const results = response.results?.map((data) => { const override = response.className || this.className; if (!data.className) { data.className = override; } if (select) { handleSelectResult(data, select); } if (findOptions.json) { return data; } else { return ParseObject.fromJSON(data, !select); } }); const count = response.count; if (typeof count === "number") { return { results, count }; } else { return results; } }); } /** * Retrieves a complete list of ParseObjects that satisfy this query. * Using `eachBatch` under the hood to fetch all the valid objects. * * @param {object} options Valid options are:
      *
    • batchSize: How many objects to yield in each batch (default: 100) *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • json: Return raw JSON without converting to Parse.Object. *
    * @returns {Promise} A promise that is resolved with the results when * the query completes. */ async findAll(options) { let result = []; await this.eachBatch((objects) => { result = [...result, ...objects]; }, options); return result; } /** * Counts the number of objects that match this query. * * @param {object} options * @param {boolean} [options.useMasterKey] * @param {string} [options.sessionToken] * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @returns {Promise} A promise that is resolved with the count when * the query completes. */ count(options) { options = options || {}; const findOptions = ParseObject._getRequestOptions(options); this._setRequestTask(findOptions); const controller = CoreManager.getQueryController(); const params = this.toJSON(); params.limit = 0; params.count = 1; return controller.find(this.className, params, findOptions).then((result) => { return result.count; }); } /** * Executes a distinct query and returns unique values * * @param {string} key A field to find distinct values * @returns {Promise} A promise that is resolved with the query completes. */ distinct(key2) { const distinctOptions = { useMasterKey: true }; this._setRequestTask(distinctOptions); const params = { distinct: key2, where: this._where, hint: this._hint }; const controller = CoreManager.getQueryController(); return controller.aggregate(this.className, params, distinctOptions).then((results) => { return results.results; }); } /** * Executes an aggregate query and returns aggregate results * * @param {(Array|object)} pipeline Array or Object of stages to process query * @returns {Promise} A promise that is resolved with the query completes. */ aggregate(pipeline) { if (!Array.isArray(pipeline) && typeof pipeline !== "object") { throw new Error("Invalid pipeline must be Array or Object"); } if (Object.keys(this._where || {}).length) { if (!Array.isArray(pipeline)) { pipeline = [pipeline]; } pipeline.unshift({ $match: this._where }); } const params = { pipeline, hint: this._hint, explain: this._explain, readPreference: this._readPreference }; const aggregateOptions = { useMasterKey: true }; this._setRequestTask(aggregateOptions); const controller = CoreManager.getQueryController(); return controller.aggregate(this.className, params, aggregateOptions).then((results) => { return results.results; }); } /** * Retrieves at most one Parse.Object that satisfies this query. * * Returns the object if there is one, otherwise undefined. * * @param {object} options Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. *
    • json: Return raw json without converting to Parse.Object *
    * @returns {Promise} A promise that is resolved with the object when * the query completes. */ first(options = {}) { const findOptions = ParseObject._getRequestOptions(options); this._setRequestTask(findOptions); const controller = CoreManager.getQueryController(); const params = this.toJSON(); params.limit = 1; const select = this._select; if (this._queriesLocalDatastore) { return this._handleOfflineQuery(params).then((objects) => { if (!objects[0]) { return void 0; } return objects[0]; }); } return controller.find(this.className, params, findOptions).then((response) => { const objects = response.results; if (!objects[0]) { return void 0; } if (!objects[0].className) { objects[0].className = this.className; } if (select) { handleSelectResult(objects[0], select); } if (findOptions.json) { return objects[0]; } else { return ParseObject.fromJSON(objects[0], !select); } }); } /** * Iterates over objects matching a query, calling a callback for each batch. * If the callback returns a promise, the iteration will not continue until * that promise has been fulfilled. If the callback returns a rejected * promise, then iteration will stop with that error. The items are processed * in an unspecified order. The query may not have any sort order, and may * not use limit or skip. * * @param {Function} callback Callback that will be called with each result * of the query. * @param {object} options Valid options are:
      *
    • batchSize: How many objects to yield in each batch (default: 100) *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • context: A dictionary that is accessible in Cloud Code `beforeFind` trigger. *
    * @returns {Promise} A promise that will be fulfilled once the * iteration has completed. */ eachBatch(callback, options) { options = options || {}; if (this._order || this._skip || this._limit >= 0) { const error = "Cannot iterate on a query with sort, skip, or limit."; return Promise.reject(error); } const query = ParseQuery.fromJSON(this.className, this.toJSON()); query.ascending("objectId"); query._limit = options.batchSize || 100; const findOptions = ParseObject._getRequestOptions(options); let finished = false; let previousResults = []; return continueWhile( () => { return !finished; }, async () => { const [results] = await Promise.all([ query.find(findOptions), Promise.resolve(previousResults.length > 0 && callback(previousResults)) ]); if (results.length >= query._limit) { if (findOptions.json) { query.greaterThan("objectId", results[results.length - 1].objectId); } else { query.greaterThan("objectId", results[results.length - 1].id); } previousResults = results; } else if (results.length > 0) { await Promise.resolve(callback(results)); finished = true; } else { finished = true; } } ); } /** * Iterates over each result of a query, calling a callback for each one. If * the callback returns a promise, the iteration will not continue until * that promise has been fulfilled. If the callback returns a rejected * promise, then iteration will stop with that error. The items are * processed in an unspecified order. The query may not have any sort order, * and may not use limit or skip. * * @param {Function} callback Callback that will be called with each result * of the query. * @param {object} options Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    • json: Return raw json without converting to Parse.Object *
    * @returns {Promise} A promise that will be fulfilled once the * iteration has completed. */ each(callback, options) { return this.eachBatch((results) => { let callbacksDone = Promise.resolve(); results.forEach((result) => { callbacksDone = callbacksDone.then(() => { return callback(result); }); }); return callbacksDone; }, options); } /** * Adds a hint to force index selection. (https://docs.mongodb.com/manual/reference/operator/meta/hint/) * * @param {(string|object)} value String or Object of index that should be used when executing query * @returns {Parse.Query} Returns the query, so you can chain this call. */ hint(value) { if (typeof value === "undefined") { delete this._hint; } this._hint = value; return this; } /** * Investigates the query execution plan. Useful for optimizing queries. (https://docs.mongodb.com/manual/reference/operator/meta/explain/) * * @param {boolean} explain Used to toggle the information on the query plan. * @returns {Parse.Query} Returns the query, so you can chain this call. */ explain(explain = true) { if (typeof explain !== "boolean") { throw new Error("You can only set explain to a boolean value"); } this._explain = explain; return this; } /** * Iterates over each result of a query, calling a callback for each one. If * the callback returns a promise, the iteration will not continue until * that promise has been fulfilled. If the callback returns a rejected * promise, then iteration will stop with that error. The items are * processed in an unspecified order. The query may not have any sort order, * and may not use limit or skip. * * @param {Function} callback Callback
      *
    • currentObject: The current Parse.Object being processed in the array.
    • *
    • index: The index of the current Parse.Object being processed in the array.
    • *
    • query: The query map was called upon.
    • *
    * @param {object} options Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @returns {Promise} A promise that will be fulfilled once the * iteration has completed. */ async map(callback, options) { const array = []; let index = 0; await this.each((object) => { return Promise.resolve(callback(object, index, this)).then((result) => { array.push(result); index += 1; }); }, options); return array; } /** * Iterates over each result of a query, calling a callback for each one. If * the callback returns a promise, the iteration will not continue until * that promise has been fulfilled. If the callback returns a rejected * promise, then iteration will stop with that error. The items are * processed in an unspecified order. The query may not have any sort order, * and may not use limit or skip. * * @param {Function} callback Callback
      *
    • accumulator: The accumulator accumulates the callback's return values. It is the accumulated value previously returned in the last invocation of the callback.
    • *
    • currentObject: The current Parse.Object being processed in the array.
    • *
    • index: The index of the current Parse.Object being processed in the array.
    • *
    * @param {*} initialValue A value to use as the first argument to the first call of the callback. If no initialValue is supplied, the first object in the query will be used and skipped. * @param {object} options Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @returns {Promise} A promise that will be fulfilled once the * iteration has completed. */ async reduce(callback, initialValue, options) { let accumulator = initialValue; let index = 0; await this.each((object) => { if (index === 0 && initialValue === void 0) { accumulator = object; index += 1; return; } return Promise.resolve(callback(accumulator, object, index)).then((result) => { accumulator = result; index += 1; }); }, options); if (index === 0 && initialValue === void 0) { throw new TypeError("Reducing empty query result set with no initial value"); } return accumulator; } /** * Iterates over each result of a query, calling a callback for each one. If * the callback returns a promise, the iteration will not continue until * that promise has been fulfilled. If the callback returns a rejected * promise, then iteration will stop with that error. The items are * processed in an unspecified order. The query may not have any sort order, * and may not use limit or skip. * * @param {Function} callback Callback
      *
    • currentObject: The current Parse.Object being processed in the array.
    • *
    • index: The index of the current Parse.Object being processed in the array.
    • *
    • query: The query filter was called upon.
    • *
    * @param {object} options Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • sessionToken: A valid session token, used for making a request on * behalf of a specific user. *
    * @returns {Promise} A promise that will be fulfilled once the * iteration has completed. */ async filter(callback, options) { const array = []; let index = 0; await this.each((object) => { return Promise.resolve(callback(object, index, this)).then((flag) => { if (flag) { array.push(object); } index += 1; }); }, options); return array; } /* Query Conditions */ /** * Adds a constraint to the query that requires a particular key's value to * be equal to the provided value. * * @param {string} key The key to check. * @param value The value that the Parse.Object must contain. * @returns {Parse.Query} Returns the query, so you can chain this call. */ equalTo(key2, value) { if (key2 && typeof key2 === "object") { Object.entries(key2).forEach(([k, val]) => this.equalTo(k, val)); return this; } if (typeof value === "undefined") { return this.doesNotExist(key2); } this._where[key2] = encode$1(value, false, true); return this; } /** * Adds a constraint to the query that requires a particular key's value to * be not equal to the provided value. * * @param {string} key The key to check. * @param value The value that must not be equalled. * @returns {Parse.Query} Returns the query, so you can chain this call. */ notEqualTo(key2, value) { if (key2 && typeof key2 === "object") { Object.entries(key2).forEach(([k, val]) => this.notEqualTo(k, val)); return this; } return this._addCondition(key2, "$ne", value); } /** * Adds a constraint to the query that requires a particular key's value to * be less than the provided value. * * @param {string} key The key to check. * @param value The value that provides an upper bound. * @returns {Parse.Query} Returns the query, so you can chain this call. */ lessThan(key2, value) { return this._addCondition(key2, "$lt", value); } /** * Adds a constraint to the query that requires a particular key's value to * be greater than the provided value. * * @param {string} key The key to check. * @param value The value that provides an lower bound. * @returns {Parse.Query} Returns the query, so you can chain this call. */ greaterThan(key2, value) { return this._addCondition(key2, "$gt", value); } /** * Adds a constraint to the query that requires a particular key's value to * be less than or equal to the provided value. * * @param {string} key The key to check. * @param value The value that provides an upper bound. * @returns {Parse.Query} Returns the query, so you can chain this call. */ lessThanOrEqualTo(key2, value) { return this._addCondition(key2, "$lte", value); } /** * Adds a constraint to the query that requires a particular key's value to * be greater than or equal to the provided value. * * @param {string} key The key to check. * @param {*} value The value that provides an lower bound. * @returns {Parse.Query} Returns the query, so you can chain this call. */ greaterThanOrEqualTo(key2, value) { return this._addCondition(key2, "$gte", value); } /** * Adds a constraint to the query that requires a particular key's value to * be contained in the provided list of values. * * @param {string} key The key to check. * @param {Array<*>} values The values that will match. * @returns {Parse.Query} Returns the query, so you can chain this call. */ containedIn(key2, values) { return this._addCondition(key2, "$in", values); } /** * Adds a constraint to the query that requires a particular key's value to * not be contained in the provided list of values. * * @param {string} key The key to check. * @param {Array<*>} values The values that will not match. * @returns {Parse.Query} Returns the query, so you can chain this call. */ notContainedIn(key2, values) { return this._addCondition(key2, "$nin", values); } /** * Adds a constraint to the query that requires a particular key's value to * be contained by the provided list of values. Get objects where all array elements match. * * @param {string} key The key to check. * @param {Array} values The values that will match. * @returns {Parse.Query} Returns the query, so you can chain this call. */ containedBy(key2, values) { return this._addCondition(key2, "$containedBy", values); } /** * Adds a constraint to the query that requires a particular key's value to * contain each one of the provided list of values. * * @param {string} key The key to check. This key's value must be an array. * @param {Array} values The values that will match. * @returns {Parse.Query} Returns the query, so you can chain this call. */ containsAll(key2, values) { return this._addCondition(key2, "$all", values); } /** * Adds a constraint to the query that requires a particular key's value to * contain each one of the provided list of values starting with given strings. * * @param {string} key The key to check. This key's value must be an array. * @param {Array} values The string values that will match as starting string. * @returns {Parse.Query} Returns the query, so you can chain this call. */ containsAllStartingWith(key2, values) { if (!Array.isArray(values)) { values = [values]; } const regexObject = values.map((value) => { return { $regex: this._regexStartWith(value) }; }); return this.containsAll(key2, regexObject); } /** * Adds a constraint for finding objects that contain the given key. * * @param {string} key The key that should exist. * @returns {Parse.Query} Returns the query, so you can chain this call. */ exists(key2) { return this._addCondition(key2, "$exists", true); } /** * Adds a constraint for finding objects that do not contain a given key. * * @param {string} key The key that should not exist * @returns {Parse.Query} Returns the query, so you can chain this call. */ doesNotExist(key2) { return this._addCondition(key2, "$exists", false); } /** * Adds a regular expression constraint for finding string values that match * the provided regular expression. * This may be slow for large datasets. * * @param {string} key The key that the string to match is stored in. * @param {RegExp | string} regex The regular expression pattern to match. * @param {string} modifiers The regular expression mode. * @returns {Parse.Query} Returns the query, so you can chain this call. */ matches(key2, regex, modifiers) { this._addCondition(key2, "$regex", regex); if (!modifiers) { modifiers = ""; } if (typeof regex !== "string") { if (regex.ignoreCase) { modifiers += "i"; } if (regex.multiline) { modifiers += "m"; } } if (modifiers.length) { this._addCondition(key2, "$options", modifiers); } return this; } /** * Adds a constraint that requires that a key's value matches a Parse.Query * constraint. * * @param {string} key The key that the contains the object to match the * query. * @param {Parse.Query} query The query that should match. * @returns {Parse.Query} Returns the query, so you can chain this call. */ matchesQuery(key2, query) { const queryJSON = query.toJSON(); queryJSON.className = query.className; return this._addCondition(key2, "$inQuery", queryJSON); } /** * Adds a constraint that requires that a key's value not matches a * Parse.Query constraint. * * @param {string} key The key that the contains the object to match the * query. * @param {Parse.Query} query The query that should not match. * @returns {Parse.Query} Returns the query, so you can chain this call. */ doesNotMatchQuery(key2, query) { const queryJSON = query.toJSON(); queryJSON.className = query.className; return this._addCondition(key2, "$notInQuery", queryJSON); } /** * Adds a constraint that requires that a key's value matches a value in * an object returned by a different Parse.Query. * * @param {string} key The key that contains the value that is being * matched. * @param {string} queryKey The key in the objects returned by the query to * match against. * @param {Parse.Query} query The query to run. * @returns {Parse.Query} Returns the query, so you can chain this call. */ matchesKeyInQuery(key2, queryKey, query) { const queryJSON = query.toJSON(); queryJSON.className = query.className; return this._addCondition(key2, "$select", { key: queryKey, query: queryJSON }); } /** * Adds a constraint that requires that a key's value not match a value in * an object returned by a different Parse.Query. * * @param {string} key The key that contains the value that is being * excluded. * @param {string} queryKey The key in the objects returned by the query to * match against. * @param {Parse.Query} query The query to run. * @returns {Parse.Query} Returns the query, so you can chain this call. */ doesNotMatchKeyInQuery(key2, queryKey, query) { const queryJSON = query.toJSON(); queryJSON.className = query.className; return this._addCondition(key2, "$dontSelect", { key: queryKey, query: queryJSON }); } /** * Adds a constraint for finding string values that contain a provided * string. This may be slow for large datasets. * * @param {string} key The key that the string to match is stored in. * @param {string} substring The substring that the value must contain. * @returns {Parse.Query} Returns the query, so you can chain this call. */ contains(key2, substring) { if (typeof substring !== "string") { throw new Error("The value being searched for must be a string."); } return this._addCondition(key2, "$regex", quote(substring)); } /** * Adds a constraint for finding string values that contain a provided * string. This may be slow for large datasets. Requires Parse-Server > 2.5.0 * * In order to sort you must use select and ascending ($score is required) *
         *   query.fullText('field', 'term');
         *   query.ascending('$score');
         *   query.select('$score');
         *  
    * * To retrieve the weight / rank *
         *   object->get('score');
         *  
    * * You can define optionals by providing an object as a third parameter *
         *   query.fullText('field', 'term', { language: 'es', diacriticSensitive: true });
         *  
    * * @param {string} key The key that the string to match is stored in. * @param {string} value The string to search * @param {object} options (Optional) * @param {string} options.language The language that determines the list of stop words for the search and the rules for the stemmer and tokenizer. * @param {boolean} options.caseSensitive A boolean flag to enable or disable case sensitive search. * @param {boolean} options.diacriticSensitive A boolean flag to enable or disable diacritic sensitive search. * @returns {Parse.Query} Returns the query, so you can chain this call. */ fullText(key2, value, options) { options = options || {}; if (!key2) { throw new Error("A key is required."); } if (!value) { throw new Error("A search term is required"); } if (typeof value !== "string") { throw new Error("The value being searched for must be a string."); } const fullOptions = {}; fullOptions.$term = value; for (const option in options) { switch (option) { case "language": fullOptions.$language = options[option]; break; case "caseSensitive": fullOptions.$caseSensitive = options[option]; break; case "diacriticSensitive": fullOptions.$diacriticSensitive = options[option]; break; default: throw new Error(`Unknown option: ${option}`); } } return this._addCondition(key2, "$text", { $search: fullOptions }); } /** * Method to sort the full text search by text score * * @returns {Parse.Query} Returns the query, so you can chain this call. */ sortByTextScore() { this.ascending("$score"); this.select(["$score"]); return this; } /** * Adds a constraint for finding string values that start with a provided * string. This query will use the backend index, so it will be fast even * for large datasets. * * @param {string} key The key that the string to match is stored in. * @param {string} prefix The substring that the value must start with. * @param {string} modifiers The regular expression mode. * @returns {Parse.Query} Returns the query, so you can chain this call. */ startsWith(key2, prefix, modifiers) { if (typeof prefix !== "string") { throw new Error("The value being searched for must be a string."); } return this.matches(key2, this._regexStartWith(prefix), modifiers); } /** * Adds a constraint for finding string values that end with a provided * string. This will be slow for large datasets. * * @param {string} key The key that the string to match is stored in. * @param {string} suffix The substring that the value must end with. * @param {string} modifiers The regular expression mode. * @returns {Parse.Query} Returns the query, so you can chain this call. */ endsWith(key2, suffix, modifiers) { if (typeof suffix !== "string") { throw new Error("The value being searched for must be a string."); } return this.matches(key2, quote(suffix) + "$", modifiers); } /** * Adds a proximity based constraint for finding objects with key point * values near the point given. * * @param {string} key The key that the Parse.GeoPoint is stored in. * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. * @returns {Parse.Query} Returns the query, so you can chain this call. */ near(key2, point) { if (!(point instanceof ParseGeoPoint)) { point = new ParseGeoPoint(point); } return this._addCondition(key2, "$nearSphere", point); } /** * Adds a proximity based constraint for finding objects with key point * values near the point given and within the maximum distance given. * * @param {string} key The key that the Parse.GeoPoint is stored in. * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. * @param {number} maxDistance Maximum distance (in radians) of results to return. * @param {boolean} sorted A Bool value that is true if results should be * sorted by distance ascending, false is no sorting is required, * defaults to true. * @returns {Parse.Query} Returns the query, so you can chain this call. */ withinRadians(key2, point, maxDistance, sorted) { if (sorted || sorted === void 0) { this.near(key2, point); return this._addCondition(key2, "$maxDistance", maxDistance); } else { return this._addCondition(key2, "$geoWithin", { $centerSphere: [[point.longitude, point.latitude], maxDistance] }); } } /** * Adds a proximity based constraint for finding objects with key point * values near the point given and within the maximum distance given. * Radius of earth used is 3958.8 miles. * * @param {string} key The key that the Parse.GeoPoint is stored in. * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. * @param {number} maxDistance Maximum distance (in miles) of results to return. * @param {boolean} sorted A Bool value that is true if results should be * sorted by distance ascending, false is no sorting is required, * defaults to true. * @returns {Parse.Query} Returns the query, so you can chain this call. */ withinMiles(key2, point, maxDistance, sorted) { return this.withinRadians(key2, point, maxDistance / 3958.8, sorted); } /** * Adds a proximity based constraint for finding objects with key point * values near the point given and within the maximum distance given. * Radius of earth used is 6371.0 kilometers. * * @param {string} key The key that the Parse.GeoPoint is stored in. * @param {Parse.GeoPoint} point The reference Parse.GeoPoint that is used. * @param {number} maxDistance Maximum distance (in kilometers) of results to return. * @param {boolean} sorted A Bool value that is true if results should be * sorted by distance ascending, false is no sorting is required, * defaults to true. * @returns {Parse.Query} Returns the query, so you can chain this call. */ withinKilometers(key2, point, maxDistance, sorted) { return this.withinRadians(key2, point, maxDistance / 6371, sorted); } /** * Adds a constraint to the query that requires a particular key's * coordinates be contained within a given rectangular geographic bounding * box. * * @param {string} key The key to be constrained. * @param {Parse.GeoPoint} southwest * The lower-left inclusive corner of the box. * @param {Parse.GeoPoint} northeast * The upper-right inclusive corner of the box. * @returns {Parse.Query} Returns the query, so you can chain this call. */ withinGeoBox(key2, southwest, northeast) { if (!(southwest instanceof ParseGeoPoint)) { southwest = new ParseGeoPoint(southwest); } if (!(northeast instanceof ParseGeoPoint)) { northeast = new ParseGeoPoint(northeast); } this._addCondition(key2, "$within", { $box: [southwest, northeast] }); return this; } /** * Adds a constraint to the query that requires a particular key's * coordinates be contained within and on the bounds of a given polygon. * Supports closed and open (last point is connected to first) paths * * Polygon must have at least 3 points * * @param {string} key The key to be constrained. * @param {Array} points Array of Coordinates / GeoPoints * @returns {Parse.Query} Returns the query, so you can chain this call. */ withinPolygon(key2, points) { return this._addCondition(key2, "$geoWithin", { $polygon: points }); } /** * Add a constraint to the query that requires a particular key's * coordinates that contains a ParseGeoPoint * * @param {string} key The key to be constrained. * @param {Parse.GeoPoint} point * @returns {Parse.Query} Returns the query, so you can chain this call. */ polygonContains(key2, point) { return this._addCondition(key2, "$geoIntersects", { $point: point }); } /* Query Orderings */ /** * Sorts the results in ascending order by the given key. * * @param {(string|string[])} keys The key to order by, which is a * string of comma separated values, or an Array of keys, or multiple keys. * @returns {Parse.Query} Returns the query, so you can chain this call. */ ascending(...keys2) { this._order = []; return this.addAscending.apply(this, keys2); } /** * Sorts the results in ascending order by the given key, * but can also add secondary sort descriptors without overwriting _order. * * @param {(string|string[])} keys The key to order by, which is a * string of comma separated values, or an Array of keys, or multiple keys. * @returns {Parse.Query} Returns the query, so you can chain this call. */ addAscending(...keys2) { if (!this._order) { this._order = []; } keys2.forEach((key2) => { if (Array.isArray(key2)) { key2 = key2.join(); } this._order = this._order.concat(key2.replace(/\s/g, "").split(",")); }); return this; } /** * Sorts the results in descending order by the given key. * * @param {(string|string[])} keys The key to order by, which is a * string of comma separated values, or an Array of keys, or multiple keys. * @returns {Parse.Query} Returns the query, so you can chain this call. */ descending(...keys2) { this._order = []; return this.addDescending.apply(this, keys2); } /** * Sorts the results in descending order by the given key, * but can also add secondary sort descriptors without overwriting _order. * * @param {(string|string[])} keys The key to order by, which is a * string of comma separated values, or an Array of keys, or multiple keys. * @returns {Parse.Query} Returns the query, so you can chain this call. */ addDescending(...keys2) { if (!this._order) { this._order = []; } keys2.forEach((key2) => { if (Array.isArray(key2)) { key2 = key2.join(); } this._order = this._order.concat( key2.replace(/\s/g, "").split(",").map((k) => { return "-" + k; }) ); }); return this; } /* Query Options */ /** * Sets the number of results to skip before returning any results. * This is useful for pagination. * Default is to skip zero results. * * @param {number} n the number of results to skip. * @returns {Parse.Query} Returns the query, so you can chain this call. */ skip(n) { if (typeof n !== "number" || n < 0) { throw new Error("You can only skip by a positive number"); } this._skip = n; return this; } /** * Sets the limit of the number of results to return. The default limit is 100. * * @param {number} n the number of results to limit to. * @returns {Parse.Query} Returns the query, so you can chain this call. */ limit(n) { if (typeof n !== "number") { throw new Error("You can only set the limit to a numeric value"); } this._limit = n; return this; } /** * Sets the flag to include with response the total number of objects satisfying this query, * despite limits/skip. Might be useful for pagination. * Note that result of this query will be wrapped as an object with * `results`: holding {ParseObject} array and `count`: integer holding total number * * @param {boolean} includeCount false - disable, true - enable. * @returns {Parse.Query} Returns the query, so you can chain this call. */ withCount(includeCount = true) { if (typeof includeCount !== "boolean") { throw new Error("You can only set withCount to a boolean value"); } this._count = includeCount; return this; } /** * Includes nested Parse.Objects for the provided key. You can use dot * notation to specify which fields in the included object are also fetched. * * You can include all nested Parse.Objects by passing in '*'. * Requires Parse Server 3.0.0+ *
    query.include('*');
    * * @param {...string|Array} keys The name(s) of the key(s) to include. * @returns {Parse.Query} Returns the query, so you can chain this call. */ include(...keys2) { keys2.forEach((key2) => { if (Array.isArray(key2)) { this._include = this._include.concat(key2); } else { this._include.push(key2); } }); return this; } /** * Includes all nested Parse.Objects one level deep. * * Requires Parse Server 3.0.0+ * * @returns {Parse.Query} Returns the query, so you can chain this call. */ includeAll() { return this.include("*"); } /** * Restricts the fields of the returned Parse.Objects to include only the * provided keys. If this is called multiple times, then all of the keys * specified in each of the calls will be included. * * When selecting `authData` on `Parse.User`, only auth data of currently * configured auth providers is returned. Auth data of providers that are no * longer configured is not included. To return all auth data regardless of * the provider configuration, do not select `authData`. * * @param {...string|Array} keys The name(s) of the key(s) to include. * @returns {Parse.Query} Returns the query, so you can chain this call. */ select(...keys2) { if (!this._select) { this._select = []; } keys2.forEach((key2) => { if (Array.isArray(key2)) { this._select = this._select.concat(key2); } else { this._select.push(key2); } }); return this; } /** * Restricts the fields of the returned Parse.Objects to all keys except the * provided keys. Exclude takes precedence over select and include. * * Requires Parse Server 3.6.0+ * * @param {...string|Array} keys The name(s) of the key(s) to exclude. * @returns {Parse.Query} Returns the query, so you can chain this call. */ exclude(...keys2) { keys2.forEach((key2) => { if (Array.isArray(key2)) { this._exclude = this._exclude.concat(key2); } else { this._exclude.push(key2); } }); return this; } /** * Restricts live query to trigger only for watched fields. * * Requires Parse Server 6.0.0+ * * @param {...string|Array} keys The name(s) of the key(s) to watch. * @returns {Parse.Query} Returns the query, so you can chain this call. */ watch(...keys2) { keys2.forEach((key2) => { if (Array.isArray(key2)) { this._watch = this._watch.concat(key2); } else { this._watch.push(key2); } }); return this; } /** * Changes the read preference that the backend will use when performing the query to the database. * * @param {string} readPreference The read preference for the main query. * @param {string} includeReadPreference The read preference for the queries to include pointers. * @param {string} subqueryReadPreference The read preference for the sub queries. * @returns {Parse.Query} Returns the query, so you can chain this call. */ readPreference(readPreference, includeReadPreference, subqueryReadPreference) { this._readPreference = readPreference; this._includeReadPreference = includeReadPreference || null; this._subqueryReadPreference = subqueryReadPreference || null; return this; } /** * Subscribe this query to get liveQuery updates * * @param {string} sessionToken (optional) Defaults to the currentUser * @returns {Promise} Returns the liveQuerySubscription, it's an event emitter * which can be used to get liveQuery updates. */ async subscribe(sessionToken) { const currentUser = await CoreManager.getUserController().currentUserAsync(); if (!sessionToken) { sessionToken = currentUser ? currentUser.getSessionToken() || void 0 : void 0; } const liveQueryClient = await CoreManager.getLiveQueryController().getDefaultLiveQueryClient(); if (liveQueryClient.shouldOpen()) { liveQueryClient.open(); } const subscription = liveQueryClient.subscribe(this, sessionToken); return subscription.subscribePromise.then(() => { return subscription; }); } /** * Constructs a Parse.Query that is the OR of the passed in queries. For * example: *
    var compoundQuery = Parse.Query.or(query1, query2, query3);
    * * will create a compoundQuery that is an or of the query1, query2, and * query3. * * @param {...Parse.Query} queries The list of queries to OR. * @static * @returns {Parse.Query} The query that is the OR of the passed in queries. */ static or(...queries) { const className = _getClassNameFromQueries(queries); const query = new ParseQuery(className); query._orQuery(queries); return query; } /** * Constructs a Parse.Query that is the AND of the passed in queries. For * example: *
    var compoundQuery = Parse.Query.and(query1, query2, query3);
    * * will create a compoundQuery that is an and of the query1, query2, and * query3. * * @param {...Parse.Query} queries The list of queries to AND. * @static * @returns {Parse.Query} The query that is the AND of the passed in queries. */ static and(...queries) { const className = _getClassNameFromQueries(queries); const query = new ParseQuery(className); query._andQuery(queries); return query; } /** * Constructs a Parse.Query that is the NOR of the passed in queries. For * example: *
    const compoundQuery = Parse.Query.nor(query1, query2, query3);
    * * will create a compoundQuery that is a nor of the query1, query2, and * query3. * * @param {...Parse.Query} queries The list of queries to NOR. * @static * @returns {Parse.Query} The query that is the NOR of the passed in queries. */ static nor(...queries) { const className = _getClassNameFromQueries(queries); const query = new ParseQuery(className); query._norQuery(queries); return query; } /** * Change the source of this query to the server. * * @returns {Parse.Query} Returns the query, so you can chain this call. */ fromNetwork() { this._queriesLocalDatastore = false; this._localDatastorePinName = null; return this; } /** * Changes the source of this query to all pinned objects. * * @returns {Parse.Query} Returns the query, so you can chain this call. */ fromLocalDatastore() { return this.fromPinWithName(null); } /** * Changes the source of this query to the default group of pinned objects. * * @returns {Parse.Query} Returns the query, so you can chain this call. */ fromPin() { return this.fromPinWithName(DEFAULT_PIN); } /** * Changes the source of this query to a specific group of pinned objects. * * @param {string} name The name of query source. * @returns {Parse.Query} Returns the query, so you can chain this call. */ fromPinWithName(name) { const localDatastore = CoreManager.getLocalDatastore(); if (localDatastore.checkIfEnabled()) { this._queriesLocalDatastore = true; this._localDatastorePinName = name; } return this; } /** * Cancels the current network request (if any is running). * * @returns {Parse.Query} Returns the query, so you can chain this call. */ cancel() { if (this._xhrRequest.task && typeof this._xhrRequest.task.abort === "function") { this._xhrRequest.task._aborted = true; this._xhrRequest.task.abort(); this._xhrRequest.task = null; this._xhrRequest.onchange = () => { }; return this; } this._xhrRequest.onchange = () => this.cancel(); return this; } _setRequestTask(options) { options.requestTask = (task) => { this._xhrRequest.task = task; this._xhrRequest.onchange(); }; } /** * Sets a comment to the query so that the query * can be identified when using a the profiler for MongoDB. * * @param {string} value a comment can make your profile data easier to interpret and trace. * @returns {Parse.Query} Returns the query, so you can chain this call. */ comment(value) { if (value == null) { delete this._comment; return this; } if (typeof value !== "string") { throw new Error("The value of a comment to be sent with this query must be a string."); } this._comment = value; return this; } } const DefaultController$8 = { find(className, params, options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("GET", "classes/" + className, params, options); }, aggregate(className, params, options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("GET", "aggregate/" + className, params, options); } }; CoreManager.setParseQuery(ParseQuery); CoreManager.setQueryController(DefaultController$8); const Storage = { async() { const controller = CoreManager.getStorageController(); return !!controller.async; }, getItem(path) { const controller = CoreManager.getStorageController(); if (controller.async === 1) { throw new Error("Synchronous storage is not supported by the current storage controller"); } return controller.getItem(path); }, getItemAsync(path) { const controller = CoreManager.getStorageController(); if (controller.async === 1) { return controller.getItemAsync(path); } return Promise.resolve(controller.getItem(path)); }, setItem(path, value) { const controller = CoreManager.getStorageController(); if (controller.async === 1) { throw new Error("Synchronous storage is not supported by the current storage controller"); } return controller.setItem(path, value); }, setItemAsync(path, value) { const controller = CoreManager.getStorageController(); if (controller.async === 1) { return controller.setItemAsync(path, value); } return Promise.resolve(controller.setItem(path, value)); }, removeItem(path) { const controller = CoreManager.getStorageController(); if (controller.async === 1) { throw new Error("Synchronous storage is not supported by the current storage controller"); } return controller.removeItem(path); }, removeItemAsync(path) { const controller = CoreManager.getStorageController(); if (controller.async === 1) { return controller.removeItemAsync(path); } return Promise.resolve(controller.removeItem(path)); }, getAllKeys() { const controller = CoreManager.getStorageController(); if (controller.async === 1) { throw new Error("Synchronous storage is not supported by the current storage controller"); } return controller.getAllKeys(); }, getAllKeysAsync() { const controller = CoreManager.getStorageController(); if (controller.async === 1) { return controller.getAllKeysAsync(); } return Promise.resolve(controller.getAllKeys()); }, generatePath(path) { if (!CoreManager.get("APPLICATION_ID")) { throw new Error("You need to call Parse.initialize before using Parse."); } if (typeof path !== "string") { throw new Error("Tried to get a Storage path that was not a String."); } if (path[0] === "/") { path = path.substr(1); } return "Parse/" + CoreManager.get("APPLICATION_ID") + "/" + path; }, _clear() { const controller = CoreManager.getStorageController(); if (Object.hasOwn(controller, "clear")) { controller.clear(); } } }; const QUEUE_KEY = "Parse/Eventually/Queue"; let queueCache = []; let dirtyCache = true; let polling = void 0; const EventuallyQueue = { /** * Add object to queue with save operation. * * @function save * @name Parse.EventuallyQueue.save * @param {ParseObject} object Parse.Object to be saved eventually * @param {object} [serverOptions] See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Object.html#save Parse.Object.save} options. * @returns {Promise} A promise that is fulfilled if object is added to queue. * @static * @see Parse.Object#saveEventually */ save(object, serverOptions) { return this.enqueue("save", object, serverOptions); }, /** * Add object to queue with save operation. * * @function destroy * @name Parse.EventuallyQueue.destroy * @param {ParseObject} object Parse.Object to be destroyed eventually * @param {object} [serverOptions] See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Object.html#destroy Parse.Object.destroy} options * @returns {Promise} A promise that is fulfilled if object is added to queue. * @static * @see Parse.Object#destroyEventually */ destroy(object, serverOptions) { return this.enqueue("destroy", object, serverOptions); }, /** * Generate unique identifier to avoid duplicates and maintain previous state. * * @param {string} action save / destroy * @param {object} object Parse.Object to be queued * @returns {string} * @static * @ignore */ generateQueueId(action, object) { object._getId(); const { className, id, _localId } = object; const uniqueId = object.get("hash") || _localId; return [action, className, id, uniqueId].join("_"); }, /** * Build queue object and add to queue. * * @param {string} action save / destroy * @param {object} object Parse.Object to be queued * @param {object} [serverOptions] * @returns {Promise} A promise that is fulfilled if object is added to queue. * @static * @ignore */ async enqueue(action, object, serverOptions) { const queueData = await this.getQueue(); const queueId = this.generateQueueId(action, object); let index = this.queueItemExists(queueData, queueId); if (index > -1) { for (const prop in queueData[index].object) { if (typeof object.get(prop) === "undefined") { object.set(prop, queueData[index].object[prop]); } } } else { index = queueData.length; } queueData[index] = { queueId, action, object: object.toJSON(), serverOptions: serverOptions || {}, id: object.id, className: object.className, hash: object.get("hash"), createdAt: /* @__PURE__ */ new Date() }; return this.setQueue(queueData); }, store(data) { return Storage.setItemAsync(QUEUE_KEY, JSON.stringify(data)); }, load() { return Storage.getItemAsync(QUEUE_KEY); }, /** * Sets the in-memory queue from local storage and returns. * * @function getQueue * @name Parse.EventuallyQueue.getQueue * @returns {Promise} * @static */ async getQueue() { if (dirtyCache) { queueCache = JSON.parse(await this.load() || "[]"); dirtyCache = false; } return queueCache; }, /** * Saves the queue to local storage * * @param {Queue} queue Queue containing Parse.Object data. * @returns {Promise} A promise that is fulfilled when queue is stored. * @static * @ignore */ setQueue(queue2) { queueCache = queue2; return this.store(queueCache); }, /** * Removes Parse.Object data from queue. * * @param {string} queueId Unique identifier for Parse.Object data. * @returns {Promise} A promise that is fulfilled when queue is stored. * @static * @ignore */ async remove(queueId) { const queueData = await this.getQueue(); const index = this.queueItemExists(queueData, queueId); if (index > -1) { queueData.splice(index, 1); await this.setQueue(queueData); } }, /** * Removes all objects from queue. * * @function clear * @name Parse.EventuallyQueue.clear * @returns {Promise} A promise that is fulfilled when queue is cleared. * @static */ clear() { queueCache = []; return this.store([]); }, /** * Return the index of a queueId in the queue. Returns -1 if not found. * * @param {Queue} queue Queue containing Parse.Object data. * @param {string} queueId Unique identifier for Parse.Object data. * @returns {number} * @static * @ignore */ queueItemExists(queue2, queueId) { return queue2.findIndex((data) => data.queueId === queueId); }, /** * Return the number of objects in the queue. * * @function length * @name Parse.EventuallyQueue.length * @returns {Promise} * @static */ async length() { const queueData = await this.getQueue(); return queueData.length; }, /** * Sends the queue to the server. * * @function sendQueue * @name Parse.EventuallyQueue.sendQueue * @returns {Promise} Returns true if queue was sent successfully. * @static */ async sendQueue() { const queue2 = await this.getQueue(); const queueData = [...queue2]; if (queueData.length === 0) { return false; } for (let i2 = 0; i2 < queueData.length; i2 += 1) { const queueObject = queueData[i2]; const { id, hash: hash2, className } = queueObject; const ObjectType = ParseObject.extend(className); if (id) { await this.process.byId(ObjectType, queueObject); } else if (hash2) { await this.process.byHash(ObjectType, queueObject); } else { await this.process.create(ObjectType, queueObject); } } return true; }, /** * Build queue object and add to queue. * * @param {ParseObject} object Parse.Object to be processed * @param {QueueObject} queueObject Parse.Object data from the queue * @returns {Promise} A promise that is fulfilled when operation is performed. * @static * @ignore */ async sendQueueCallback(object, queueObject) { if (!object) { return this.remove(queueObject.queueId); } switch (queueObject.action) { case "save": if (typeof object.updatedAt !== "undefined" && object.updatedAt > new Date(queueObject.object.createdAt)) { return this.remove(queueObject.queueId); } try { await object.save(queueObject.object, queueObject.serverOptions); await this.remove(queueObject.queueId); } catch (e) { if (e.code !== ParseError.CONNECTION_FAILED) { await this.remove(queueObject.queueId); } } break; case "destroy": try { await object.destroy(queueObject.serverOptions); await this.remove(queueObject.queueId); } catch (e) { if (e.code !== ParseError.CONNECTION_FAILED) { await this.remove(queueObject.queueId); } } break; } }, /** * Start polling server for network connection. * Will send queue if connection is established. * * @function poll * @name Parse.EventuallyQueue.poll * @param [ms] Milliseconds to ping the server. Default 2000ms * @static */ poll(ms) { if (polling) { return; } polling = setInterval(() => { const RESTController2 = CoreManager.getRESTController(); RESTController2.request("GET", "health").then(({ status }) => { if (status === "ok") { this.stopPoll(); return this.sendQueue(); } }).catch((e) => e); }, ms || 2e3); }, /** * Turns off polling. * * @function stopPoll * @name Parse.EventuallyQueue.stopPoll * @static */ stopPoll() { clearInterval(polling); polling = void 0; }, /** * Return true if pinging the server. * * @function isPolling * @name Parse.EventuallyQueue.isPolling * @returns {boolean} * @static */ isPolling() { return !!polling; }, _setPolling(flag) { polling = flag; }, process: { create(ObjectType, queueObject) { const object = new ObjectType(); return EventuallyQueue.sendQueueCallback(object, queueObject); }, async byId(ObjectType, queueObject) { const { sessionToken } = queueObject.serverOptions; const query = new ParseQuery(ObjectType); query.equalTo("objectId", queueObject.id); const results = await query.find({ sessionToken }); return EventuallyQueue.sendQueueCallback(results[0], queueObject); }, async byHash(ObjectType, queueObject) { const { sessionToken } = queueObject.serverOptions; const query = new ParseQuery(ObjectType); query.equalTo("hash", queueObject.hash); const results = await query.find({ sessionToken }); if (results.length > 0) { return EventuallyQueue.sendQueueCallback(results[0], queueObject); } return EventuallyQueue.process.create(ObjectType, queueObject); } } }; function promisifyRequest(request) { return new Promise((resolve, reject) => { request.oncomplete = request.onsuccess = () => resolve(request.result); request.onabort = request.onerror = () => reject(request.error); }); } function createStore(dbName, storeName) { let dbp; const getDB = () => { if (dbp) return dbp; const request = indexedDB.open(dbName); request.onupgradeneeded = () => request.result.createObjectStore(storeName); dbp = promisifyRequest(request); dbp.then((db) => { db.onclose = () => dbp = void 0; }, () => { }); return dbp; }; return (txMode, callback) => getDB().then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName))); } let defaultGetStoreFunc; function defaultGetStore() { if (!defaultGetStoreFunc) { defaultGetStoreFunc = createStore("keyval-store", "keyval"); } return defaultGetStoreFunc; } function get(key2, customStore = defaultGetStore()) { return customStore("readonly", (store) => promisifyRequest(store.get(key2))); } function set(key2, value, customStore = defaultGetStore()) { return customStore("readwrite", (store) => { store.put(value, key2); return promisifyRequest(store.transaction); }); } function del(key2, customStore = defaultGetStore()) { return customStore("readwrite", (store) => { store.delete(key2); return promisifyRequest(store.transaction); }); } function clear(customStore = defaultGetStore()) { return customStore("readwrite", (store) => { store.clear(); return promisifyRequest(store.transaction); }); } function eachCursor(store, callback) { store.openCursor().onsuccess = function() { if (!this.result) return; callback(this.result); this.result.continue(); }; return promisifyRequest(store.transaction); } function keys(customStore = defaultGetStore()) { return customStore("readonly", (store) => { if (store.getAllKeys) { return promisifyRequest(store.getAllKeys()); } const items = []; return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items); }); } let IndexedDBStorageController; if (typeof window !== "undefined" && window.indexedDB) { try { const ParseStore = createStore("parseDB", "parseStore"); IndexedDBStorageController = { async: 1, getItemAsync(path) { return get(path, ParseStore); }, setItemAsync(path, value) { return set(path, value, ParseStore); }, removeItemAsync(path) { return del(path, ParseStore); }, getAllKeysAsync() { return keys(ParseStore); }, clear() { return clear(ParseStore); } }; } catch (_) { IndexedDBStorageController = void 0; } } else { IndexedDBStorageController = void 0; } const IndexedDBStorageController$1 = IndexedDBStorageController; const DEVICE_TYPES = { IOS: "ios", MACOS: "macos", TVOS: "tvos", FCM: "fcm", ANDROID: "android", WEB: "web" }; class ParseInstallation extends ParseObject { /** * @param {object} attributes The initial set of data to store in the object. */ constructor(attributes) { super("_Installation"); if (attributes && typeof attributes === "object") { try { this.set(attributes || {}); } catch (_) { throw new Error("Can't create an invalid Installation"); } } } /** * A unique identifier for this installation’s client application. In iOS, this is the Bundle Identifier. * * @property {string} appIdentifier * @static * @returns {string} */ get appIdentifier() { return this.get("appIdentifier"); } /** * The version string of the client application to which this installation belongs. * * @property {string} appVersion * @static * @returns {string} */ get appVersion() { return this.get("appVersion"); } /** * The display name of the client application to which this installation belongs. * * @property {string} appName * @static * @returns {string} */ get appName() { return this.get("appName"); } /** * The current value of the icon badge for iOS apps. * Changes to this value on the server will be used * for future badge-increment push notifications. * * @property {number} badge * @static * @returns {number} */ get badge() { return this.get("badge"); } /** * An array of the channels to which a device is currently subscribed. * * @property {string[]} channels * @static * @returns {string[]} */ get channels() { return this.get("channels"); } /** * Token used to deliver push notifications to the device. * * @property {string} deviceToken * @static * @returns {string} */ get deviceToken() { return this.get("deviceToken"); } /** * The type of device, “ios”, “android”, “web”, etc. * * @property {string} deviceType * @static * @returns {string} */ get deviceType() { return this.get("deviceType"); } /** * Gets the GCM sender identifier for this installation * * @property {string} GCMSenderId * @static * @returns {string} */ get GCMSenderId() { return this.get("GCMSenderId"); } /** * Universally Unique Identifier (UUID) for the device used by Parse. It must be unique across all of an app’s installations. * * @property {string} installationId * @static * @returns {string} */ get installationId() { return this.get("installationId"); } /** * Gets the local identifier for this installation * * @property {string} localeIdentifier * @static * @returns {string} */ get localeIdentifier() { return this.get("localeIdentifier"); } /** * Gets the parse server version for this installation * * @property {string} parseVersion * @static * @returns {string} */ get parseVersion() { return this.get("parseVersion"); } /** * This field is reserved for directing Parse to the push delivery network to be used. * * @property {string} pushType * @static * @returns {string} */ get pushType() { return this.get("pushType"); } /** * Gets the time zone for this installation * * @property {string} timeZone * @static * @returns {string} */ get timeZone() { return this.get("timeZone"); } /** * Returns the device types for used for Push Notifications. * *
         * Parse.Installation.DEVICE_TYPES.IOS
         * Parse.Installation.DEVICE_TYPES.MACOS
         * Parse.Installation.DEVICE_TYPES.TVOS
         * Parse.Installation.DEVICE_TYPES.FCM
         * Parse.Installation.DEVICE_TYPES.ANDROID
         * Parse.Installation.DEVICE_TYPES.WEB
         * 
    * const installation = await Parse.Installation.currentInstallation(); * installation.set('deviceToken', '123'); * await installation.save(); * * * @returns {Promise} A promise that resolves to the local installation object. */ static currentInstallation() { return CoreManager.getInstallationController().currentInstallation(); } } ParseObject.registerSubclass("_Installation", ParseInstallation); const CURRENT_INSTALLATION_KEY = "currentInstallation"; const CURRENT_INSTALLATION_ID_KEY = "currentInstallationId"; let iidCache = null; let currentInstallationCache = null; let currentInstallationCacheMatchesDisk = false; const InstallationController = { async updateInstallationOnDisk(installation) { const path = Storage.generatePath(CURRENT_INSTALLATION_KEY); await Storage.setItemAsync(path, JSON.stringify(installation.toJSON())); this._setCurrentInstallationCache(installation); }, async currentInstallationId() { if (typeof iidCache === "string") { return iidCache; } const path = Storage.generatePath(CURRENT_INSTALLATION_ID_KEY); let iid = await Storage.getItemAsync(path); if (!iid) { iid = uuidv4(); return Storage.setItemAsync(path, iid).then(() => { iidCache = iid; return iid; }); } iidCache = iid; return iid; }, async currentInstallation() { if (currentInstallationCache) { return currentInstallationCache; } if (currentInstallationCacheMatchesDisk) { return null; } const path = Storage.generatePath(CURRENT_INSTALLATION_KEY); let installationData = await Storage.getItemAsync(path); currentInstallationCacheMatchesDisk = true; if (installationData) { installationData = JSON.parse(installationData); installationData.className = "_Installation"; const current = ParseInstallation.fromJSON(installationData); currentInstallationCache = current; return current; } const installationId = await this.currentInstallationId(); const installation = new ParseInstallation(); installation.set("deviceType", ParseInstallation.DEVICE_TYPES.WEB); installation.set("installationId", installationId); installation.set("parseVersion", CoreManager.get("VERSION")); currentInstallationCache = installation; await Storage.setItemAsync(path, JSON.stringify(installation.toJSON())); return installation; }, _clearCache() { iidCache = null; currentInstallationCache = null; currentInstallationCacheMatchesDisk = false; }, _setInstallationIdCache(iid) { iidCache = iid; }, _setCurrentInstallationCache(installation, matchesDisk = true) { currentInstallationCache = installation; currentInstallationCacheMatchesDisk = matchesDisk; } }; let useXDomainRequest = false; if (typeof XDomainRequest !== "undefined" && !("withCredentials" in new XMLHttpRequest())) { useXDomainRequest = true; } function getPath(base2, pathname) { if (base2.endsWith("/")) { base2 = base2.slice(0, -1); } if (!pathname.startsWith("/")) { pathname = "/" + pathname; } return base2 + pathname; } function ajaxIE9(method, url, data, _headers, options) { return new Promise((resolve, reject) => { const xdr = new XDomainRequest(); xdr.onload = function() { let response; try { response = JSON.parse(xdr.responseText); } catch (e) { reject(e); } if (response) { resolve({ response }); } }; xdr.onerror = xdr.ontimeout = function() { const fakeResponse = { responseText: JSON.stringify({ code: ParseError.X_DOMAIN_REQUEST, error: "IE's XDomainRequest does not supply error info." }) }; reject(fakeResponse); }; xdr.onprogress = function() { if (options && typeof options.progress === "function") { options.progress(xdr.responseText); } }; xdr.open(method, url); xdr.send(data); if (options && typeof options.requestTask === "function") { options.requestTask(xdr); } }); } const RESTController = { async ajax(method, url, data, headers, options) { if (useXDomainRequest) { return ajaxIE9(method, url, data, headers, options); } if (typeof fetch !== "function") { throw new Error("Cannot make a request: Fetch API not found."); } const promise = resolvingPromise(); const isIdempotent = CoreManager.get("IDEMPOTENCY") && ["POST", "PUT"].includes(method); const requestId = isIdempotent ? uuidv4() : ""; let attempts = 0; const dispatch = async function() { const controller = new AbortController(); const { signal } = controller; headers = headers || {}; if (typeof headers["Content-Type"] !== "string") { headers["Content-Type"] = "text/plain"; } if (CoreManager.get("IS_NODE")) { headers["User-Agent"] = "Parse/" + CoreManager.get("VERSION") + " (NodeJS " + process$1.versions.node + ")"; } if (isIdempotent) { headers["X-Parse-Request-Id"] = requestId; } const customHeaders = CoreManager.get("REQUEST_HEADERS"); for (const key2 in customHeaders) { headers[key2] = customHeaders[key2]; } if (options && typeof options.requestTask === "function") { options.requestTask(controller); } try { const fetchOptions = { method, headers, signal, redirect: "manual" }; if (data) { fetchOptions.body = data; if (typeof ReadableStream !== "undefined" && data instanceof ReadableStream) { fetchOptions.duplex = "half"; } } const response = await fetch(url, fetchOptions); const { status } = response; if (status >= 200 && status < 300) { let result; const responseHeaders = {}; const availableHeaders = response.headers.get("access-control-expose-headers") || ""; availableHeaders.split(", ").forEach((header) => { if (header && response.headers.has(header)) { responseHeaders[header] = response.headers.get(header); } }); if (options && typeof options.progress === "function" && response.body) { const reader = response.body.getReader(); const length = +response.headers.get("Content-Length") || 0; if (length === 0) { options.progress(null, null, null); result = await response.json(); } else { let recieved = 0; const chunks = []; while (true) { const { done, value } = await reader.read(); if (done) { break; } chunks.push(value); recieved += value?.length || 0; options.progress(recieved / length, recieved, length); } const body = new Uint8Array(recieved); let offset = 0; for (const chunk of chunks) { body.set(chunk, offset); offset += chunk.length; } const jsonString = new TextDecoder().decode(body); result = JSON.parse(jsonString); } } else { result = await response.json(); } promise.resolve({ status, response: result, headers: responseHeaders }); } else if (status >= 400 && status < 500) { const error = await response.json(); promise.reject(error); } else if ([301, 302, 303, 307, 308].includes(status)) { const location = response.headers.get("location"); promise.resolve({ status, location, method: status === 303 ? "GET" : method, dropBody: status === 303 }); } else if (status >= 500 || status === 0) { const isStream = typeof ReadableStream !== "undefined" && data instanceof ReadableStream; if (!isStream && ++attempts < CoreManager.get("REQUEST_ATTEMPT_LIMIT")) { const delay = Math.round(Math.random() * 125 * Math.pow(2, attempts)); setTimeout(dispatch, delay); } else if (status === 0) { promise.reject("Unable to connect to the Parse API"); } else { const error = await response.json(); promise.reject(error); } } else { promise.reject(response); } } catch (error) { if (error.name === "AbortError") { promise.resolve({ response: { results: [] }, status: 0 }); } else if (error.cause?.code === "ECONNREFUSED") { promise.reject("Unable to connect to the Parse API"); } else { promise.reject(error); } } }; dispatch(); return promise; }, request(method, path, data, options) { options = options || {}; const url = getPath(CoreManager.get("SERVER_URL"), path); const payload = {}; if (data && typeof data === "object") { for (const k in data) { payload[k] = data[k]; } } const context = options.context; if (context !== void 0) { payload._context = context; } if (method !== "POST") { payload._method = method; method = "POST"; } payload._ApplicationId = CoreManager.get("APPLICATION_ID"); const jsKey = CoreManager.get("JAVASCRIPT_KEY"); if (jsKey) { payload._JavaScriptKey = jsKey; } payload._ClientVersion = CoreManager.get("VERSION"); let useMasterKey = options.useMasterKey; if (typeof useMasterKey === "undefined") { useMasterKey = CoreManager.get("USE_MASTER_KEY"); } if (useMasterKey) { if (CoreManager.get("MASTER_KEY")) { delete payload._JavaScriptKey; payload._MasterKey = CoreManager.get("MASTER_KEY"); } else { throw new Error("Cannot use the Master Key, it has not been provided."); } } if (options.useMaintenanceKey) { payload._MaintenanceKey = CoreManager.get("MAINTENANCE_KEY"); } if (CoreManager.get("FORCE_REVOCABLE_SESSION")) { payload._RevocableSession = "1"; } const installationId = options.installationId; let installationIdPromise; if (installationId && typeof installationId === "string") { installationIdPromise = Promise.resolve(installationId); } else { const installationController = CoreManager.getInstallationController(); installationIdPromise = installationController.currentInstallationId(); } return installationIdPromise.then((iid) => { payload._InstallationId = iid; const userController = CoreManager.getUserController(); if (options && typeof options.sessionToken === "string") { return Promise.resolve(options.sessionToken); } else if (userController) { return userController.currentUserAsync().then((user) => { if (user) { return Promise.resolve(user.getSessionToken()); } return Promise.resolve(null); }); } return Promise.resolve(null); }).then((token) => { if (token) { payload._SessionToken = token; } const payloadString = JSON.stringify(payload); return RESTController.ajax(method, url, payloadString, {}, options).then(async (result) => { if (result.location) { let newURL = getPath(result.location, path); let newMethod = result.method; let newBody = result.dropBody ? void 0 : payloadString; for (let i2 = 0; i2 < 5; i2 += 1) { const r = await RESTController.ajax(newMethod, newURL, newBody, {}, options); if (!r.location) { result = r; break; } newURL = getPath(r.location, path); newMethod = r.method; newBody = r.dropBody ? void 0 : payloadString; } } const { response, status, headers } = result; if (options.returnStatus) { return { ...response, _status: status, _headers: headers }; } else { return response; } }); }).catch(RESTController.handleError); }, handleError(errorJSON) { let error; if (errorJSON.code || errorJSON.error || errorJSON.message) { error = new ParseError(errorJSON.code, errorJSON.error || errorJSON.message); } else { error = new ParseError( ParseError.CONNECTION_FAILED, "XMLHttpRequest failed: " + JSON.stringify(errorJSON) ); } return Promise.reject(error); } }; function track(name, dimensions) { name = name || ""; name = name.replace(/^\s*/, ""); name = name.replace(/\s*$/, ""); if (name.length === 0) { throw new TypeError("A name for the custom event must be provided"); } for (const key2 in dimensions) { if (typeof key2 !== "string" || typeof dimensions[key2] !== "string") { throw new TypeError('track() dimensions expects keys and values of type "string".'); } } return CoreManager.getAnalyticsController().track(name, dimensions); } const DefaultController$7 = { track(name, dimensions) { const path = "events/" + name; const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("POST", path, { dimensions }); } }; CoreManager.setAnalyticsController(DefaultController$7); const Analytics = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, track }, Symbol.toStringTag, { value: "Module" })); function isRevocableSession(token) { return token.indexOf("r:") > -1; } const CURRENT_USER_KEY = "currentUser"; let canUseCurrentUser = !CoreManager.get("IS_NODE"); let currentUserCacheMatchesDisk = false; let currentUserCache = null; const authProviders = {}; class ParseUser extends ParseObject { /** * @param {object} attributes The initial set of data to store in the user. */ constructor(attributes) { super("_User"); if (attributes && typeof attributes === "object") { try { this.set(attributes || {}); } catch (_) { throw new Error("Can't create an invalid Parse User"); } } } /** * Request a revocable session token to replace the older style of token. * * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    * @returns {Promise} A promise that is resolved when the replacement * token has been fetched. */ _upgradeToRevocableSession(options) { const upgradeOptions = ParseObject._getRequestOptions(options); const controller = CoreManager.getUserController(); return controller.upgradeToRevocableSession(this, upgradeOptions); } /** * Parse allows you to link your users with {@link https://docs.parseplatform.org/parse-server/guide/#oauth-and-3rd-party-authentication 3rd party authentication}, enabling * your users to sign up or log into your application using their existing identities. * Since 2.9.0 * * @see {@link https://docs.parseplatform.org/js/guide/#linking-users Linking Users} * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider} * @param {object} options * @param {object} [options.authData] AuthData to link with *
      *
    • If provider is string, options is {@link http://docs.parseplatform.org/parse-server/guide/#supported-3rd-party-authentications authData} *
    • If provider is AuthProvider, options is saveOpts *
    * @param {object} saveOpts useMasterKey / sessionToken * @returns {Promise} A promise that is fulfilled with the user is linked */ linkWith(provider2, options, saveOpts = {}) { saveOpts.sessionToken = saveOpts.sessionToken || this.getSessionToken() || ""; let authType; if (typeof provider2 === "string") { authType = provider2; if (authProviders[provider2]) { provider2 = authProviders[provider2]; } else { const authProvider = { restoreAuthentication() { return true; }, getAuthType() { return authType; } }; authProviders[authProvider.getAuthType()] = authProvider; provider2 = authProvider; } } else { authType = provider2.getAuthType(); } if (options && Object.hasOwn(options, "authData")) { const authData = this.get("authData") || {}; if (typeof authData !== "object") { throw new Error("Invalid type: authData field should be an object"); } authData[authType] = options.authData; const oldAnonymousData = authData.anonymous; this.stripAnonymity(); const controller = CoreManager.getUserController(); return controller.linkWith(this, authData, saveOpts).catch((e) => { delete authData[authType]; this.restoreAnonimity(oldAnonymousData); throw e; }); } else { return new Promise((resolve, reject) => { provider2.authenticate({ success: (provider22, result) => { const opts = {}; opts.authData = result; this.linkWith(provider22, opts, saveOpts).then( () => { resolve(this); }, (error) => { reject(error); } ); }, error: (_provider, error) => { reject(error); } }); }); } } /** * @param provider * @param options * @param {object} [options.authData] * @param saveOpts * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} * @returns {Promise} */ _linkWith(provider2, options, saveOpts = {}) { return this.linkWith(provider2, options, saveOpts); } /** * Synchronizes auth data for a provider (e.g. puts the access token in the * right place to be used by the Facebook SDK). * * @param provider */ _synchronizeAuthData(provider2) { if (!this.isCurrent() || !provider2) { return; } let authType; if (typeof provider2 === "string") { authType = provider2; provider2 = authProviders[authType]; } else { authType = provider2.getAuthType(); } const authData = this.get("authData"); if (!provider2 || !authData || typeof authData !== "object") { return; } const success = provider2.restoreAuthentication(authData[authType]); if (!success) { this._unlinkFrom(provider2); } } /** * Synchronizes authData for all providers. */ _synchronizeAllAuthData() { const authData = this.get("authData"); if (typeof authData !== "object") { return; } for (const key2 in authData) { this._synchronizeAuthData(key2); } } /** * Removes null values from authData (which exist temporarily for unlinking) */ _cleanupAuthData() { if (!this.isCurrent()) { return; } const authData = this.get("authData"); if (typeof authData !== "object") { return; } for (const key2 in authData) { if (!authData[key2]) { delete authData[key2]; } } } /** * Unlinks a user from a service. * * @param {string | AuthProvider} provider Name of auth provider or {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider} * @param {object} options MasterKey / SessionToken * @returns {Promise} A promise that is fulfilled when the unlinking * finishes. */ _unlinkFrom(provider2, options) { return this.linkWith(provider2, { authData: null }, options).then(() => { this._synchronizeAuthData(provider2); return Promise.resolve(this); }); } /** * Checks whether a user is linked to a service. * * @param {object} provider service to link to * @returns {boolean} true if link was successful */ _isLinked(provider2) { let authType; if (typeof provider2 === "string") { authType = provider2; } else { authType = provider2.getAuthType(); } const authData = this.get("authData") || {}; if (typeof authData !== "object") { return false; } return !!authData[authType]; } /** * Deauthenticates all providers. */ _logOutWithAll() { const authData = this.get("authData"); if (typeof authData !== "object") { return; } for (const key2 in authData) { this._logOutWith(key2); } } /** * Deauthenticates a single provider (e.g. removing access tokens from the * Facebook SDK). * * @param {object} provider service to logout of */ _logOutWith(provider2) { if (!this.isCurrent()) { return; } if (typeof provider2 === "string") { provider2 = authProviders[provider2]; } if (provider2 && provider2.deauthenticate) { provider2.deauthenticate(); } } /** * Class instance method used to maintain specific keys when a fetch occurs. * Used to ensure that the session token is not lost. * * @returns {object} sessionToken */ _preserveFieldsOnFetch() { return { sessionToken: this.get("sessionToken") }; } /** * Returns true if current would return this user. * * @returns {boolean} true if user is cached on disk */ isCurrent() { const current = ParseUser.current(); return !!current && current.id === this.id; } /** * Returns true if current would return this user. * * @returns {Promise} true if user is cached on disk */ async isCurrentAsync() { const current = await ParseUser.currentAsync(); return !!current && current.id === this.id; } stripAnonymity() { const authData = this.get("authData"); if (authData && typeof authData === "object" && Object.hasOwn(authData, "anonymous")) { authData.anonymous = null; } } restoreAnonimity(anonymousData) { if (anonymousData) { const authData = this.get("authData"); authData.anonymous = anonymousData; } } /** * Returns get("username"). * * @returns {string} */ getUsername() { const username = this.get("username"); if (username == null || typeof username === "string") { return username; } return ""; } /** * Calls set("username", username, options) and returns the result. * * @param {string} username */ setUsername(username) { this.stripAnonymity(); this.set("username", username); } /** * Calls set("password", password, options) and returns the result. * * @param {string} password User's Password */ setPassword(password) { this.set("password", password); } /** * Returns get("email"). * * @returns {string} User's Email */ getEmail() { const email = this.get("email"); if (email == null || typeof email === "string") { return email; } return ""; } /** * Calls set("email", email) and returns the result. * * @param {string} email * @returns {boolean} */ setEmail(email) { return this.set("email", email); } /** * Returns the session token for this user, if the user has been logged in, * or if it is the result of a query with the master key. Otherwise, returns * undefined. * * @returns {string} the session token, or undefined */ getSessionToken() { const token = this.get("sessionToken"); if (token == null || typeof token === "string") { return token; } return ""; } /** * Checks whether this user is the current user and has been authenticated. * * @returns {boolean} whether this user is the current user and is logged in. */ authenticated() { const current = ParseUser.current(); return !!this.get("sessionToken") && !!current && current.id === this.id; } /** * Signs up a new user. You should call this instead of save for * new Parse.Users. This will create a new Parse.User on the server, and * also persist the session on disk so that you can access the user using * current. * *

    A username and password must be set before calling signUp.

    * * @param {object} attrs Extra fields to set on the new user, or null. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • installationId: the installationId which made the request *
    • context: A dictionary that is accessible in Cloud Code `beforeLogin` and `afterLogin` triggers. *
    * @returns {Promise} A promise that is fulfilled when the signup * finishes. */ signUp(attrs, options) { const signupOptions = ParseObject._getRequestOptions(options); const controller = CoreManager.getUserController(); return controller.signUp(this, attrs, signupOptions); } /** * Logs in a Parse.User. On success, this saves the session to disk, * so you can retrieve the currently logged in user using * current. * *

    A username and password must be set before calling logIn.

    * * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    • usePost: Use POST method to make the request (default: true) *
    • installationId: the installationId which made the request *
    • context: A dictionary that is accessible in Cloud Code `beforeLogin` and `afterLogin` triggers. *
    * @returns {Promise} A promise that is fulfilled with the user when * the login is complete. */ logIn(options = {}) { const loginOptions = ParseObject._getRequestOptions(options); if (!Object.hasOwn(loginOptions, "usePost")) { loginOptions.usePost = true; } const controller = CoreManager.getUserController(); return controller.logIn(this, loginOptions); } /** * Wrap the default save behavior with functionality to save to local * storage if this is current user. * * @param {...any} args * @returns {Promise} */ async save(...args) { await super.save.apply(this, args); const current = await this.isCurrentAsync(); if (current) { return CoreManager.getUserController().updateUserOnDisk(this); } return this; } /** * Wrap the default destroy behavior with functionality that logs out * the current user when it is destroyed * * @param {...any} args * @returns {Parse.User} */ async destroy(...args) { await super.destroy.apply(this, args); const current = await this.isCurrentAsync(); if (current) { return CoreManager.getUserController().removeUserFromDisk(); } return this; } /** * Wrap the default fetch behavior with functionality to save to local * storage if this is current user. * * @param {...any} args * @returns {Parse.User} */ async fetch(...args) { await super.fetch.apply(this, args); const current = await this.isCurrentAsync(); if (current) { return CoreManager.getUserController().updateUserOnDisk(this); } return this; } /** * Wrap the default fetchWithInclude behavior with functionality to save to local * storage if this is current user. * * @param {...any} args * @returns {Parse.User} */ async fetchWithInclude(...args) { await super.fetchWithInclude.apply(this, args); const current = await this.isCurrentAsync(); if (current) { return CoreManager.getUserController().updateUserOnDisk(this); } return this; } /** * Verify whether a given password is the password of the current user. * * @param {string} password The password to be verified. * @param {object} options The options. * @param {boolean} [options.ignoreEmailVerification] Set to `true` to bypass email verification and verify * the password regardless of whether the email has been verified. This requires the master key. * @returns {Promise} A promise that is fulfilled with a user when the password is correct. */ verifyPassword(password, options) { const username = this.getUsername() || ""; return ParseUser.verifyPassword(username, password, options); } static readOnlyAttributes() { return ["sessionToken"]; } /** * Adds functionality to the existing Parse.User class. * * @param {object} protoProps A set of properties to add to the prototype * @param {object} classProps A set of static properties to add to the class * @static * @returns {Parse.User} The newly extended Parse.User class */ static extend(protoProps, classProps) { if (protoProps) { for (const prop in protoProps) { if (prop !== "className") { Object.defineProperty(ParseUser.prototype, prop, { value: protoProps[prop], enumerable: false, writable: true, configurable: true }); } } } if (classProps) { for (const prop in classProps) { if (prop !== "className") { Object.defineProperty(ParseUser, prop, { value: classProps[prop], enumerable: false, writable: true, configurable: true }); } } } return ParseUser; } /** * Retrieves the currently logged in ParseUser with a valid session, * either from memory or localStorage, if necessary. * * @static * @returns {Parse.User} The currently logged in Parse.User. */ static current() { if (!canUseCurrentUser) { return null; } const controller = CoreManager.getUserController(); return controller.currentUser(); } /** * Retrieves the currently logged in ParseUser from asynchronous Storage. * * @static * @returns {Promise} A Promise that is resolved with the currently * logged in Parse User */ static currentAsync() { if (!canUseCurrentUser) { return Promise.resolve(null); } const controller = CoreManager.getUserController(); return controller.currentUserAsync(); } /** * Signs up a new user with a username (or email) and password. * This will create a new Parse.User on the server, and also persist the * session in localStorage so that you can access the user using * {@link #current}. * * @param {string} username The username (or email) to sign up with. * @param {string} password The password to sign up with. * @param {object} attrs Extra fields to set on the new user. * @param {object} options * @static * @returns {Promise} A promise that is fulfilled with the user when * the signup completes. */ static signUp(username, password, attrs, options) { attrs = attrs || {}; attrs.username = username; attrs.password = password; const user = new this(attrs); return user.signUp({}, options); } /** * Logs in a user with a username (or email) and password. On success, this * saves the session to disk, so you can retrieve the currently logged in * user using current. * * @param {string} username The username (or email) to log in with. * @param {string} password The password to log in with. * @param {object} options * @static * @returns {Promise} A promise that is fulfilled with the user when * the login completes. */ static logIn(username, password, options) { if (typeof username !== "string") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Username must be a string.")); } else if (typeof password !== "string") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Password must be a string.")); } const user = new this(); user._finishFetch({ username, password }); return user.logIn(options); } /** * Logs in a user with a username (or email) and password, and authData. On success, this * saves the session to disk, so you can retrieve the currently logged in * user using current. * * @param {string} username The username (or email) to log in with. * @param {string} password The password to log in with. * @param {object} authData The authData to log in with. * @param {object} options * @static * @returns {Promise} A promise that is fulfilled with the user when * the login completes. */ static logInWithAdditionalAuth(username, password, authData, options) { if (typeof username !== "string") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Username must be a string.")); } if (typeof password !== "string") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Password must be a string.")); } if (Object.prototype.toString.call(authData) !== "[object Object]") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Auth must be an object.")); } const user = new this(); user._finishFetch({ username, password, authData }); return user.logIn(options); } /** * Logs in a user with an objectId. On success, this saves the session * to disk, so you can retrieve the currently logged in user using * current. * * @param {string} userId The objectId for the user. * @static * @returns {Promise} A promise that is fulfilled with the user when * the login completes. */ static loginAs(userId) { if (!userId) { throw new ParseError( ParseError.USERNAME_MISSING, "Cannot log in as user with an empty user id" ); } const controller = CoreManager.getUserController(); const user = new this(); return controller.loginAs(user, userId); } /** * Logs in a user with a session token. On success, this saves the session * to disk, so you can retrieve the currently logged in user using * current. * * @param {string} sessionToken The sessionToken to log in with. * @param {object} options * @param {boolean} [options.useMasterKey] * @static * @returns {Promise} A promise that is fulfilled with the user when * the login completes. */ static become(sessionToken, options) { if (!canUseCurrentUser) { throw new Error("It is not memory-safe to become a user in a server environment"); } const becomeOptions = ParseObject._getRequestOptions(options); becomeOptions.sessionToken = sessionToken; const controller = CoreManager.getUserController(); const user = new this(); return controller.become(user, becomeOptions); } /** * Retrieves a user with a session token. * * @param {string} sessionToken The sessionToken to get user with. * @param {object} options * @param {boolean} [options.useMasterKey] * @static * @returns {Promise} A promise that is fulfilled with the user is fetched. */ static me(sessionToken, options) { const controller = CoreManager.getUserController(); const meOptions = ParseObject._getRequestOptions(options); meOptions.sessionToken = sessionToken; const user = new this(); return controller.me(user, meOptions); } /** * Logs in a user with a session token. On success, this saves the session * to disk, so you can retrieve the currently logged in user using * current. If there is no session token the user will not logged in. * * @param {object} userJSON The JSON map of the User's data * @static * @returns {Promise} A promise that is fulfilled with the user when * the login completes. */ static hydrate(userJSON) { const controller = CoreManager.getUserController(); const user = new this(); return controller.hydrate(user, userJSON); } /** * Static version of {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} * * @param provider * @param options * @param {object} [options.authData] * @param saveOpts * @static * @returns {Promise} */ static logInWith(provider2, options, saveOpts) { const user = new this(); return user.linkWith(provider2, options, saveOpts); } /** * Logs out the currently logged in user session. This will remove the * session from disk, log out of linked services, and future calls to * current will return null. * * @param {object} options * @static * @returns {Promise} A promise that is resolved when the session is * destroyed on the server. */ static logOut(options) { const controller = CoreManager.getUserController(); return controller.logOut(options); } /** * Requests a password reset email to be sent to the specified email address * associated with the user account. This email allows the user to securely * reset their password on the Parse site. * * @param {string} email The email address associated with the user that * forgot their password. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    * @static * @returns {Promise} */ static requestPasswordReset(email, options) { const requestOptions = ParseObject._getRequestOptions(options); const controller = CoreManager.getUserController(); return controller.requestPasswordReset(email, requestOptions); } /** * Request an email verification. * * @param {string} email The email address associated with the user that * needs to verify their email. * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    * @static * @returns {Promise} */ static requestEmailVerification(email, options) { const requestOptions = ParseObject._getRequestOptions(options); const controller = CoreManager.getUserController(); return controller.requestEmailVerification(email, requestOptions); } /** * Verify whether a given password is the password of the current user. * @static * * @param {string} username The username of the user whose password should be verified. * @param {string} password The password to be verified. * @param {object} options The options. * @param {boolean} [options.ignoreEmailVerification] Set to `true` to bypass email verification and verify * the password regardless of whether the email has been verified. This requires the master key. * @returns {Promise} A promise that is fulfilled with a user when the password is correct. */ static verifyPassword(username, password, options) { if (typeof username !== "string") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Username must be a string.")); } if (typeof password !== "string") { return Promise.reject(new ParseError(ParseError.OTHER_CAUSE, "Password must be a string.")); } const controller = CoreManager.getUserController(); return controller.verifyPassword(username, password, options || {}); } /** * Allow someone to define a custom User class without className * being rewritten to _User. The default behavior is to rewrite * User to _User for legacy reasons. This allows developers to * override that behavior. * * @param {boolean} isAllowed Whether or not to allow custom User class * @static */ static allowCustomUserClass(isAllowed) { CoreManager.set("PERFORM_USER_REWRITE", !isAllowed); } /** * Allows a legacy application to start using revocable sessions. If the * current session token is not revocable, a request will be made for a new, * revocable session. * It is not necessary to call this method from cloud code unless you are * handling user signup or login from the server side. In a cloud code call, * this function will not attempt to upgrade the current token. * * @param {object} options * @static * @returns {Promise} A promise that is resolved when the process has * completed. If a replacement session token is requested, the promise * will be resolved after a new token has been fetched. */ static enableRevocableSession(options) { options = options || {}; CoreManager.set("FORCE_REVOCABLE_SESSION", true); if (canUseCurrentUser) { const current = ParseUser.current(); if (current) { return current._upgradeToRevocableSession(options); } } return Promise.resolve(); } /** * Enables the use of become or the current user in a server * environment. These features are disabled by default, since they depend on * global objects that are not memory-safe for most servers. * * @static */ static enableUnsafeCurrentUser() { canUseCurrentUser = true; } /** * Disables the use of become or the current user in any environment. * These features are disabled on servers by default, since they depend on * global objects that are not memory-safe for most servers. * * @static */ static disableUnsafeCurrentUser() { canUseCurrentUser = false; } /** * When registering users with {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#linkWith linkWith} a basic auth provider * is automatically created for you. * * For advanced authentication, you can register an Auth provider to * implement custom authentication, deauthentication. * * @param provider * @see {@link https://parseplatform.org/Parse-SDK-JS/api/master/AuthProvider.html AuthProvider} * @see {@link https://docs.parseplatform.org/js/guide/#custom-authentication-module Custom Authentication Module} * @static */ static _registerAuthenticationProvider(provider2) { authProviders[provider2.getAuthType()] = provider2; ParseUser.currentAsync().then((current) => { if (current) { current._synchronizeAuthData(provider2.getAuthType()); } }); } /** * @param provider * @param options * @param {object} [options.authData] * @param saveOpts * @deprecated since 2.9.0 see {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.User.html#logInWith logInWith} * @static * @returns {Promise} */ static _logInWith(provider2, options, saveOpts) { const user = new this(); return user.linkWith(provider2, options, saveOpts); } static _clearCache() { currentUserCache = null; currentUserCacheMatchesDisk = false; } static _setCurrentUserCache(user) { currentUserCache = user; } } ParseObject.registerSubclass("_User", ParseUser); const DefaultController$6 = { updateUserOnDisk(user) { const path = Storage.generatePath(CURRENT_USER_KEY); const json = user.toJSON(); delete json.password; json.className = "_User"; let userData = JSON.stringify(json); if (CoreManager.get("ENCRYPTED_USER")) { const crypto = CoreManager.getCryptoController(); userData = crypto.encrypt(json, CoreManager.get("ENCRYPTED_KEY")); } return Storage.setItemAsync(path, userData).then(() => { return user; }); }, removeUserFromDisk() { const path = Storage.generatePath(CURRENT_USER_KEY); currentUserCacheMatchesDisk = true; currentUserCache = null; return Storage.removeItemAsync(path); }, setCurrentUser(user) { currentUserCache = user; user._cleanupAuthData(); user._synchronizeAllAuthData(); return DefaultController$6.updateUserOnDisk(user); }, currentUser() { if (currentUserCache) { return currentUserCache; } if (currentUserCacheMatchesDisk) { return null; } if (Storage.async()) { throw new Error( "Cannot call currentUser() when using a platform with an async storage system. Call currentUserAsync() instead." ); } const path = Storage.generatePath(CURRENT_USER_KEY); let userData = Storage.getItem(path); currentUserCacheMatchesDisk = true; if (!userData) { currentUserCache = null; return null; } if (CoreManager.get("ENCRYPTED_USER")) { const crypto = CoreManager.getCryptoController(); userData = crypto.decrypt(userData, CoreManager.get("ENCRYPTED_KEY")); } userData = JSON.parse(userData); if (!userData.className) { userData.className = "_User"; } if (userData._id) { if (userData.objectId !== userData._id) { userData.objectId = userData._id; } delete userData._id; } if (userData._sessionToken) { userData.sessionToken = userData._sessionToken; delete userData._sessionToken; } const current = ParseObject.fromJSON(userData); currentUserCache = current; current._synchronizeAllAuthData(); return current; }, currentUserAsync() { if (currentUserCache) { return Promise.resolve(currentUserCache); } if (currentUserCacheMatchesDisk) { return Promise.resolve(null); } const path = Storage.generatePath(CURRENT_USER_KEY); return Storage.getItemAsync(path).then((userData) => { currentUserCacheMatchesDisk = true; if (!userData) { currentUserCache = null; return Promise.resolve(null); } if (CoreManager.get("ENCRYPTED_USER")) { const crypto = CoreManager.getCryptoController(); userData = crypto.decrypt(userData.toString(), CoreManager.get("ENCRYPTED_KEY")); } userData = JSON.parse(userData); if (!userData.className) { userData.className = "_User"; } if (userData._id) { if (userData.objectId !== userData._id) { userData.objectId = userData._id; } delete userData._id; } if (userData._sessionToken) { userData.sessionToken = userData._sessionToken; delete userData._sessionToken; } const current = ParseObject.fromJSON(userData); currentUserCache = current; current._synchronizeAllAuthData(); return Promise.resolve(current); }); }, signUp(user, attrs, options) { const username = attrs && attrs.username || user.get("username"); const password = attrs && attrs.password || user.get("password"); if (!username || !username.length) { return Promise.reject( new ParseError(ParseError.OTHER_CAUSE, "Cannot sign up user with an empty username.") ); } if (!password || !password.length) { return Promise.reject( new ParseError(ParseError.OTHER_CAUSE, "Cannot sign up user with an empty password.") ); } return user.save(attrs, options).then(() => { user._finishFetch({ password: void 0 }); if (canUseCurrentUser) { return DefaultController$6.setCurrentUser(user); } return user; }); }, logIn(user, options) { const RESTController2 = CoreManager.getRESTController(); const stateController = CoreManager.getObjectStateController(); const auth = { username: user.get("username"), password: user.get("password"), authData: user.get("authData") }; return RESTController2.request(options.usePost ? "POST" : "GET", "login", auth, options).then( (response) => { user._migrateId(response.objectId); user._setExisted(true); stateController.setPendingOp(user._getStateIdentifier(), "username", void 0); stateController.setPendingOp(user._getStateIdentifier(), "password", void 0); response.password = void 0; user._finishFetch(response); if (!canUseCurrentUser) { return Promise.resolve(user); } return DefaultController$6.setCurrentUser(user); } ); }, loginAs(user, userId) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("POST", "loginAs", { userId }, { useMasterKey: true }).then( (response) => { user._finishFetch(response); user._setExisted(true); if (!canUseCurrentUser) { return Promise.resolve(user); } return DefaultController$6.setCurrentUser(user); } ); }, become(user, options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("GET", "users/me", {}, options).then((response) => { user._finishFetch(response); user._setExisted(true); return DefaultController$6.setCurrentUser(user); }); }, hydrate(user, userJSON) { user._finishFetch(userJSON); user._setExisted(true); if (userJSON.sessionToken && canUseCurrentUser) { return DefaultController$6.setCurrentUser(user); } else { return Promise.resolve(user); } }, me(user, options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("GET", "users/me", {}, options).then((response) => { user._finishFetch(response); user._setExisted(true); return user; }); }, logOut(options) { const RESTController2 = CoreManager.getRESTController(); if (options?.sessionToken) { return RESTController2.request("POST", "logout", {}, options); } return DefaultController$6.currentUserAsync().then((currentUser) => { const path = Storage.generatePath(CURRENT_USER_KEY); let promise = Storage.removeItemAsync(path); if (currentUser !== null) { const currentSession = currentUser.getSessionToken(); if (currentSession && isRevocableSession(currentSession)) { promise = promise.then(() => { return RESTController2.request("POST", "logout", {}, { sessionToken: currentSession }); }); } currentUser._logOutWithAll(); currentUser._finishFetch({ sessionToken: void 0 }); } currentUserCacheMatchesDisk = true; currentUserCache = null; return promise; }); }, requestPasswordReset(email, options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("POST", "requestPasswordReset", { email }, options); }, async upgradeToRevocableSession(user, options) { const token = user.getSessionToken(); if (!token) { return Promise.reject( new ParseError(ParseError.SESSION_MISSING, "Cannot upgrade a user with no session token") ); } options.sessionToken = token; const RESTController2 = CoreManager.getRESTController(); const result = await RESTController2.request("POST", "upgradeToRevocableSession", {}, options); user._finishFetch({ sessionToken: result?.sessionToken || "" }); const current = await user.isCurrentAsync(); if (current) { return DefaultController$6.setCurrentUser(user); } return Promise.resolve(user); }, linkWith(user, authData, options) { return user.save({ authData }, options).then(() => { if (canUseCurrentUser) { return DefaultController$6.setCurrentUser(user); } return user; }); }, verifyPassword(username, password, options) { const RESTController2 = CoreManager.getRESTController(); const data = { username, password, ...options.ignoreEmailVerification !== void 0 && { ignoreEmailVerification: options.ignoreEmailVerification } }; return RESTController2.request("GET", "verifyPassword", data, options); }, requestEmailVerification(email, options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("POST", "verificationEmailRequest", { email }, options); } }; CoreManager.setParseUser(ParseUser); CoreManager.setUserController(DefaultController$6); let registered = false; const AnonymousUtils = { /** * Gets whether the user has their account linked to anonymous user. * * @function isLinked * @name Parse.AnonymousUtils.isLinked * @param {Parse.User} user User to check for. * The user must be logged in on this device. * @returns {boolean} true if the user has their account * linked to an anonymous user. * @static */ isLinked(user) { const provider2 = this._getAuthProvider(); return user._isLinked(provider2.getAuthType()); }, /** * Logs in a user Anonymously. * * @function logIn * @name Parse.AnonymousUtils.logIn * @param {object} options MasterKey / SessionToken. * @returns {Promise} Logged in user * @static */ logIn(options) { const provider2 = this._getAuthProvider(); return ParseUser.logInWith(provider2.getAuthType(), provider2.getAuthData(), options); }, /** * Links Anonymous User to an existing PFUser. * * @function link * @name Parse.AnonymousUtils.link * @param {Parse.User} user User to link. This must be the current user. * @param {object} options MasterKey / SessionToken. * @returns {Promise} Linked with User * @static */ link(user, options) { const provider2 = this._getAuthProvider(); return user.linkWith(provider2.getAuthType(), provider2.getAuthData(), options); }, /** * Returns true if Authentication Provider has been registered for use. * * @function isRegistered * @name Parse.AnonymousUtils.isRegistered * @returns {boolean} * @static */ isRegistered() { return registered; }, _getAuthProvider() { const provider2 = { restoreAuthentication() { return true; }, getAuthType() { return "anonymous"; }, getAuthData() { return { authData: { id: uuidv4() } }; } }; if (!registered) { ParseUser._registerAuthenticationProvider(provider2); registered = true; } return provider2; } }; function run(name, data, options) { if (typeof name !== "string" || name.length === 0) { throw new TypeError("Cloud function name must be a string."); } const requestOptions = ParseObject._getRequestOptions(options); return CoreManager.getCloudController().run(name, data, requestOptions); } function getJobsData() { return CoreManager.getCloudController().getJobsData({ useMasterKey: true }); } function startJob(name, data) { if (typeof name !== "string" || name.length === 0) { throw new TypeError("Cloud job name must be a string."); } return CoreManager.getCloudController().startJob(name, data, { useMasterKey: true }); } function getJobStatus(jobStatusId) { const query = new ParseQuery("_JobStatus"); return query.get(jobStatusId, { useMasterKey: true }); } const DefaultController$5 = { run(name, data, options) { const RESTController2 = CoreManager.getRESTController(); const payload = encode$1(data, true); const request = RESTController2.request("POST", "functions/" + name, payload, options); return request.then((res) => { if (typeof res === "object" && Object.keys(res).length > 0 && !Object.hasOwn(res, "result")) { throw new ParseError(ParseError.INVALID_JSON, "The server returned an invalid response."); } const decoded = decode(res); if (decoded && Object.hasOwn(decoded, "result")) { return Promise.resolve(decoded.result); } return Promise.resolve(void 0); }); }, getJobsData(options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("GET", "cloud_code/jobs/data", null, options); }, async startJob(name, data, options) { const RESTController2 = CoreManager.getRESTController(); const payload = encode$1(data, true); options.returnStatus = true; const response = await RESTController2.request("POST", "jobs/" + name, payload, options); return response._headers?.["X-Parse-Job-Status-Id"]; } }; CoreManager.setCloudController(DefaultController$5); const Cloud = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, getJobStatus, getJobsData, run, startJob }, Symbol.toStringTag, { value: "Module" })); class ParseRole extends ParseObject { /** * @param {string} name The name of the Role to create. * @param {Parse.ACL} acl The ACL for this role. Roles must have an ACL. * A Parse.Role is a local representation of a role persisted to the Parse * cloud. */ constructor(name, acl) { super("_Role"); if (typeof name === "string" && acl instanceof ParseACL) { this.setName(name); this.setACL(acl); } } /** * Gets the name of the role. You can alternatively call role.get("name") * * @returns {string} the name of the role. */ getName() { const name = this.get("name"); if (name == null || typeof name === "string") { return name; } return ""; } /** * Sets the name for a role. This value must be set before the role has * been saved to the server, and cannot be set once the role has been * saved. * *

    * A role's name can only contain alphanumeric characters, _, -, and * spaces. *

    * *

    This is equivalent to calling role.set("name", name)

    * * @param {string} name The name of the role. * @param {object} options Standard options object with success and error * callbacks. * @returns {Parse.Object} Returns the object, so you can chain this call. */ setName(name, options) { this._validateName(name); return this.set("name", name, options); } /** * Gets the Parse.Relation for the Parse.Users that are direct * children of this role. These users are granted any privileges that this * role has been granted (e.g. read or write access through ACLs). You can * add or remove users from the role through this relation. * *

    This is equivalent to calling role.relation("users")

    * * @returns {Parse.Relation} the relation for the users belonging to this * role. */ getUsers() { return this.relation("users"); } /** * Gets the Parse.Relation for the Parse.Roles that are direct * children of this role. These roles' users are granted any privileges that * this role has been granted (e.g. read or write access through ACLs). You * can add or remove child roles from this role through this relation. * *

    This is equivalent to calling role.relation("roles")

    * * @returns {Parse.Relation} the relation for the roles belonging to this * role. */ getRoles() { return this.relation("roles"); } _validateName(newName) { if (typeof newName !== "string") { throw new ParseError(ParseError.OTHER_CAUSE, "A role's name must be a String."); } if (!/^[0-9a-zA-Z\-_ ]+$/.test(newName)) { throw new ParseError( ParseError.OTHER_CAUSE, "A role's name can be only contain alphanumeric characters, _, -, and spaces." ); } } validate(attrs, options) { const isInvalid = super.validate(attrs, options); if (isInvalid) { return isInvalid; } if ("name" in attrs && attrs.name !== this.getName()) { const newName = attrs.name; if (this.id && this.id !== attrs.objectId) { return new ParseError( ParseError.OTHER_CAUSE, "A role's name can only be set before it has been saved." ); } try { this._validateName(newName); } catch (e) { return e; } } return false; } } CoreManager.setParseRole(ParseRole); ParseObject.registerSubclass("_Role", ParseRole); const PUBLIC_KEY = "*"; const VALID_PERMISSIONS = /* @__PURE__ */ new Map(); VALID_PERMISSIONS.set("get", {}); VALID_PERMISSIONS.set("find", {}); VALID_PERMISSIONS.set("count", {}); VALID_PERMISSIONS.set("create", {}); VALID_PERMISSIONS.set("update", {}); VALID_PERMISSIONS.set("delete", {}); VALID_PERMISSIONS.set("addField", {}); const VALID_PERMISSIONS_EXTENDED = /* @__PURE__ */ new Map(); VALID_PERMISSIONS_EXTENDED.set("protectedFields", {}); class ParseCLP { /** * @param {(Parse.User | Parse.Role | object)} userId The user to initialize the CLP for */ constructor(userId) { this.permissionsMap = {}; for (const [operation, group] of VALID_PERMISSIONS.entries()) { this.permissionsMap[operation] = Object.assign({}, group); const action = operation.charAt(0).toUpperCase() + operation.slice(1); this[`get${action}RequiresAuthentication`] = function() { return this._getAccess(operation, "requiresAuthentication"); }; this[`set${action}RequiresAuthentication`] = function(allowed) { this._setAccess(operation, "requiresAuthentication", allowed); }; this[`get${action}PointerFields`] = function() { return this._getAccess(operation, "pointerFields", false); }; this[`set${action}PointerFields`] = function(pointerFields) { this._setArrayAccess(operation, "pointerFields", pointerFields); }; this[`get${action}Access`] = function(entity) { return this._getAccess(operation, entity); }; this[`set${action}Access`] = function(entity, allowed) { this._setAccess(operation, entity, allowed); }; this[`getPublic${action}Access`] = function() { return this[`get${action}Access`](PUBLIC_KEY); }; this[`setPublic${action}Access`] = function(allowed) { this[`set${action}Access`](PUBLIC_KEY, allowed); }; this[`getRole${action}Access`] = function(role) { return this[`get${action}Access`](this._getRoleName(role)); }; this[`setRole${action}Access`] = function(role, allowed) { this[`set${action}Access`](this._getRoleName(role), allowed); }; } for (const [operation, group] of VALID_PERMISSIONS_EXTENDED.entries()) { this.permissionsMap[operation] = Object.assign({}, group); } if (userId && typeof userId === "object") { if (userId instanceof ParseUser) { this.setReadAccess(userId, true); this.setWriteAccess(userId, true); } else if (userId instanceof ParseRole) { this.setRoleReadAccess(userId, true); this.setRoleWriteAccess(userId, true); } else { for (const permission in userId) { const users = userId[permission]; const isValidPermission = !!VALID_PERMISSIONS.get(permission); const isValidPermissionExtended = !!VALID_PERMISSIONS_EXTENDED.get(permission); const isValidGroupPermission = ["readUserFields", "writeUserFields"].includes(permission); if (typeof permission !== "string" || !(isValidPermission || isValidPermissionExtended || isValidGroupPermission)) { throw new TypeError("Tried to create an CLP with an invalid permission type."); } if (isValidGroupPermission) { if (users.every((pointer) => typeof pointer === "string")) { this.permissionsMap[permission] = users; continue; } else { throw new TypeError("Tried to create an CLP with an invalid permission value."); } } for (const user in users) { const allowed = users[user]; if (typeof allowed !== "boolean" && !isValidPermissionExtended && user !== "pointerFields") { throw new TypeError("Tried to create an CLP with an invalid permission value."); } this.permissionsMap[permission][user] = allowed; } } } } else if (typeof userId === "function") { throw new TypeError("ParseCLP constructed with a function. Did you forget ()?"); } } /** * Returns a JSON-encoded version of the CLP. * * @returns {object} */ toJSON() { return { ...this.permissionsMap }; } /** * Returns whether this CLP is equal to another object * * @param other The other object to compare to * @returns {boolean} */ equals(other) { if (!(other instanceof ParseCLP)) { return false; } const permissions = Object.keys(this.permissionsMap); const otherPermissions = Object.keys(other.permissionsMap); if (permissions.length !== otherPermissions.length) { return false; } for (const permission in this.permissionsMap) { if (!other.permissionsMap[permission]) { return false; } const users = Object.keys(this.permissionsMap[permission]); const otherUsers = Object.keys(other.permissionsMap[permission]); if (users.length !== otherUsers.length) { return false; } for (const user in this.permissionsMap[permission]) { if (!other.permissionsMap[permission][user]) { return false; } if (this.permissionsMap[permission][user] !== other.permissionsMap[permission][user]) { return false; } } } return true; } _getRoleName(role) { let name = role; if (role instanceof ParseRole) { name = role.getName(); } if (typeof name !== "string") { throw new TypeError("role must be a Parse.Role or a String"); } return `role:${name}`; } _parseEntity(entity) { let userId = entity; if (userId instanceof ParseUser) { userId = userId.id; if (!userId) { throw new Error("Cannot get access for a Parse.User without an id."); } } else if (userId instanceof ParseRole) { userId = this._getRoleName(userId); } if (typeof userId !== "string") { throw new TypeError("userId must be a string."); } return userId; } _setAccess(permission, userId, allowed) { userId = this._parseEntity(userId); if (typeof allowed !== "boolean") { throw new TypeError("allowed must be either true or false."); } const permissions = this.permissionsMap[permission][userId]; if (!permissions) { if (!allowed) { return; } else { this.permissionsMap[permission][userId] = {}; } } if (allowed) { this.permissionsMap[permission][userId] = true; } else { delete this.permissionsMap[permission][userId]; } } _getAccess(permission, userId, returnBoolean = true) { userId = this._parseEntity(userId); const permissions = this.permissionsMap[permission][userId]; if (returnBoolean) { if (!permissions) { return false; } return !!this.permissionsMap[permission][userId]; } return permissions; } _setArrayAccess(permission, userId, fields) { userId = this._parseEntity(userId); const permissions = this.permissionsMap[permission][userId]; if (!permissions) { this.permissionsMap[permission][userId] = []; } if (!fields || Array.isArray(fields) && fields.length === 0) { delete this.permissionsMap[permission][userId]; } else if (Array.isArray(fields) && fields.every((field) => typeof field === "string")) { this.permissionsMap[permission][userId] = fields; } else { throw new TypeError("fields must be an array of strings or undefined."); } } _setGroupPointerPermission(operation, pointerFields) { const fields = this.permissionsMap[operation]; if (!fields) { this.permissionsMap[operation] = []; } if (!pointerFields || Array.isArray(pointerFields) && pointerFields.length === 0) { delete this.permissionsMap[operation]; } else if (Array.isArray(pointerFields) && pointerFields.every((field) => typeof field === "string")) { this.permissionsMap[operation] = pointerFields; } else { throw new TypeError(`${operation}.pointerFields must be an array of strings or undefined.`); } } _getGroupPointerPermissions(operation) { return this.permissionsMap[operation] || []; } /** * Sets user pointer fields to allow permission for get/count/find operations. * * @param {string[]} pointerFields User pointer fields */ setReadUserFields(pointerFields) { this._setGroupPointerPermission("readUserFields", pointerFields); } /** * @returns {string[]} User pointer fields */ getReadUserFields() { return this._getGroupPointerPermissions("readUserFields") || []; } /** * Sets user pointer fields to allow permission for create/delete/update/addField operations * * @param {string[]} pointerFields User pointer fields */ setWriteUserFields(pointerFields) { this._setGroupPointerPermission("writeUserFields", pointerFields); } /** * @returns {string[]} User pointer fields */ getWriteUserFields() { return this._getGroupPointerPermissions("writeUserFields") || []; } /** * Sets whether the given user is allowed to retrieve fields from this class. * * @param userId An instance of Parse.User or its objectId. * @param {string[]} fields fields to be protected */ setProtectedFields(userId, fields) { this._setArrayAccess("protectedFields", userId, fields); } /** * Returns array of fields are accessable to this user. * * @param userId An instance of Parse.User or its objectId, or a Parse.Role. * @returns {string[]} */ getProtectedFields(userId) { return this._getAccess("protectedFields", userId, false); } /** * Sets whether the given user is allowed to read from this class. * * @param userId An instance of Parse.User or its objectId. * @param {boolean} allowed whether that user should have read access. */ setReadAccess(userId, allowed) { this._setAccess("find", userId, allowed); this._setAccess("get", userId, allowed); this._setAccess("count", userId, allowed); } /** * Get whether the given user id is *explicitly* allowed to read from this class. * Even if this returns false, the user may still be able to access it if * getPublicReadAccess returns true or a role that the user belongs to has * write access. * * @param userId An instance of Parse.User or its objectId, or a Parse.Role. * @returns {boolean} */ getReadAccess(userId) { return this._getAccess("find", userId) && this._getAccess("get", userId) && this._getAccess("count", userId); } /** * Sets whether the given user id is allowed to write to this class. * * @param userId An instance of Parse.User or its objectId, or a Parse.Role.. * @param {boolean} allowed Whether that user should have write access. */ setWriteAccess(userId, allowed) { this._setAccess("create", userId, allowed); this._setAccess("update", userId, allowed); this._setAccess("delete", userId, allowed); this._setAccess("addField", userId, allowed); } /** * Gets whether the given user id is *explicitly* allowed to write to this class. * Even if this returns false, the user may still be able to write it if * getPublicWriteAccess returns true or a role that the user belongs to has * write access. * * @param userId An instance of Parse.User or its objectId, or a Parse.Role. * @returns {boolean} */ getWriteAccess(userId) { return this._getAccess("create", userId) && this._getAccess("update", userId) && this._getAccess("delete", userId) && this._getAccess("addField", userId); } /** * Sets whether the public is allowed to read from this class. * * @param {boolean} allowed */ setPublicReadAccess(allowed) { this.setReadAccess(PUBLIC_KEY, allowed); } /** * Gets whether the public is allowed to read from this class. * * @returns {boolean} */ getPublicReadAccess() { return this.getReadAccess(PUBLIC_KEY); } /** * Sets whether the public is allowed to write to this class. * * @param {boolean} allowed */ setPublicWriteAccess(allowed) { this.setWriteAccess(PUBLIC_KEY, allowed); } /** * Gets whether the public is allowed to write to this class. * * @returns {boolean} */ getPublicWriteAccess() { return this.getWriteAccess(PUBLIC_KEY); } /** * Sets whether the public is allowed to protect fields in this class. * * @param {string[]} fields */ setPublicProtectedFields(fields) { this.setProtectedFields(PUBLIC_KEY, fields); } /** * Gets whether the public is allowed to read fields from this class. * * @returns {string[]} */ getPublicProtectedFields() { return this.getProtectedFields(PUBLIC_KEY); } /** * Gets whether users belonging to the given role are allowed * to read from this class. Even if this returns false, the role may * still be able to write it if a parent role has read access. * * @param role The name of the role, or a Parse.Role object. * @returns {boolean} true if the role has read access. false otherwise. * @throws {TypeError} If role is neither a Parse.Role nor a String. */ getRoleReadAccess(role) { return this.getReadAccess(this._getRoleName(role)); } /** * Gets whether users belonging to the given role are allowed * to write to this user. Even if this returns false, the role may * still be able to write it if a parent role has write access. * * @param role The name of the role, or a Parse.Role object. * @returns {boolean} true if the role has write access. false otherwise. * @throws {TypeError} If role is neither a Parse.Role nor a String. */ getRoleWriteAccess(role) { return this.getWriteAccess(this._getRoleName(role)); } /** * Sets whether users belonging to the given role are allowed * to read from this class. * * @param role The name of the role, or a Parse.Role object. * @param {boolean} allowed Whether the given role can read this object. * @throws {TypeError} If role is neither a Parse.Role nor a String. */ setRoleReadAccess(role, allowed) { this.setReadAccess(this._getRoleName(role), allowed); } /** * Sets whether users belonging to the given role are allowed * to write to this class. * * @param role The name of the role, or a Parse.Role object. * @param {boolean} allowed Whether the given role can write this object. * @throws {TypeError} If role is neither a Parse.Role nor a String. */ setRoleWriteAccess(role, allowed) { this.setWriteAccess(this._getRoleName(role), allowed); } /** * Gets whether users belonging to the given role are allowed * to count to this user. Even if this returns false, the role may * still be able to count it if a parent role has count access. * * @param role The name of the role, or a Parse.Role object. * @returns {string[]} * @throws {TypeError} If role is neither a Parse.Role nor a String. */ getRoleProtectedFields(role) { return this.getProtectedFields(this._getRoleName(role)); } /** * Sets whether users belonging to the given role are allowed * to set access field in this class. * * @param role The name of the role, or a Parse.Role object. * @param {string[]} fields Fields to be protected by Role. * @throws {TypeError} If role is neither a Parse.Role nor a String. */ setRoleProtectedFields(role, fields) { this.setProtectedFields(this._getRoleName(role), fields); } } var eventsExports = requireEvents(); const events = /* @__PURE__ */ getDefaultExportFromCjs(eventsExports); const __CJS__import__1__$1 = /* @__PURE__ */ _mergeNamespaces({ __proto__: null, default: events }, [eventsExports]); let EventEmitter; try { if (false) ; else { EventEmitter = (events || __CJS__import__1__$1).EventEmitter; } } catch (_) { } const EventEmitter$1 = EventEmitter; class ParseConfig { constructor() { this.attributes = {}; this._escapedAttributes = {}; } /** * Gets the value of an attribute. * * @param {string} attr The name of an attribute. * @returns {*} */ get(attr) { return this.attributes[attr]; } /** * Gets the HTML-escaped value of an attribute. * * @param {string} attr The name of an attribute. * @returns {string} */ escape(attr) { const html = this._escapedAttributes[attr]; if (html) { return html; } const val = this.attributes[attr]; let escaped = ""; if (val != null) { escaped = escape$1(val.toString()); } this._escapedAttributes[attr] = escaped; return escaped; } /** * Retrieves the most recently-fetched configuration object, either from * memory or from local storage if necessary. * * @static * @returns {Parse.Config} The most recently-fetched Parse.Config if it * exists, else an empty Parse.Config. */ static current() { const controller = CoreManager.getConfigController(); return controller.current(); } /** * Gets a new configuration object from the server. * * @static * @param {object} options * Valid options are:
      *
    • useMasterKey: In Cloud Code and Node only, causes the Master Key to * be used for this request. *
    * @returns {Promise} A promise that is resolved with a newly-created * configuration object when the get completes. */ static get(options) { const controller = CoreManager.getConfigController(); return controller.get(options); } /** * Save value keys to the server. * * @static * @param {object} attrs The config parameters and values. * @param {object} masterKeyOnlyFlags The flags that define whether config parameters listed * in `attrs` should be retrievable only by using the master key. * For example: `param1: true` makes `param1` only retrievable by using the master key. * If a parameter is not provided or set to `false`, it can be retrieved without * using the master key. * @returns {Promise} A promise that is resolved with a newly-created * configuration object or with the current with the update. */ static save(attrs, masterKeyOnlyFlags) { const controller = CoreManager.getConfigController(); return controller.save(attrs, masterKeyOnlyFlags).then( () => { return controller.get({ useMasterKey: true }); }, (error) => { return Promise.reject(error); } ); } /** * Used for testing * * @private */ static _clearCache() { currentConfig = null; } } let currentConfig = null; const CURRENT_CONFIG_KEY = "currentConfig"; function decodePayload(data) { try { const json = JSON.parse(data); if (json && typeof json === "object") { return decode(json); } } catch (_) { return null; } } const DefaultController$4 = { current() { if (currentConfig) { return currentConfig; } const config2 = new ParseConfig(); const storagePath = Storage.generatePath(CURRENT_CONFIG_KEY); if (!Storage.async()) { const configData = Storage.getItem(storagePath); if (configData) { const attributes = decodePayload(configData); if (attributes) { config2.attributes = attributes; currentConfig = config2; } } return config2; } return Storage.getItemAsync(storagePath).then((configData) => { if (configData) { const attributes = decodePayload(configData); if (attributes) { config2.attributes = attributes; currentConfig = config2; } } return config2; }); }, get(options) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("GET", "config", {}, options).then((response) => { if (!response || !response.params) { const error = new ParseError(ParseError.INVALID_JSON, "Config JSON response invalid."); return Promise.reject(error); } const config2 = new ParseConfig(); config2.attributes = {}; for (const attr in response.params) { config2.attributes[attr] = decode(response.params[attr]); } currentConfig = config2; return Storage.setItemAsync( Storage.generatePath(CURRENT_CONFIG_KEY), JSON.stringify(response.params) ).then(() => { return config2; }); }); }, save(attrs, masterKeyOnlyFlags) { const RESTController2 = CoreManager.getRESTController(); const encodedAttrs = {}; for (const key2 in attrs) { encodedAttrs[key2] = encode$1(attrs[key2]); } return RESTController2.request( "PUT", "config", { params: encodedAttrs, masterKeyOnly: masterKeyOnlyFlags }, { useMasterKey: true } ).then((response) => { if (response && response.result) { return Promise.resolve(); } else { const error = new ParseError( ParseError.INTERNAL_SERVER_ERROR, "Error occured updating Config." ); return Promise.reject(error); } }); } }; CoreManager.setConfigController(DefaultController$4); let initialized = false; let requestedPermissions; let initOptions; const provider = { authenticate(options) { if (typeof FB === "undefined") { options.error(this, "Facebook SDK not found."); } FB.login( (response) => { if (response.authResponse) { if (options.success) { options.success(this, { id: response.authResponse.userID, access_token: response.authResponse.accessToken, expiration_date: new Date( response.authResponse.expiresIn * 1e3 + (/* @__PURE__ */ new Date()).getTime() ).toJSON() }); } } else { if (options.error) { options.error(this, response); } } }, { scope: requestedPermissions } ); }, restoreAuthentication(authData) { if (authData) { const newOptions = {}; if (initOptions) { for (const key2 in initOptions) { newOptions[key2] = initOptions[key2]; } } newOptions.status = false; const existingResponse = FB.getAuthResponse(); if (existingResponse && existingResponse.userID !== authData.id) { FB.logout(); } FB.init(newOptions); } return true; }, getAuthType() { return "facebook"; }, deauthenticate() { this.restoreAuthentication(null); } }; const FacebookUtils = { /** * Initializes Parse Facebook integration. Call this function after you * have loaded the Facebook Javascript SDK with the same parameters * as you would pass to * * FB.init(). Parse.FacebookUtils will invoke FB.init() for you * with these arguments. * * @function init * @name Parse.FacebookUtils.init * @param {object} options Facebook options argument as described here: * * FB.init(). The status flag will be coerced to 'false' because it * interferes with Parse Facebook integration. Call FB.getLoginStatus() * explicitly if this behavior is required by your application. */ init(options) { if (typeof FB === "undefined") { throw new Error("The Facebook JavaScript SDK must be loaded before calling init."); } initOptions = {}; if (options) { for (const key2 in options) { initOptions[key2] = options[key2]; } } if (initOptions.status && typeof console !== "undefined") { const warn = console.warn || console.log || function() { }; warn.call( console, 'The "status" flag passed into FB.init, when set to true, can interfere with Parse Facebook integration, so it has been suppressed. Please call FB.getLoginStatus() explicitly if you require this behavior.' ); } initOptions.status = false; FB.init(initOptions); ParseUser._registerAuthenticationProvider(provider); initialized = true; }, /** * Gets whether the user has their account linked to Facebook. * * @function isLinked * @name Parse.FacebookUtils.isLinked * @param {Parse.User} user User to check for a facebook link. * The user must be logged in on this device. * @returns {boolean} true if the user has their account * linked to Facebook. */ isLinked(user) { return user._isLinked("facebook"); }, /** * Logs in a user using Facebook. This method delegates to the Facebook * SDK to authenticate the user, and then automatically logs in (or * creates, in the case where it is a new user) a Parse.User. * * Standard API: * * logIn(permission: string, authData: Object); * * Advanced API: Used for handling your own oAuth tokens * {@link https://docs.parseplatform.org/rest/guide/#linking-users} * * logIn(authData: Object, options?: Object); * * @function logIn * @name Parse.FacebookUtils.logIn * @param {(string | object)} permissions The permissions required for Facebook * log in. This is a comma-separated string of permissions. * Alternatively, supply a Facebook authData object as described in our * REST API docs if you want to handle getting facebook auth tokens * yourself. * @param {object} options MasterKey / SessionToken. Alternatively can be used for authData if permissions is a string * @returns {Promise} */ logIn(permissions, options) { if (!permissions || typeof permissions === "string") { if (!initialized) { throw new Error("You must initialize FacebookUtils before calling logIn."); } requestedPermissions = permissions; return ParseUser.logInWith("facebook", options); } const authData = { authData: permissions }; return ParseUser.logInWith("facebook", authData, options); }, /** * Links Facebook to an existing PFUser. This method delegates to the * Facebook SDK to authenticate the user, and then automatically links * the account to the Parse.User. * * Standard API: * * link(user: Parse.User, permission: string, authData?: Object); * * Advanced API: Used for handling your own oAuth tokens * {@link https://docs.parseplatform.org/rest/guide/#linking-users} * * link(user: Parse.User, authData: Object, options?: FullOptions); * * @function link * @name Parse.FacebookUtils.link * @param {Parse.User} user User to link to Facebook. This must be the * current user. * @param {(string | object)} permissions The permissions required for Facebook * log in. This is a comma-separated string of permissions. * Alternatively, supply a Facebook authData object as described in our * REST API docs if you want to handle getting facebook auth tokens * yourself. * @param {object} options MasterKey / SessionToken. Alternatively can be used for authData if permissions is a string * @returns {Promise} */ link(user, permissions, options) { if (!permissions || typeof permissions === "string") { if (!initialized) { throw new Error("You must initialize FacebookUtils before calling link."); } requestedPermissions = permissions; return user.linkWith("facebook", options); } const authData = { authData: permissions }; return user.linkWith("facebook", authData, options); }, /** * Unlinks the Parse.User from a Facebook account. * * @function unlink * @name Parse.FacebookUtils.unlink * @param {Parse.User} user User to unlink from Facebook. This must be the * current user. * @param {object} options Standard options object with success and error * callbacks. * @returns {Promise} */ unlink: function(user, options) { if (!initialized) { throw new Error("You must initialize FacebookUtils before calling unlink."); } return user._unlinkFrom("facebook", options); }, // Used for testing purposes _getAuthProvider() { return provider; } }; const DefaultController$3 = { get(type2, functionName, triggerName) { let url = "hooks/" + type2; if (functionName) { url += "/" + functionName; if (triggerName) { url += "/" + triggerName; } } return this.sendRequest("GET", url); }, create(hook) { let url; if (hook.functionName && hook.url) { url = "hooks/functions"; } else if (hook.className && hook.triggerName && hook.url) { url = "hooks/triggers"; } else { return Promise.reject({ error: "invalid hook declaration", code: 143 }); } return this.sendRequest("POST", url, hook); }, remove(hook) { let url; if (hook.functionName) { url = "hooks/functions/" + hook.functionName; delete hook.functionName; } else if (hook.className && hook.triggerName) { url = "hooks/triggers/" + hook.className + "/" + hook.triggerName; delete hook.className; delete hook.triggerName; } else { return Promise.reject({ error: "invalid hook declaration", code: 143 }); } return this.sendRequest("PUT", url, { __op: "Delete" }); }, update(hook) { let url; if (hook.functionName && hook.url) { url = "hooks/functions/" + hook.functionName; delete hook.functionName; } else if (hook.className && hook.triggerName && hook.url) { url = "hooks/triggers/" + hook.className + "/" + hook.triggerName; delete hook.className; delete hook.triggerName; } else { return Promise.reject({ error: "invalid hook declaration", code: 143 }); } return this.sendRequest("PUT", url, hook); }, sendRequest(method, url, body) { return CoreManager.getRESTController().request(method, url, body, { useMasterKey: true }).then((res) => { const decoded = decode(res); if (decoded) { return Promise.resolve(decoded); } return Promise.reject( new ParseError(ParseError.INVALID_JSON, "The server returned an invalid response.") ); }); } }; CoreManager.setHooksController(DefaultController$3); const LocalDatastoreController$1 = { async fromPinWithName(name) { const values = await Storage.getItemAsync(name); if (!values) { return []; } const objects = JSON.parse(values); return objects; }, pinWithName(name, value) { const values = JSON.stringify(value); return Storage.setItemAsync(name, values); }, unPinWithName(name) { return Storage.removeItemAsync(name); }, async getAllContents() { const keys2 = await Storage.getAllKeysAsync(); return keys2.reduce(async (previousPromise, key2) => { const LDS = await previousPromise; if (isLocalDatastoreKey(key2)) { const value = await Storage.getItemAsync(key2); try { LDS[key2] = JSON.parse(value); } catch (error) { console.error("Error getAllContents: ", error); } } return LDS; }, Promise.resolve({})); }, // Used for testing async getRawStorage() { const keys2 = await Storage.getAllKeysAsync(); return keys2.reduce(async (previousPromise, key2) => { const LDS = await previousPromise; const value = await Storage.getItemAsync(key2); LDS[key2] = value; return LDS; }, Promise.resolve({})); }, async clear() { const keys2 = await Storage.getAllKeysAsync(); const toRemove = []; for (const key2 of keys2) { if (isLocalDatastoreKey(key2)) { toRemove.push(key2); } } const promises = toRemove.map(this.unPinWithName); return Promise.all(promises); } }; let LocalDatastoreController = LocalDatastoreController$1; const LocalDatastore = { isEnabled: false, isSyncing: false, fromPinWithName(name) { const controller = CoreManager.getLocalDatastoreController(); return controller.fromPinWithName(name); }, async pinWithName(name, value) { const controller = CoreManager.getLocalDatastoreController(); return controller.pinWithName(name, value); }, async unPinWithName(name) { const controller = CoreManager.getLocalDatastoreController(); return controller.unPinWithName(name); }, _getAllContents() { const controller = CoreManager.getLocalDatastoreController(); return controller.getAllContents(); }, // Use for testing async _getRawStorage() { const controller = CoreManager.getLocalDatastoreController(); return controller.getRawStorage(); }, async _clear() { const controller = CoreManager.getLocalDatastoreController(); return controller.clear(); }, // Pin the object and children recursively // Saves the object and children key to Pin Name async _handlePinAllWithName(name, objects) { const pinName = this.getPinName(name); const toPinPromises = []; const objectKeys = []; for (const parent of objects) { const children = this._getChildren(parent); const parentKey = this.getKeyForObject(parent); const json = parent._toFullJSON(void 0, true); if (parent._localId) { json._localId = parent._localId; } children[parentKey] = json; for (const objectKey in children) { objectKeys.push(objectKey); toPinPromises.push(this.pinWithName(objectKey, [children[objectKey]])); } } const fromPinPromise = this.fromPinWithName(pinName); const [pinned] = await Promise.all([fromPinPromise, toPinPromises]); const toPin = [.../* @__PURE__ */ new Set([...pinned || [], ...objectKeys])]; return this.pinWithName(pinName, toPin); }, // Removes object and children keys from pin name // Keeps the object and children pinned async _handleUnPinAllWithName(name, objects) { const localDatastore = await this._getAllContents(); const pinName = this.getPinName(name); const promises = []; let objectKeys = []; for (const parent of objects) { const children = this._getChildren(parent); const parentKey = this.getKeyForObject(parent); objectKeys.push(parentKey, ...Object.keys(children)); } objectKeys = [...new Set(objectKeys)]; let pinned = localDatastore[pinName] || []; pinned = pinned.filter((item) => !objectKeys.includes(item)); if (pinned.length == 0) { promises.push(this.unPinWithName(pinName)); delete localDatastore[pinName]; } else { promises.push(this.pinWithName(pinName, pinned)); localDatastore[pinName] = pinned; } for (const objectKey of objectKeys) { let hasReference = false; for (const key2 in localDatastore) { if (key2 === DEFAULT_PIN || key2.startsWith(PIN_PREFIX)) { const pinnedObjects = localDatastore[key2] || []; if (pinnedObjects.includes(objectKey)) { hasReference = true; break; } } } if (!hasReference) { promises.push(this.unPinWithName(objectKey)); } } return Promise.all(promises); }, // Retrieve all pointer fields from object recursively _getChildren(object) { const encountered = {}; const json = object._toFullJSON(void 0, true); for (const key2 in json) { if (json[key2] && json[key2].__type && json[key2].__type === "Object") { this._traverse(json[key2], encountered); } } return encountered; }, _traverse(object, encountered) { if (!object.objectId) { return; } else { const objectKey = this.getKeyForObject(object); if (encountered[objectKey]) { return; } encountered[objectKey] = object; } for (const key2 in object) { let json = object[key2]; if (!object[key2]) { json = object; } if (json.__type && json.__type === "Object") { this._traverse(json, encountered); } } }, // Transform keys in pin name to objects async _serializeObjectsFromPinName(name) { const localDatastore = await this._getAllContents(); const allObjects = []; for (const key2 in localDatastore) { if (key2.startsWith(OBJECT_PREFIX)) { allObjects.push(localDatastore[key2][0]); } } if (!name) { return allObjects; } const pinName = this.getPinName(name); const pinned = localDatastore[pinName]; if (!Array.isArray(pinned)) { return []; } const promises = pinned.map((objectKey) => this.fromPinWithName(objectKey)); let objects = await Promise.all(promises); objects = [].concat(...objects); return objects.filter((object) => object != null); }, // Replaces object pointers with pinned pointers // The object pointers may contain old data // Uses Breadth First Search Algorithm async _serializeObject(objectKey, localDatastore) { let LDS = localDatastore; if (!LDS) { LDS = await this._getAllContents(); } if (!LDS[objectKey] || LDS[objectKey].length === 0) { return null; } const root = LDS[objectKey][0]; const queue2 = []; const meta = {}; let uniqueId = 0; meta[uniqueId] = root; queue2.push(uniqueId); while (queue2.length !== 0) { const nodeId = queue2.shift(); const subTreeRoot = meta[nodeId]; for (const field in subTreeRoot) { const value = subTreeRoot[field]; if (value.__type && value.__type === "Object") { const key2 = this.getKeyForObject(value); if (LDS[key2] && LDS[key2].length > 0) { const pointer = LDS[key2][0]; uniqueId++; meta[uniqueId] = pointer; subTreeRoot[field] = pointer; queue2.push(uniqueId); } } } } return root; }, // Called when an object is save / fetched // Update object pin value async _updateObjectIfPinned(object) { if (!this.isEnabled) { return; } const objectKey = this.getKeyForObject(object); const pinned = await this.fromPinWithName(objectKey); if (!pinned || pinned.length === 0) { return; } return this.pinWithName(objectKey, [object._toFullJSON()]); }, // Called when object is destroyed // Unpin object and remove all references from pin names // TODO: Destroy children? async _destroyObjectIfPinned(object) { if (!this.isEnabled) { return; } const localDatastore = await this._getAllContents(); const objectKey = this.getKeyForObject(object); const pin = localDatastore[objectKey]; if (!pin) { return; } const promises = [this.unPinWithName(objectKey)]; delete localDatastore[objectKey]; for (const key2 in localDatastore) { if (key2 === DEFAULT_PIN || key2.startsWith(PIN_PREFIX)) { let pinned = localDatastore[key2] || []; if (pinned.includes(objectKey)) { pinned = pinned.filter((item) => item !== objectKey); if (pinned.length == 0) { promises.push(this.unPinWithName(key2)); delete localDatastore[key2]; } else { promises.push(this.pinWithName(key2, pinned)); localDatastore[key2] = pinned; } } } } return Promise.all(promises); }, // Update pin and references of the unsaved object async _updateLocalIdForObject(localId, object) { if (!this.isEnabled) { return; } const localKey = `${OBJECT_PREFIX}${object.className}_${localId}`; const objectKey = this.getKeyForObject(object); const unsaved = await this.fromPinWithName(localKey); if (!unsaved || unsaved.length === 0) { return; } const promises = [this.unPinWithName(localKey), this.pinWithName(objectKey, unsaved)]; const localDatastore = await this._getAllContents(); for (const key2 in localDatastore) { if (key2 === DEFAULT_PIN || key2.startsWith(PIN_PREFIX)) { let pinned = localDatastore[key2] || []; if (pinned.includes(localKey)) { pinned = pinned.filter((item) => item !== localKey); pinned.push(objectKey); promises.push(this.pinWithName(key2, pinned)); localDatastore[key2] = pinned; } } } return Promise.all(promises); }, /** * Updates Local Datastore from Server * *
         * await Parse.LocalDatastore.updateFromServer();
         * 
    * * @function updateFromServer * @name Parse.LocalDatastore.updateFromServer * @static */ async updateFromServer() { if (!this.checkIfEnabled() || this.isSyncing) { return; } const localDatastore = await this._getAllContents(); const keys2 = []; for (const key2 in localDatastore) { if (key2.startsWith(OBJECT_PREFIX)) { keys2.push(key2); } } if (keys2.length === 0) { return; } this.isSyncing = true; const pointersHash = {}; for (const key2 of keys2) { let [, , className, objectId] = key2.split("_"); if (key2.split("_").length === 5 && key2.split("_")[3] === "User") { className = "_User"; objectId = key2.split("_")[4]; } if (objectId.startsWith("local")) { continue; } if (!(className in pointersHash)) { pointersHash[className] = /* @__PURE__ */ new Set(); } pointersHash[className].add(objectId); } const queryPromises = Object.keys(pointersHash).map((className) => { const objectIds = Array.from(pointersHash[className]); const query = new ParseQuery(className); query.limit(objectIds.length); if (objectIds.length === 1) { query.equalTo("objectId", objectIds[0]); } else { query.containedIn("objectId", objectIds); } return query.find(); }); try { const responses = await Promise.all(queryPromises); const objects = [].concat.apply([], responses); const pinPromises = objects.map((object) => { const objectKey = this.getKeyForObject(object); return this.pinWithName(objectKey, object._toFullJSON()); }); await Promise.all(pinPromises); this.isSyncing = false; } catch (error) { console.error("Error syncing LocalDatastore: ", error); this.isSyncing = false; } }, getKeyForObject(object) { const objectId = object.objectId || object._getId(); return `${OBJECT_PREFIX}${object.className}_${objectId}`; }, getPinName(pinName) { if (!pinName || pinName === DEFAULT_PIN) { return DEFAULT_PIN; } return PIN_PREFIX + pinName; }, checkIfEnabled() { if (!this.isEnabled) { console.error("Parse.enableLocalDatastore() must be called first"); } return this.isEnabled; } }; CoreManager.setLocalDatastoreController(LocalDatastoreController); CoreManager.setLocalDatastore(LocalDatastore); function send(data, options = {}) { if (data.where && data.where instanceof ParseQuery) { data.where = data.where.toJSON().where; } if (data.push_time && typeof data.push_time === "object") { data.push_time = data.push_time.toJSON(); } if (data.expiration_time && typeof data.expiration_time === "object") { data.expiration_time = data.expiration_time.toJSON(); } if (data.expiration_time && data.expiration_interval) { throw new Error("expiration_time and expiration_interval cannot both be set."); } const pushOptions = { useMasterKey: true }; if (Object.hasOwn(options, "useMasterKey")) { pushOptions.useMasterKey = options.useMasterKey; } return CoreManager.getPushController().send(data, pushOptions); } function getPushStatus(pushStatusId, options = {}) { const pushOptions = { useMasterKey: true }; if (Object.hasOwn(options, "useMasterKey")) { pushOptions.useMasterKey = options.useMasterKey; } const query = new ParseQuery("_PushStatus"); return query.get(pushStatusId, pushOptions); } const DefaultController$2 = { async send(data, options) { options.returnStatus = true; const response = await CoreManager.getRESTController().request("POST", "push", data, options); return response._headers?.["X-Parse-Push-Status-Id"]; } }; CoreManager.setPushController(DefaultController$2); const Push = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, getPushStatus, send }, Symbol.toStringTag, { value: "Module" })); const FIELD_TYPES = [ "String", "Number", "Boolean", "Bytes", "Date", "File", "GeoPoint", "Polygon", "Array", "Object", "Pointer", "Relation" ]; class ParseSchema { /** * @param {string} className Parse Class string. */ constructor(className) { if (typeof className === "string") { if (className === "User" && CoreManager.get("PERFORM_USER_REWRITE")) { this.className = "_User"; } else { this.className = className; } } this._fields = {}; this._indexes = {}; } /** * Static method to get all schemas * * @returns {Promise} A promise that is resolved with the result when * the query completes. */ static all() { const controller = CoreManager.getSchemaController(); return controller.get("").then((response) => { if (response.results.length === 0) { throw new Error("Schema not found."); } return response.results; }); } /** * Get the Schema from Parse * * @returns {Promise} A promise that is resolved with the result when * the query completes. */ get() { this.assertClassName(); const controller = CoreManager.getSchemaController(); return controller.get(this.className).then((response) => { if (!response) { throw new Error("Schema not found."); } return response; }); } /** * Create a new Schema on Parse * * @returns {Promise} A promise that is resolved with the result when * the query completes. */ save() { this.assertClassName(); const controller = CoreManager.getSchemaController(); const params = { className: this.className, fields: this._fields, indexes: this._indexes, classLevelPermissions: this._clp }; return controller.create(this.className, params); } /** * Update a Schema on Parse * * @returns {Promise} A promise that is resolved with the result when * the query completes. */ update() { this.assertClassName(); const controller = CoreManager.getSchemaController(); const params = { className: this.className, fields: this._fields, indexes: this._indexes, classLevelPermissions: this._clp }; this._fields = {}; this._indexes = {}; return controller.update(this.className, params); } /** * Removing a Schema from Parse * Can only be used on Schema without objects * * @returns {Promise} A promise that is resolved with the result when * the query completes. */ delete() { this.assertClassName(); const controller = CoreManager.getSchemaController(); return controller.delete(this.className); } /** * Removes all objects from a Schema (class) in Parse. * EXERCISE CAUTION, running this will delete all objects for this schema and cannot be reversed * * @returns {Promise} A promise that is resolved with the result when * the query completes. */ purge() { this.assertClassName(); const controller = CoreManager.getSchemaController(); return controller.purge(this.className); } /** * Assert if ClassName has been filled * * @private */ assertClassName() { if (!this.className) { throw new Error("You must set a Class Name before making any request."); } } /** * Sets Class Level Permissions when creating / updating a Schema. * EXERCISE CAUTION, running this may override CLP for this schema and cannot be reversed * * @param {object | Parse.CLP} clp Class Level Permissions * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ setCLP(clp) { if (clp instanceof ParseCLP) { this._clp = clp.toJSON(); } else { this._clp = clp; } return this; } /** * Adding a Field to Create / Update a Schema * * @param {string} name Name of the field that will be created on Parse * @param {string} type Can be a (String|Number|Boolean|Date|Parse.File|Parse.GeoPoint|Array|Object|Pointer|Parse.Relation) * @param {object} options * Valid options are:
      *
    • required: If field is not set, save operation fails (Requires Parse Server 3.7.0+) *
    • defaultValue: If field is not set, a default value is selected (Requires Parse Server 3.7.0+) *
    • targetClass: Required if type is Pointer or Parse.Relation *
    * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addField(name, type2, options) { type2 = type2 || "String"; options = options || {}; if (!name) { throw new Error("field name may not be null."); } if (FIELD_TYPES.indexOf(type2) === -1) { throw new Error(`${type2} is not a valid type.`); } if (type2 === "Pointer") { return this.addPointer(name, options.targetClass, options); } if (type2 === "Relation") { return this.addRelation(name, options.targetClass); } const fieldOptions = { type: type2 }; if (typeof options.required === "boolean") { fieldOptions.required = options.required; } if (options.defaultValue !== void 0) { fieldOptions.defaultValue = options.defaultValue; } if (type2 === "Date") { if (options && options.defaultValue) { fieldOptions.defaultValue = { __type: "Date", iso: new Date(options.defaultValue) }; } } if (type2 === "Bytes") { if (options && options.defaultValue) { fieldOptions.defaultValue = { __type: "Bytes", base64: options.defaultValue }; } } this._fields[name] = fieldOptions; return this; } /** * Adding an Index to Create / Update a Schema * * @param {string} name Name of the index * @param {object} index { field: value } * @returns {Parse.Schema} Returns the schema, so you can chain this call. * *
         * schema.addIndex('index_name', { 'field': 1 });
         * 
    */ addIndex(name, index) { if (!name) { throw new Error("index name may not be null."); } if (!index) { throw new Error("index may not be null."); } this._indexes[name] = index; return this; } /** * Adding String Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addString(name, options) { return this.addField(name, "String", options); } /** * Adding Number Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addNumber(name, options) { return this.addField(name, "Number", options); } /** * Adding Boolean Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addBoolean(name, options) { return this.addField(name, "Boolean", options); } /** * Adding Bytes Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addBytes(name, options) { return this.addField(name, "Bytes", options); } /** * Adding Date Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addDate(name, options) { return this.addField(name, "Date", options); } /** * Adding File Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addFile(name, options) { return this.addField(name, "File", options); } /** * Adding GeoPoint Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addGeoPoint(name, options) { return this.addField(name, "GeoPoint", options); } /** * Adding Polygon Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addPolygon(name, options) { return this.addField(name, "Polygon", options); } /** * Adding Array Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addArray(name, options) { return this.addField(name, "Array", options); } /** * Adding Object Field * * @param {string} name Name of the field that will be created on Parse * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addObject(name, options) { return this.addField(name, "Object", options); } /** * Adding Pointer Field * * @param {string} name Name of the field that will be created on Parse * @param {string} targetClass Name of the target Pointer Class * @param {object} options See {@link https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html#addField addField} * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addPointer(name, targetClass, options) { if (!name) { throw new Error("field name may not be null."); } if (!targetClass) { throw new Error("You need to set the targetClass of the Pointer."); } const fieldOptions = { type: "Pointer", targetClass }; if (typeof options?.required === "boolean") { fieldOptions.required = options.required; } if (options?.defaultValue !== void 0) { fieldOptions.defaultValue = options.defaultValue; if (options.defaultValue instanceof ParseObject) { fieldOptions.defaultValue = options.defaultValue.toPointer(); } } this._fields[name] = fieldOptions; return this; } /** * Adding Relation Field * * @param {string} name Name of the field that will be created on Parse * @param {string} targetClass Name of the target Pointer Class * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ addRelation(name, targetClass) { if (!name) { throw new Error("field name may not be null."); } if (!targetClass) { throw new Error("You need to set the targetClass of the Relation."); } this._fields[name] = { type: "Relation", targetClass }; return this; } /** * Deleting a Field to Update on a Schema * * @param {string} name Name of the field * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ deleteField(name) { this._fields[name] = { __op: "Delete" }; return this; } /** * Deleting an Index to Update on a Schema * * @param {string} name Name of the field * @returns {Parse.Schema} Returns the schema, so you can chain this call. */ deleteIndex(name) { this._indexes[name] = { __op: "Delete" }; return this; } } const DefaultController$1 = { send(className, method, params = {}) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request(method, `schemas/${className}`, params, { useMasterKey: true }); }, get(className) { return this.send(className, "GET"); }, create(className, params) { return this.send(className, "POST", params); }, update(className, params) { return this.send(className, "PUT", params); }, delete(className) { return this.send(className, "DELETE"); }, purge(className) { const RESTController2 = CoreManager.getRESTController(); return RESTController2.request("DELETE", `purge/${className}`, {}, { useMasterKey: true }); } }; CoreManager.setSchemaController(DefaultController$1); class ParseSession extends ParseObject { /** * @param {object} attributes The initial set of data to store in the user. */ constructor(attributes) { super("_Session"); if (attributes && typeof attributes === "object") { try { this.set(attributes || {}); } catch (_) { throw new Error("Can't create an invalid Session"); } } } /** * Returns the session token string. * * @returns {string} */ getSessionToken() { const token = this.get("sessionToken"); if (typeof token === "string") { return token; } return ""; } static readOnlyAttributes() { return ["createdWith", "expiresAt", "installationId", "restricted", "sessionToken", "user"]; } /** * Retrieves the Session object for the currently logged in session. * * @param {object} options useMasterKey * @static * @returns {Promise} A promise that is resolved with the Parse.Session * object after it has been fetched. If there is no current user, the * promise will be rejected. */ static current(options) { const controller = CoreManager.getSessionController(); const sessionOptions = ParseObject._getRequestOptions(options); return ParseUser.currentAsync().then((user) => { if (!user) { return Promise.reject("There is no current user."); } sessionOptions.sessionToken = user.getSessionToken(); return controller.getSession(sessionOptions); }); } /** * Determines whether the current session token is revocable. * This method is useful for migrating Express.js or Node.js web apps to * use revocable sessions. If you are migrating an app that uses the Parse * SDK in the browser only, please use Parse.User.enableRevocableSession() * instead, so that sessions can be automatically upgraded. * * @static * @returns {boolean} */ static isCurrentSessionRevocable() { const currentUser = ParseUser.current(); if (currentUser) { return isRevocableSession(currentUser.getSessionToken() || ""); } return false; } } ParseObject.registerSubclass("_Session", ParseSession); const DefaultController = { getSession(options) { const RESTController2 = CoreManager.getRESTController(); const session = new ParseSession(); return RESTController2.request("GET", "sessions/me", {}, options).then((sessionData) => { session._finishFetch(sessionData); session._setExisted(true); return session; }); } }; CoreManager.setSessionController(DefaultController); class LiveQuerySubscription { /* * @param {string | number} id - subscription id * @param {string} query - query to subscribe to * @param {string} sessionToken - optional session token * @param {object} client - LiveQueryClient instance */ constructor(id, query, sessionToken, client) { this.id = id; this.query = query; this.sessionToken = sessionToken; this.client = client; this.subscribePromise = resolvingPromise(); this.unsubscribePromise = resolvingPromise(); this.subscribed = false; const Emitter = CoreManager.getEventEmitter(); this.emitter = new Emitter(); this.on = (eventName, listener) => this.emitter.on(eventName, listener); this.emit = (eventName, ...args) => this.emitter.emit(eventName, ...args); this.on("error", () => { }); } /** * Close the subscription * * @returns {Promise} */ unsubscribe() { return CoreManager.getLiveQueryController().getDefaultLiveQueryClient().then((liveQueryClient) => { this.emit("close"); return liveQueryClient.unsubscribe(this); }); } /** * Execute a query on this subscription. * The results will be delivered via the 'result' event. */ find() { if (this.client) { this.client.connectPromise.then(() => { this.client.socket.send(JSON.stringify({ op: "query", requestId: this.id })); }); } } } const CLIENT_STATE = { INITIALIZED: "initialized", CONNECTING: "connecting", CONNECTED: "connected", CLOSED: "closed", RECONNECTING: "reconnecting", DISCONNECTED: "disconnected" }; const OP_TYPES = { CONNECT: "connect", SUBSCRIBE: "subscribe", UNSUBSCRIBE: "unsubscribe" }; const OP_EVENTS = { CONNECTED: "connected", SUBSCRIBED: "subscribed", UNSUBSCRIBED: "unsubscribed", ERROR: "error", RESULT: "result" }; const CLIENT_EMMITER_TYPES = { CLOSE: "close", ERROR: "error", OPEN: "open" }; const SUBSCRIPTION_EMMITER_TYPES = { OPEN: "open", CLOSE: "close", ERROR: "error", RESULT: "result" }; const generateInterval = (k) => { return Math.random() * Math.min(30, Math.pow(2, k) - 1) * 1e3; }; class LiveQueryClient { /** * Creates a new LiveQueryClient instance. * * @param options - Configuration options for the LiveQuery client * @param options.applicationId - The applicationId of your Parse app * @param options.serverURL - The URL of your LiveQuery server (must start with 'ws' or 'wss') * @param options.javascriptKey - (Optional) The JavaScript key for your Parse app * @param options.masterKey - (Optional) Your Parse Master Key (Node.js only!) * @param options.sessionToken - (Optional) Session token for authenticated requests * @param options.installationId - (Optional) Installation ID for the client */ constructor({ applicationId, serverURL, javascriptKey, masterKey, sessionToken, installationId }) { if (!serverURL || serverURL.indexOf("ws") !== 0) { throw new Error( "You need to set a proper Parse LiveQuery server url before using LiveQueryClient" ); } this.reconnectHandle = null; this.attempts = 1; this.id = 0; this.requestId = 1; this.serverURL = serverURL; this.applicationId = applicationId; this.javascriptKey = javascriptKey || void 0; this.masterKey = masterKey || void 0; this.sessionToken = sessionToken || void 0; this.installationId = installationId || void 0; this.additionalProperties = true; this.connectPromise = resolvingPromise(); this.subscriptions = /* @__PURE__ */ new Map(); this.state = CLIENT_STATE.INITIALIZED; const EventEmitter2 = CoreManager.getEventEmitter(); this.emitter = new EventEmitter2(); this.on = (eventName, listener) => this.emitter.on(eventName, listener); this.emit = (eventName, ...args) => this.emitter.emit(eventName, ...args); this.on("error", () => { }); } shouldOpen() { return this.state === CLIENT_STATE.INITIALIZED || this.state === CLIENT_STATE.DISCONNECTED; } /** * Subscribes to a ParseQuery * * If you provide the sessionToken, when the LiveQuery server gets ParseObject's * updates from parse server, it'll try to check whether the sessionToken fulfills * the ParseObject's ACL. The LiveQuery server will only send updates to clients whose * sessionToken is fit for the ParseObject's ACL. You can check the LiveQuery protocol * here for more details. The subscription you get is the same subscription you get * from our Standard API. * * @param {ParseQuery} query - the ParseQuery you want to subscribe to * @param {string} sessionToken (optional) * @returns {LiveQuerySubscription | undefined} */ subscribe(query, sessionToken) { if (!query) { return; } const className = query.className; const queryJSON = query.toJSON(); const where = queryJSON.where; const keys2 = queryJSON.keys?.split(","); const watch = queryJSON.watch?.split(","); const subscribeRequest = { op: OP_TYPES.SUBSCRIBE, requestId: this.requestId, query: { className, where, keys: keys2, watch }, sessionToken: void 0 }; if (sessionToken) { subscribeRequest.sessionToken = sessionToken; } const subscription = new LiveQuerySubscription(this.requestId, query, sessionToken, this); this.subscriptions.set(this.requestId, subscription); this.requestId += 1; this.connectPromise.then(() => { this.socket.send(JSON.stringify(subscribeRequest)); }).catch((error) => { subscription.subscribePromise.reject(error); }); return subscription; } /** * After calling unsubscribe you'll stop receiving events from the subscription object. * * @param {object} subscription - subscription you would like to unsubscribe from. * @returns {Promise | undefined} */ async unsubscribe(subscription) { if (!subscription) { return; } const unsubscribeRequest = { op: OP_TYPES.UNSUBSCRIBE, requestId: subscription.id }; return this.connectPromise.then(() => { return this.socket.send(JSON.stringify(unsubscribeRequest)); }).then(() => { return subscription.unsubscribePromise; }); } /** * After open is called, the LiveQueryClient will try to send a connect request * to the LiveQuery server. * */ open() { const WebSocketImplementation = CoreManager.getWebSocketController(); if (!WebSocketImplementation) { this.emit(CLIENT_EMMITER_TYPES.ERROR, "Can not find WebSocket implementation"); return; } if (this.state !== CLIENT_STATE.RECONNECTING) { this.state = CLIENT_STATE.CONNECTING; } this.socket = new WebSocketImplementation(this.serverURL); this.socket.closingPromise = resolvingPromise(); this.socket.onopen = () => { this._handleWebSocketOpen(); }; this.socket.onmessage = (event) => { this._handleWebSocketMessage(event); }; this.socket.onclose = (event) => { this.socket.closingPromise?.resolve(event); this._handleWebSocketClose(); }; this.socket.onerror = (error) => { this._handleWebSocketError(error); }; } resubscribe() { this.subscriptions.forEach((subscription, requestId) => { const query = subscription.query; const queryJSON = query.toJSON(); const where = queryJSON.where; const keys2 = queryJSON.keys?.split(","); const watch = queryJSON.watch?.split(","); const className = query.className; const sessionToken = subscription.sessionToken; const subscribeRequest = { op: OP_TYPES.SUBSCRIBE, requestId, query: { className, where, keys: keys2, watch }, sessionToken: void 0 }; if (sessionToken) { subscribeRequest.sessionToken = sessionToken; } this.connectPromise.then(() => { this.socket.send(JSON.stringify(subscribeRequest)); }); }); } /** * This method will close the WebSocket connection to this LiveQueryClient, * cancel the auto reconnect and unsubscribe all subscriptions based on it. * * @returns {Promise | undefined} CloseEvent {@link https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close_event} */ async close() { if (this.state === CLIENT_STATE.INITIALIZED || this.state === CLIENT_STATE.DISCONNECTED) { return; } this.state = CLIENT_STATE.DISCONNECTED; this.socket?.close(); for (const subscription of this.subscriptions.values()) { subscription.subscribed = false; subscription.emit(SUBSCRIPTION_EMMITER_TYPES.CLOSE); } this._handleReset(); this.emit(CLIENT_EMMITER_TYPES.CLOSE); return this.socket?.closingPromise; } // ensure we start with valid state if connect is called again after close _handleReset() { this.attempts = 1; this.id = 0; this.requestId = 1; this.connectPromise = resolvingPromise(); this.subscriptions = /* @__PURE__ */ new Map(); } _handleWebSocketOpen() { const connectRequest = { op: OP_TYPES.CONNECT, applicationId: this.applicationId, javascriptKey: this.javascriptKey, masterKey: this.masterKey, sessionToken: this.sessionToken, installationId: void 0 }; if (this.additionalProperties) { connectRequest.installationId = this.installationId; } this.socket.send(JSON.stringify(connectRequest)); } _handleWebSocketMessage(event) { let data = event.data; if (typeof data === "string") { data = JSON.parse(data); } let subscription = null; if (data.requestId) { subscription = this.subscriptions.get(data.requestId) || null; } const response = { clientId: data.clientId, installationId: data.installationId }; switch (data.op) { case OP_EVENTS.CONNECTED: if (this.state === CLIENT_STATE.RECONNECTING) { this.resubscribe(); } this.emit(CLIENT_EMMITER_TYPES.OPEN); this.id = data.clientId; this.connectPromise.resolve(); this.state = CLIENT_STATE.CONNECTED; break; case OP_EVENTS.SUBSCRIBED: if (subscription) { this.attempts = 1; subscription.subscribed = true; subscription.subscribePromise.resolve(); setTimeout(() => subscription.emit(SUBSCRIPTION_EMMITER_TYPES.OPEN, response), 200); } break; case OP_EVENTS.ERROR: { const parseError = new ParseError(data.code, data.error); if (!this.id) { this.connectPromise.reject(parseError); this.state = CLIENT_STATE.DISCONNECTED; } if (data.requestId) { if (subscription) { subscription.subscribePromise.reject(parseError); setTimeout(() => subscription.emit(SUBSCRIPTION_EMMITER_TYPES.ERROR, data.error), 200); } } else { this.emit(CLIENT_EMMITER_TYPES.ERROR, data.error); } if (data.error === "Additional properties not allowed") { this.additionalProperties = false; } if (data.reconnect) { this._handleReconnect(); } break; } case OP_EVENTS.UNSUBSCRIBED: { if (subscription) { this.subscriptions.delete(data.requestId); subscription.subscribed = false; subscription.unsubscribePromise.resolve(); } break; } case OP_EVENTS.RESULT: { if (subscription) { const objects = data.results.map((json) => { if (!json.className && subscription.query) { json.className = subscription.query.className; } return ParseObject.fromJSON(json, false); }); subscription.emit(SUBSCRIPTION_EMMITER_TYPES.RESULT, objects); } break; } default: { if (!subscription) { break; } let override = false; if (data.original) { override = true; delete data.original.__type; for (const field in data.original) { if (!(field in data.object)) { data.object[field] = void 0; } } data.original = ParseObject.fromJSON(data.original, false); } delete data.object.__type; const parseObject = ParseObject.fromJSON( data.object, !(subscription.query && subscription.query._select) ? override : false ); if (data.original) { subscription.emit(data.op, parseObject, data.original, response); } else { subscription.emit(data.op, parseObject, response); } const localDatastore = CoreManager.getLocalDatastore(); if (override && localDatastore.isEnabled) { localDatastore._updateObjectIfPinned(parseObject).then(() => { }); } } } } _handleWebSocketClose() { if (this.state === CLIENT_STATE.DISCONNECTED) { return; } this.state = CLIENT_STATE.CLOSED; this.emit(CLIENT_EMMITER_TYPES.CLOSE); for (const subscription of this.subscriptions.values()) { subscription.emit(SUBSCRIPTION_EMMITER_TYPES.CLOSE); } this._handleReconnect(); } _handleWebSocketError(error) { this.emit(CLIENT_EMMITER_TYPES.ERROR, error); for (const subscription of this.subscriptions.values()) { subscription.emit(SUBSCRIPTION_EMMITER_TYPES.ERROR, error); } this._handleReconnect(); } _handleReconnect() { if (this.state === CLIENT_STATE.DISCONNECTED) { return; } this.state = CLIENT_STATE.RECONNECTING; const time = generateInterval(this.attempts); if (this.reconnectHandle) { clearTimeout(this.reconnectHandle); } this.reconnectHandle = setTimeout( (() => { this.attempts++; this.connectPromise = resolvingPromise(); this.open(); }).bind(this), time ); } } function getLiveQueryClient() { return CoreManager.getLiveQueryController().getDefaultLiveQueryClient(); } class LiveQuery { constructor() { const Emitter = CoreManager.getEventEmitter(); this.emitter = new Emitter(); this.on = (eventName, listener) => this.emitter.on(eventName, listener); this.emit = (eventName, ...args) => this.emitter.emit(eventName, ...args); this.on("error", () => { }); } /** * After open is called, the LiveQuery will try to send a connect request * to the LiveQuery server. */ async open() { const liveQueryClient = await getLiveQueryClient(); liveQueryClient.open(); } /** * When you're done using LiveQuery, you can call Parse.LiveQuery.close(). * This function will close the WebSocket connection to the LiveQuery server, * cancel the auto reconnect, and unsubscribe all subscriptions based on it. * If you call query.subscribe() after this, we'll create a new WebSocket * connection to the LiveQuery server. */ async close() { const liveQueryClient = await getLiveQueryClient(); liveQueryClient.close(); } } let defaultLiveQueryClient; const DefaultLiveQueryController = { setDefaultLiveQueryClient(liveQueryClient) { defaultLiveQueryClient = liveQueryClient; }, async getDefaultLiveQueryClient() { if (defaultLiveQueryClient) { return defaultLiveQueryClient; } const [currentUser, installationId] = await Promise.all([ CoreManager.getUserController().currentUserAsync(), CoreManager.getInstallationController().currentInstallationId() ]); const sessionToken = currentUser ? currentUser.getSessionToken() : void 0; let liveQueryServerURL = CoreManager.get("LIVEQUERY_SERVER_URL"); if (liveQueryServerURL && liveQueryServerURL.indexOf("ws") !== 0) { throw new Error( "You need to set a proper Parse LiveQuery server url before using LiveQueryClient" ); } if (!liveQueryServerURL) { const serverURL = CoreManager.get("SERVER_URL"); const protocol = serverURL.indexOf("https") === 0 ? "wss://" : "ws://"; const host = serverURL.replace(/^https?:\/\//, ""); liveQueryServerURL = protocol + host; CoreManager.set("LIVEQUERY_SERVER_URL", liveQueryServerURL); } const applicationId = CoreManager.get("APPLICATION_ID"); const javascriptKey = CoreManager.get("JAVASCRIPT_KEY"); const masterKey = CoreManager.get("MASTER_KEY"); defaultLiveQueryClient = new LiveQueryClient({ applicationId, serverURL: liveQueryServerURL, javascriptKey, masterKey, sessionToken, installationId }); const LiveQuery2 = CoreManager.getLiveQuery(); defaultLiveQueryClient.on("error", (error) => { LiveQuery2.emit("error", error); }); defaultLiveQueryClient.on("open", () => { LiveQuery2.emit("open"); }); defaultLiveQueryClient.on("close", () => { LiveQuery2.emit("close"); }); return defaultLiveQueryClient; }, _clearCachedDefaultClient() { defaultLiveQueryClient = null; } }; CoreManager.setLiveQueryController(DefaultLiveQueryController); const StorageController$3 = { async: 0, getItem(path) { return localStorage.getItem(path); }, setItem(path, value) { try { localStorage.setItem(path, value); } catch (e) { console.log(e.message); } }, removeItem(path) { localStorage.removeItem(path); }, getAllKeys() { const keys2 = []; for (let i2 = 0; i2 < localStorage.length; i2 += 1) { keys2.push(localStorage.key(i2)); } return keys2; }, clear() { localStorage.clear(); } }; const memMap = {}; const StorageController$2 = { async: 0, getItem(path) { if (Object.hasOwn(memMap, path)) { return memMap[path]; } return null; }, setItem(path, value) { memMap[path] = String(value); }, removeItem(path) { delete memMap[path]; }, getAllKeys() { return Object.keys(memMap); }, clear() { for (const key2 in memMap) { if (Object.hasOwn(memMap, key2)) { delete memMap[key2]; } } } }; let StorageController = StorageController$2; { StorageController = StorageController$3; } const StorageController$1 = StorageController; var browser$1; var hasRequiredBrowser; function requireBrowser() { if (hasRequiredBrowser) return browser$1; hasRequiredBrowser = 1; browser$1 = function() { throw new Error( "ws does not work in the browser. Browser clients must use the native WebSocket object" ); }; return browser$1; } var browserExports = requireBrowser(); const browser = /* @__PURE__ */ getDefaultExportFromCjs(browserExports); const __CJS__import__0__ = /* @__PURE__ */ _mergeNamespaces({ __proto__: null, default: browser }, [browserExports]); class SocketWeapp { constructor(serverURL) { this.onopen = () => { }; this.onmessage = () => { }; this.onclose = () => { }; this.onerror = () => { }; wx.onSocketOpen(() => { this.onopen(); }); wx.onSocketMessage((msg) => { this.onmessage(msg); }); wx.onSocketClose((event) => { this.onclose(event); }); wx.onSocketError((error) => { this.onerror(error); }); wx.connectSocket({ url: serverURL }); } send(data) { wx.sendSocketMessage({ data }); } close() { wx.closeSocket(); } } const __CJS__import__1__ = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: SocketWeapp }, Symbol.toStringTag, { value: "Module" })); let WebSocketController; try { if (true) { WebSocketController = typeof WebSocket === "function" || typeof WebSocket === "object" ? WebSocket : null; } } catch (_) { } const WebSocketController$1 = WebSocketController; var define_process_env_default = {}; const Parse = { ACL: ParseACL, Analytics, AnonymousUtils, Cloud, CLP: ParseCLP, CoreManager, Config: ParseConfig, Error: ParseError, FacebookUtils, File: ParseFile, GeoPoint: ParseGeoPoint, Polygon: ParsePolygon, Installation: ParseInstallation, LocalDatastore, Object: ParseObject, Op: { Set: SetOp, Unset: UnsetOp, Increment: IncrementOp, Add: AddOp, Remove: RemoveOp, AddUnique: AddUniqueOp, Relation: RelationOp }, Push, Query: ParseQuery, Relation: ParseRelation, Role: ParseRole, Schema: ParseSchema, Session: ParseSession, Storage, User: ParseUser, LiveQueryClient, IndexedDB: void 0, Hooks: void 0, Parse: void 0, set EventuallyQueue(queue2) { CoreManager.setEventuallyQueue(queue2); }, get EventuallyQueue() { return CoreManager.getEventuallyQueue(); }, initialize(applicationId, javaScriptKey) { if (CoreManager.get("IS_NODE") && !define_process_env_default.SERVER_RENDERING) { console.log( "It looks like you're using the browser version of the SDK in a node.js environment. You should require('parse/node') instead." ); } Parse._initialize(applicationId, javaScriptKey); }, _initialize(applicationId, javaScriptKey, masterKey, maintenanceKey) { CoreManager.set("APPLICATION_ID", applicationId); CoreManager.set("JAVASCRIPT_KEY", javaScriptKey); CoreManager.set("MAINTENANCE_KEY", maintenanceKey); CoreManager.set("MASTER_KEY", masterKey); CoreManager.set("USE_MASTER_KEY", false); CoreManager.setIfNeeded("EventEmitter", EventEmitter$1); CoreManager.setIfNeeded("LiveQuery", new LiveQuery()); CoreManager.setIfNeeded("CryptoController", CryptoController); CoreManager.setIfNeeded("EventuallyQueue", EventuallyQueue); CoreManager.setIfNeeded("InstallationController", InstallationController); CoreManager.setIfNeeded("LocalDatastoreController", LocalDatastoreController); CoreManager.setIfNeeded("StorageController", StorageController$1); CoreManager.setIfNeeded("WebSocketController", WebSocketController$1); { Parse.IndexedDB = CoreManager.setIfNeeded( "IndexedDBStorageController", IndexedDBStorageController$1 ); } }, setAsyncStorage(storage) { CoreManager.setAsyncStorage(storage); }, setLocalDatastoreController(controller) { CoreManager.setLocalDatastoreController(controller); }, getServerHealth() { return CoreManager.getRESTController().request("GET", "health"); }, set applicationId(value) { CoreManager.set("APPLICATION_ID", value); }, get applicationId() { return CoreManager.get("APPLICATION_ID"); }, set javaScriptKey(value) { CoreManager.set("JAVASCRIPT_KEY", value); }, get javaScriptKey() { return CoreManager.get("JAVASCRIPT_KEY"); }, set masterKey(value) { CoreManager.set("MASTER_KEY", value); }, get masterKey() { return CoreManager.get("MASTER_KEY"); }, set maintenanceKey(value) { CoreManager.set("MAINTENANCE_KEY", value); }, get maintenanceKey() { return CoreManager.get("MAINTENANCE_KEY"); }, set serverURL(value) { CoreManager.set("SERVER_URL", value); }, get serverURL() { return CoreManager.get("SERVER_URL"); }, set LiveQuery(liveQuery) { CoreManager.setLiveQuery(liveQuery); }, get LiveQuery() { return CoreManager.getLiveQuery(); }, set liveQueryServerURL(value) { CoreManager.set("LIVEQUERY_SERVER_URL", value); }, get liveQueryServerURL() { return CoreManager.get("LIVEQUERY_SERVER_URL"); }, set encryptedUser(value) { CoreManager.set("ENCRYPTED_USER", value); }, get encryptedUser() { return CoreManager.get("ENCRYPTED_USER"); }, set secret(value) { CoreManager.set("ENCRYPTED_KEY", value); }, get secret() { return CoreManager.get("ENCRYPTED_KEY"); }, set idempotency(value) { CoreManager.set("IDEMPOTENCY", value); }, get idempotency() { return CoreManager.get("IDEMPOTENCY"); }, set allowCustomObjectId(value) { CoreManager.set("ALLOW_CUSTOM_OBJECT_ID", value); }, get allowCustomObjectId() { return CoreManager.get("ALLOW_CUSTOM_OBJECT_ID"); }, set nodeLogging(value) { CoreManager.set("NODE_LOGGING", value); }, get nodeLogging() { return CoreManager.get("NODE_LOGGING"); }, _request(...args) { return CoreManager.getRESTController().request.apply(null, args); }, _ajax(...args) { return CoreManager.getRESTController().ajax.apply(null, args); }, // We attempt to match the signatures of the legacy versions of these methods _decode(_, value) { return decode(value); }, _encode(value, _, disallowObjects) { return encode$1(value, disallowObjects); }, _getInstallationId() { return CoreManager.getInstallationController().currentInstallationId(); }, enableLocalDatastore(polling2, ms) { if (!this.applicationId) { console.log("'enableLocalDatastore' must be called after 'initialize'"); return; } if (!this.LocalDatastore.isEnabled) { this.LocalDatastore.isEnabled = true; if (polling2 || typeof polling2 === "undefined") { CoreManager.getEventuallyQueue().poll(ms || 2e3); } } }, isLocalDatastoreEnabled() { return this.LocalDatastore.isEnabled; }, dumpLocalDatastore() { if (!this.LocalDatastore.isEnabled) { console.log("Parse.enableLocalDatastore() must be called first"); return Promise.resolve({}); } else { return Parse.LocalDatastore._getAllContents(); } }, enableEncryptedUser() { this.encryptedUser = true; }, isEncryptedUserEnabled() { return this.encryptedUser; } }; CoreManager.setRESTController(RESTController); { globalThis.Parse = Parse; } Parse.Parse = Parse; }));