@webex/web-client-media-engine 2.1.4 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +23 -634
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +23 -634
- package/dist/esm/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +2 -2
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../node_modules/@webex/webrtc-core/dist/esm/index.js","../../node_modules/@webex/json-multistream/dist/esm/index.js","../../node_modules/uuid/dist/esm-browser/rng.js","../../node_modules/uuid/dist/esm-browser/regex.js","../../node_modules/uuid/dist/esm-browser/validate.js","../../node_modules/uuid/dist/esm-browser/stringify.js","../../node_modules/uuid/dist/esm-browser/v1.js","../../node_modules/uuid/dist/esm-browser/parse.js","../../node_modules/uuid/dist/esm-browser/v35.js","../../node_modules/uuid/dist/esm-browser/md5.js","../../node_modules/uuid/dist/esm-browser/v3.js","../../node_modules/uuid/dist/esm-browser/v4.js","../../node_modules/uuid/dist/esm-browser/sha1.js","../../node_modules/uuid/dist/esm-browser/v5.js","../../node_modules/uuid/dist/esm-browser/nil.js","../../node_modules/uuid/dist/esm-browser/version.js","../../node_modules/@webex/rtcstats/dist/rtcstats.js","../../node_modules/@webex/ts-sdp/dist/esm/index.js","../../node_modules/events/events.js","../../node_modules/bowser/es5.js","../../node_modules/async/dist/async.mjs","../../node_modules/js-logger/src/logger.js"],"sourcesContent":["function _mergeNamespaces(n, m) {\n m.forEach(function (e) {\n e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {\n if (k !== 'default' && !(k in n)) {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n });\n return Object.freeze(n);\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar logger$1 = {exports: {}};\n\n/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\n\n(function (module) {\n(function (global) {\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(commonjsGlobal));\n}(logger$1));\n\nvar Logger = logger$1.exports;\n\nconst DEFAULT_LOGGER_NAME = 'webrtc-core';\r\nconst logger = Logger.get(DEFAULT_LOGGER_NAME);\r\nLogger.useDefaults({\r\n defaultLevel: Logger.DEBUG,\r\n /* eslint-disable-next-line jsdoc/require-jsdoc */\r\n formatter: (messages, context) => {\r\n messages.unshift(`[${context.name}]`);\r\n },\r\n});\n\nvar DeviceKind;\r\n(function (DeviceKind) {\r\n DeviceKind[\"AudioInput\"] = \"audioinput\";\r\n DeviceKind[\"AudioOutput\"] = \"audiooutput\";\r\n DeviceKind[\"VideoInput\"] = \"videoinput\";\r\n})(DeviceKind || (DeviceKind = {}));\r\n/**\r\n * Prompts the user for permission to use a media input which produces a MediaStream with tracks\r\n * containing the requested types of media.\r\n *\r\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\r\n * along with any requirements for each type.\r\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\r\n * media has successfully been obtained.\r\n */\r\nfunction getUserMedia(constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return navigator.mediaDevices.getUserMedia(constraints);\r\n });\r\n}\r\n/**\r\n * Prompts the user for permission to use a user's display media and audio. If a video track is\r\n * absent from the constraints argument, one will still be provided.\r\n *\r\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\r\n * along with any requirements for each type.\r\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\r\n * media has successfully been obtained.\r\n */\r\nfunction getDisplayMedia(constraints) {\r\n return navigator.mediaDevices.getDisplayMedia(constraints);\r\n}\r\n/**\r\n * Requests a list of the available media input and output devices, such as microphones, cameras,\r\n * headsets, and so forth.\r\n *\r\n * @returns A Promise that receives an array of MediaDeviceInfo objects when the promise is\r\n * fulfilled.\r\n */\r\nfunction enumerateDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return navigator.mediaDevices.enumerateDevices();\r\n });\r\n}\r\n/**\r\n * Adds the callback handler to be notified of a media device change (for example, a headset is\r\n * unplugged from the user's computer).\r\n *\r\n * @param handler - The callback function to execute.\r\n */\r\nfunction setOnDeviceChangeHandler$1(handler) {\r\n navigator.mediaDevices.ondevicechange = handler;\r\n}\r\n/**\r\n * Checks permissions using the navigator's permissions api.\r\n *\r\n * @param deviceKinds - Array of DeviceKind items.\r\n * @throws An error if camera or microphone aren't available options for query() (Firefox), or if\r\n * navigator.permissions is undefined (Safari and others).\r\n * @returns Array of Permission Status objects.\r\n */\r\nfunction checkNavigatorPermissions(deviceKinds) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const permissionRequests = [];\r\n if (deviceKinds.includes(DeviceKind.VideoInput)) {\r\n permissionRequests.push(navigator.permissions.query({ name: 'camera' }));\r\n }\r\n if (deviceKinds.includes(DeviceKind.AudioInput)) {\r\n permissionRequests.push(navigator.permissions.query({ name: 'microphone' }));\r\n }\r\n return Promise.all(permissionRequests);\r\n });\r\n}\r\n/**\r\n * Check to see if the user has granted the application permission to use their devices.\r\n *\r\n * @param deviceKinds - Array of DeviceKind items.\r\n * @returns True if device permissions exist, false if otherwise.\r\n */\r\nfunction checkDevicePermissions(deviceKinds) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const permissions = yield checkNavigatorPermissions(deviceKinds);\r\n if (permissions.every((permission) => permission.state === 'granted')) {\r\n return true;\r\n }\r\n // eslint-disable-next-line no-empty\r\n }\r\n catch (e) { }\r\n try {\r\n const devices = yield enumerateDevices();\r\n // If permissions are granted, the MediaDeviceInfo objects will have labels.\r\n return devices\r\n .filter((device) => deviceKinds.includes(device.kind))\r\n .every((device) => device.label);\r\n // eslint-disable-next-line no-empty\r\n }\r\n catch (e) { }\r\n return false;\r\n });\r\n}\r\n/**\r\n * Ensures that the user has granted permissions to the microphone and camera.\r\n *\r\n * @param deviceKinds - Array of DeviceKind items.\r\n * @param callback - Function that will be executed while device permissions are granted. After this\r\n * returns, permissions (for example device labels in Firefox) may not be available anymore.\r\n * @returns The callback's response.\r\n */\r\nfunction ensureDevicePermissions(deviceKinds, callback) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const hasDevicePermissions = yield checkDevicePermissions(deviceKinds);\r\n if (!hasDevicePermissions) {\r\n const stream = yield getUserMedia({\r\n audio: deviceKinds.includes(DeviceKind.AudioInput),\r\n video: deviceKinds.includes(DeviceKind.VideoInput),\r\n });\r\n // Callback is here to call a function while an active capture exists, so that the browser\r\n // (Firefox) will allow the user to access device information.\r\n const callbackRes = yield callback();\r\n // Stop tracks in the stream so the browser (Safari) will know that there is not an active\r\n // stream running.\r\n stream.getTracks().forEach((track) => track.stop());\r\n return callbackRes;\r\n }\r\n return callback();\r\n }\r\n catch (e) {\r\n logger.error(e);\r\n throw new Error('Failed to ensure device permissions.');\r\n }\r\n });\r\n}\n\nvar media = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get DeviceKind () { return DeviceKind; },\n getUserMedia: getUserMedia,\n getDisplayMedia: getDisplayMedia,\n enumerateDevices: enumerateDevices,\n setOnDeviceChangeHandler: setOnDeviceChangeHandler$1,\n checkDevicePermissions: checkDevicePermissions,\n ensureDevicePermissions: ensureDevicePermissions\n});\n\nvar ErrorTypes;\r\n(function (ErrorTypes) {\r\n ErrorTypes[\"DEVICE_PERMISSION_DENIED\"] = \"DEVICE_PERMISSION_DENIED\";\r\n ErrorTypes[\"CREATE_CAMERA_TRACK_FAILED\"] = \"CREATE_CAMERA_TRACK_FAILED\";\r\n ErrorTypes[\"CREATE_MICROPHONE_TRACK_FAILED\"] = \"CREATE_MICROPHONE_TRACK_FAILED\";\r\n})(ErrorTypes || (ErrorTypes = {}));\r\n/**\r\n * Represents a WCME error, which contains error type and error message.\r\n */\r\nclass WcmeError {\r\n /**\r\n * Creates new error.\r\n *\r\n * @param type - Error type.\r\n * @param message - Error message.\r\n */\r\n constructor(type, message = '') {\r\n this.type = type;\r\n this.message = message;\r\n }\r\n}\r\n/**\r\n * Creates a camera video track. Please note that the constraint params in second getUserMedia call would NOT take effect when:\r\n *\r\n * 1. Previous captured video track from the same device is not stopped .\r\n * 2. Previous createCameraTrack() call for the same device is in progress.\r\n *\r\n * @param constructor - Constructor for the local camera track.\r\n * @param constraints - Video device constraints.\r\n * @returns A LocalTrack object or an error.\r\n */\r\nfunction createCameraTrack(constructor, constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let stream;\r\n try {\r\n stream = yield getUserMedia({ video: Object.assign({}, constraints) });\r\n }\r\n catch (error) {\r\n throw new WcmeError(ErrorTypes.CREATE_CAMERA_TRACK_FAILED, `Failed to create camera track ${error}`);\r\n }\r\n return new constructor(stream);\r\n });\r\n}\r\n/**\r\n * Creates a microphone audio track.\r\n *\r\n * @param constructor - Constructor for the local microphone track.\r\n * @param constraints - Audio device constraints.\r\n * @returns A LocalTrack object or an error.\r\n */\r\nfunction createMicrophoneTrack(constructor, constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let stream;\r\n try {\r\n stream = yield getUserMedia({ audio: Object.assign({}, constraints) });\r\n }\r\n catch (error) {\r\n throw new WcmeError(ErrorTypes.CREATE_MICROPHONE_TRACK_FAILED, `Failed to create microphone track ${error}`);\r\n }\r\n return new constructor(stream);\r\n });\r\n}\r\n/**\r\n * Creates a display video track.\r\n *\r\n * @param constructor - Constructor for the local display track.\r\n * @param videoContentHint - An optional parameters to give a hint for the content of the track.\r\n * @returns A Promise that resolves to a LocalDisplayTrack.\r\n */\r\nfunction createDisplayTrack(constructor, videoContentHint) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const stream = yield getDisplayMedia({ video: true });\r\n return new constructor(stream, videoContentHint);\r\n });\r\n}\r\n/**\r\n * Creates a display video track and a system audio track.\r\n *\r\n * @param videoTrackConstructor - Constructor for the local display track.\r\n * @param audioTrackConstructor - Constructor for the local system audio track.\r\n * @param videoContentHint - An optional parameter to give a hint for the content of the track.\r\n * @returns A Promise that resolves to a LocalDisplayTrack and a LocalSystemAudioTrack. If no system\r\n * audio is available, the LocalSystemAudioTrack will be resolved as null instead.\r\n */\r\nfunction createDisplayTrackWithAudio(videoTrackConstructor, audioTrackConstructor, videoContentHint) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const stream = yield getDisplayMedia({ video: true, audio: true });\r\n // eslint-disable-next-line new-cap\r\n const videoTrack = new videoTrackConstructor(new MediaStream(stream.getVideoTracks()), videoContentHint);\r\n let audioTrack = null;\r\n if (stream.getAudioTracks().length > 0) {\r\n // eslint-disable-next-line new-cap\r\n audioTrack = new audioTrackConstructor(new MediaStream(stream.getAudioTracks()));\r\n }\r\n return [videoTrack, audioTrack];\r\n });\r\n}\r\n/**\r\n * Enumerates the media input and output devices available.\r\n *\r\n * @param deviceKind - Optional filter to return a specific device kind.\r\n * @returns List of media devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getDevices(deviceKind) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let devices;\r\n try {\r\n devices = yield ensureDevicePermissions([DeviceKind.AudioInput, DeviceKind.VideoInput], enumerateDevices);\r\n }\r\n catch (error) {\r\n throw new WcmeError(ErrorTypes.DEVICE_PERMISSION_DENIED, 'Failed to ensure device permissions');\r\n }\r\n return devices.filter((v) => (deviceKind ? v.kind === deviceKind : true));\r\n });\r\n}\r\n/**\r\n * Helper function to get a list of microphone devices.\r\n *\r\n * @returns List of microphone devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getAudioInputDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return getDevices(DeviceKind.AudioInput);\r\n });\r\n}\r\n/**\r\n * Helper function to get a list of speaker devices.\r\n *\r\n * @returns List of speaker devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getAudioOutputDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return getDevices(DeviceKind.AudioOutput);\r\n });\r\n}\r\n/**\r\n * Helper function to get a list of camera devices.\r\n *\r\n * @returns List of camera devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getVideoInputDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return getDevices(DeviceKind.VideoInput);\r\n });\r\n}\r\n/**\r\n * Export the setOnDeviceChangeHandler method directly from the core lib.\r\n */\r\nconst { setOnDeviceChangeHandler } = media;\n\nvar events = {exports: {}};\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter$1() {\n EventEmitter$1.init.call(this);\n}\nevents.exports = EventEmitter$1;\nevents.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter$1.EventEmitter = EventEmitter$1;\n\nEventEmitter$1.prototype._events = undefined;\nEventEmitter$1.prototype._eventsCount = 0;\nEventEmitter$1.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter$1, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter$1.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter$1.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter$1.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter$1.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter$1.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter$1.prototype.on = EventEmitter$1.prototype.addListener;\n\nEventEmitter$1.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter$1.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter$1.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter$1.prototype.off = EventEmitter$1.prototype.removeListener;\n\nEventEmitter$1.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter$1.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter$1.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter$1.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter$1.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter$1.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n/**\r\n * Typed event emitter class.\r\n */\r\nclass EventEmitter extends events.exports.EventEmitter {\r\n}\n\nvar LocalTrackEvents;\r\n(function (LocalTrackEvents) {\r\n LocalTrackEvents[\"Ended\"] = \"ended\";\r\n LocalTrackEvents[\"Muted\"] = \"muted\";\r\n /**\r\n * Fires when the published state of a LocalTrack changes. A value of 'true' indicates the\r\n * track has been published, and 'false' indicates that it is no longer published. Tracks are\r\n * unpublished by default, and must be published explicitly (no event will be fired to indicate\r\n * the initial state of 'unpublished').\r\n */\r\n LocalTrackEvents[\"PublishedStateUpdate\"] = \"published-state-update\";\r\n /**\r\n * Fires when there has been a change in the underlying track.\r\n */\r\n LocalTrackEvents[\"UnderlyingTrackChange\"] = \"underlying-track-change\";\r\n /**\r\n * Fires when the applyConstraints() has been called for the track.\r\n */\r\n LocalTrackEvents[\"TrackConstraintsChange\"] = \"track-constraints-change\";\r\n})(LocalTrackEvents || (LocalTrackEvents = {}));\r\n// TBD: Fix this once types are published separately\r\n// export type TrackEffect = BaseMicrophoneEffect | BaseCameraEffect;\r\n/**\r\n * Basic Track class. Wrapper for LocalTrack from 'webrtc-core'.\r\n */\r\nclass LocalTrack extends EventEmitter {\r\n /**\r\n * Constructor for the Track class. Creates an empty CoreLocalTrack or uses an existing one.\r\n *\r\n * @param stream - The MediaStream for this LocalTrack.\r\n */\r\n constructor(stream) {\r\n super();\r\n this.isPublished = false;\r\n this.loadingEffects = new Map();\r\n this.effects = new Map();\r\n this.originalStream = stream;\r\n this.underlyingStream = stream;\r\n // Effects create a new label but we want to retain the original one.\r\n this.label = this.underlyingStream.getTracks()[0].label;\r\n /**\r\n * Emit ended event when the underlying track ends.\r\n */\r\n this.underlyingTrack.onended = () => {\r\n this.emit(LocalTrackEvents.Ended, { trackState: this.trackState });\r\n };\r\n }\r\n /**\r\n * Get the kind of this track.\r\n * NOTE(brian): the need for this will likely go away once we get the rest of the track hierarchy\r\n * done, as we can use something like instanceof instead.\r\n *\r\n * @returns - The kind of this track, as a MediaStreamTrackKind.\r\n */\r\n get kind() {\r\n return this.underlyingTrack.kind;\r\n }\r\n /**\r\n * Get id of this track.\r\n *\r\n * @returns The id of this track.\r\n */\r\n get id() {\r\n return this.underlyingTrack.id;\r\n }\r\n /**\r\n * Get muted state of this track.\r\n *\r\n * @returns The muted state of this track.\r\n */\r\n get muted() {\r\n return !this.underlyingTrack.enabled;\r\n }\r\n /**\r\n * Get published state of this track.\r\n *\r\n * @returns The published state of this track.\r\n */\r\n get published() {\r\n return this.isPublished;\r\n }\r\n /**\r\n * Get the underlying MediaStream.\r\n *\r\n * @returns The underlying MediaStream.\r\n */\r\n get underlyingStream() {\r\n return this._underlyingStream;\r\n }\r\n /**\r\n * Set the underlying MediaStream.\r\n */\r\n set underlyingStream(stream) {\r\n this._underlyingStream = stream;\r\n }\r\n /**\r\n * Get current state of this track.\r\n *\r\n * @returns Current state of this track.\r\n */\r\n get trackState() {\r\n return { id: this.id, label: this.label, type: this.kind, muted: this.muted };\r\n }\r\n /**\r\n * Get the underlying MediaStreamTrack.\r\n *\r\n * @returns The underlying MediaStreamTrack.\r\n */\r\n get underlyingTrack() {\r\n return this._underlyingStream.getTracks()[0];\r\n }\r\n /**\r\n * Get the original MediaStreamTrack. We retain a reference to the stream obtained through\r\n * `getUserMedia()` to ensure it's updated alongside the `underlyingStream`. These two streams may\r\n * be different if effects have been added to the original stream.\r\n *\r\n * @returns The original MediaStreamTrack.\r\n */\r\n get originalTrack() {\r\n return this.originalStream.getTracks()[0];\r\n }\r\n /**\r\n * Set the mute state of this track.\r\n *\r\n * @param muted - True to mute, false to unmute.\r\n * @fires LocalTrackEvents.Muted\r\n */\r\n setMuted(muted) {\r\n // Only change state if it's different, where \"enabled\" means \"unmuted.\"\r\n if (this.underlyingTrack.enabled === muted) {\r\n this.originalTrack.enabled = !muted;\r\n this.underlyingTrack.enabled = !muted;\r\n this.emit(LocalTrackEvents.Muted, { trackState: this.trackState });\r\n logger.log(`Local track ${muted ? 'muted' : 'unmuted'}:`, { trackState: this.trackState });\r\n }\r\n }\r\n /**\r\n * Set the published state of this LocalTrack.\r\n *\r\n * @param isPublished - True if this track has been published, false otherwise.\r\n * @fires LocalTrackEvents.PublishedStateUpdate\r\n */\r\n setPublished(isPublished) {\r\n if (this.isPublished !== isPublished) {\r\n this.isPublished = isPublished;\r\n this.emit(LocalTrackEvents.PublishedStateUpdate, {\r\n trackState: this.trackState,\r\n isPublished,\r\n });\r\n logger.log(`Local track ${isPublished ? 'published' : 'unpublished'}:`, {\r\n trackState: this.trackState,\r\n });\r\n }\r\n }\r\n /**\r\n * Stop this track.\r\n *\r\n * @fires LocalTrackEvents.Ended\r\n */\r\n stop() {\r\n this.originalTrack.stop();\r\n this.underlyingTrack.stop();\r\n this.emit(LocalTrackEvents.Ended, { trackState: this.trackState });\r\n logger.log(`Local track stopped:`, { trackState: this.trackState });\r\n }\r\n /**\r\n * Adds an effect to a local track.\r\n *\r\n * @param name - The name of the effect.\r\n * @param effect - The effect to add.\r\n */\r\n addEffect(name, effect) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n // Load the effect\r\n this.loadingEffects.set(name, effect);\r\n yield effect.load(this.underlyingStream);\r\n // Check that the loaded effect is the latest one and dispose if not\r\n if (effect !== this.loadingEffects.get(name)) {\r\n yield effect.dispose();\r\n throw new Error(`Effect \"${name}\" not required after loading`);\r\n }\r\n // Use the loaded effect\r\n this.underlyingStream = effect.getUnderlyingStream();\r\n this.effects.set(name, effect);\r\n this.loadingEffects.delete(name);\r\n this.emit(LocalTrackEvents.UnderlyingTrackChange);\r\n });\r\n }\r\n /**\r\n * Get an effect by name.\r\n *\r\n * @param name - The effect name.\r\n * @returns A MicrophoneEffect.\r\n */\r\n getEffect(name) {\r\n const effect = this.effects.get(name);\r\n if (!effect) {\r\n logger.log(`No effect found with name '${name}'`);\r\n }\r\n return effect;\r\n }\r\n /**\r\n * Get a copy of the effects Map.\r\n *\r\n * @returns A copy of the effects map.\r\n */\r\n getEffects() {\r\n return new Map(this.effects);\r\n }\r\n /**\r\n * Cleanup the local microphone track.\r\n */\r\n disposeEffects() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n // Clear effects that are loading to indicate that they are not needed\r\n this.loadingEffects.clear();\r\n // Dispose of any effects currently in use\r\n if (this.effects.size > 0) {\r\n yield Promise.all(Array.from(this.effects.values(), (effect) => effect.dispose()));\r\n this.effects.clear();\r\n this.underlyingStream = this.originalStream;\r\n this.emit(LocalTrackEvents.UnderlyingTrackChange);\r\n }\r\n });\r\n }\r\n /**\r\n * Apply constraints to the track.\r\n *\r\n * @param constraints - The constraints to apply to the track.\r\n * @returns A promise which resolves when the constraints have been successfully applied.\r\n */\r\n applyConstraints(constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n logger.log(`Applying constraints to local track:`, constraints);\r\n const ret = this.underlyingTrack.applyConstraints(constraints).then(() => {\r\n this.emit(LocalTrackEvents.TrackConstraintsChange);\r\n });\r\n return ret;\r\n });\r\n }\r\n /**\r\n * Get the current constraints of the track.\r\n *\r\n * @returns The constraints of the track.\r\n */\r\n getConstraints() {\r\n return this.underlyingTrack.getConstraints();\r\n }\r\n /**\r\n * Get the current settings of the track.\r\n *\r\n * @returns The settings of the track.\r\n */\r\n getSettings() {\r\n return this.underlyingTrack.getSettings();\r\n }\r\n /**\r\n * Check the resolution and then return how many layers will be active.\r\n *\r\n * @returns The active layers count.\r\n */\r\n getNumActiveSimulcastLayers() {\r\n let activeSimulcastLayersNumber = 0;\r\n if (this.trackState.type === 'audio') {\r\n return activeSimulcastLayersNumber;\r\n }\r\n const videoHeight = this.underlyingTrack.getSettings().height;\r\n if (videoHeight <= 180) {\r\n activeSimulcastLayersNumber = 1;\r\n }\r\n else if (videoHeight <= 360) {\r\n activeSimulcastLayersNumber = 2;\r\n }\r\n else {\r\n activeSimulcastLayersNumber = 3;\r\n }\r\n return activeSimulcastLayersNumber;\r\n }\r\n}\r\nLocalTrack.Events = LocalTrackEvents;\n\n/**\r\n * Represents a local track for a camera source.\r\n */\r\nclass LocalCameraTrack extends LocalTrack {\r\n}\n\n/**\r\n * Represents a local track for a display source.\r\n */\r\nclass LocalDisplayTrack extends LocalTrack {\r\n /**\r\n * Create a LocalDisplayTrack from the given values.\r\n *\r\n * @param stream - The MediaStream for this track.\r\n * @param videoContentHint - An optional content hint, describing the content of the track.\r\n */\r\n constructor(stream, videoContentHint) {\r\n super(stream);\r\n this._videoContentHint = videoContentHint;\r\n this.underlyingTrack.contentHint = videoContentHint || '';\r\n }\r\n /**\r\n * Get the VideoContentHint for this track.\r\n *\r\n * @returns The VideoContentHint for this track.\r\n */\r\n get videoContentHint() {\r\n return this._videoContentHint;\r\n }\r\n}\n\n/**\r\n * Represents a local track for a microphone source.\r\n */\r\nclass LocalMicrophoneTrack extends LocalTrack {\r\n}\n\n/**\r\n * Represents a local track for system audio.\r\n */\r\nclass LocalSystemAudioTrack extends LocalTrack {\r\n}\n\n// Overall connection state (based on the ICE and DTLS connection states)\r\nvar ConnectionState;\r\n(function (ConnectionState) {\r\n ConnectionState[\"New\"] = \"New\";\r\n ConnectionState[\"Closed\"] = \"Closed\";\r\n ConnectionState[\"Connected\"] = \"Connected\";\r\n ConnectionState[\"Connecting\"] = \"Connecting\";\r\n ConnectionState[\"Disconnected\"] = \"Disconnected\";\r\n ConnectionState[\"Failed\"] = \"Failed\";\r\n})(ConnectionState || (ConnectionState = {}));\r\nvar ConnectionStateEvents;\r\n(function (ConnectionStateEvents) {\r\n ConnectionStateEvents[\"ConnectionStateChanged\"] = \"ConnectionStateChanged\";\r\n})(ConnectionStateEvents || (ConnectionStateEvents = {}));\r\n/**\r\n * Listens on the connection's ICE and DTLS state changes and emits a single\r\n * event that summarizes all the internal states into a single overall connection state.\r\n */\r\nclass ConnectionStateHandler extends EventEmitter {\r\n /**\r\n * Creates an instance of ConnectionStateHandler.\r\n *\r\n * @param getCurrentStatesCallback - Callback for getting the connection state information\r\n * from the peer connection.\r\n */\r\n constructor(getCurrentStatesCallback) {\r\n super();\r\n this.getCurrentStatesCallback = getCurrentStatesCallback;\r\n this.mediaConnectionState = this.evaluateMediaConnectionState();\r\n }\r\n /**\r\n * Handler for connection state change.\r\n */\r\n onConnectionStateChange() {\r\n this.handleAnyConnectionStateChange();\r\n }\r\n /**\r\n * Handler for ice connection state change.\r\n */\r\n onIceConnectionStateChange() {\r\n this.handleAnyConnectionStateChange();\r\n }\r\n /**\r\n * Method to be called whenever ice connection or dtls connection state is changed.\r\n */\r\n handleAnyConnectionStateChange() {\r\n const newConnectionState = this.evaluateMediaConnectionState();\r\n if (newConnectionState !== this.mediaConnectionState) {\r\n this.mediaConnectionState = newConnectionState;\r\n this.emit(ConnectionStateEvents.ConnectionStateChanged, this.mediaConnectionState);\r\n }\r\n }\r\n /**\r\n * Evaluates the overall connection state based on peer connection's\r\n * connectionState and iceConnectionState.\r\n *\r\n * @returns Current overall connection state.\r\n */\r\n evaluateMediaConnectionState() {\r\n const { connectionState, iceState } = this.getCurrentStatesCallback();\r\n const connectionStates = [connectionState, iceState];\r\n let mediaConnectionState;\r\n if (connectionStates.every((value) => value === 'new')) {\r\n mediaConnectionState = ConnectionState.New;\r\n }\r\n else if (connectionStates.some((value) => value === 'closed')) {\r\n mediaConnectionState = ConnectionState.Closed;\r\n }\r\n else if (connectionStates.some((value) => value === 'failed')) {\r\n mediaConnectionState = ConnectionState.Failed;\r\n }\r\n else if (connectionStates.some((value) => value === 'disconnected')) {\r\n mediaConnectionState = ConnectionState.Disconnected;\r\n }\r\n else if (connectionStates.every((value) => value === 'connected' || value === 'completed')) {\r\n mediaConnectionState = ConnectionState.Connected;\r\n }\r\n else {\r\n mediaConnectionState = ConnectionState.Connecting;\r\n }\r\n logger.log(`iceConnectionState=${iceState} connectionState=${connectionState} => ${mediaConnectionState}`);\r\n return mediaConnectionState;\r\n }\r\n /**\r\n * Gets current connection state.\r\n *\r\n * @returns Current connection state.\r\n */\r\n getConnectionState() {\r\n return this.mediaConnectionState;\r\n }\r\n}\r\nConnectionStateHandler.Events = ConnectionStateEvents;\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nfunction log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nconst logging = log;\n\nfunction shimGetUserMedia$2(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimGetDisplayMedia$1(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nfunction shimOnTrack$1(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nfunction shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nfunction shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nfunction shimPeerConnection$1(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n\nvar chromeShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimMediaStream: shimMediaStream,\n shimOnTrack: shimOnTrack$1,\n shimGetSendersWithDtmf: shimGetSendersWithDtmf,\n shimGetStats: shimGetStats,\n shimSenderReceiverGetStats: shimSenderReceiverGetStats,\n shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,\n shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,\n shimPeerConnection: shimPeerConnection$1,\n fixNegotiationNeeded: fixNegotiationNeeded,\n shimGetUserMedia: shimGetUserMedia$2,\n shimGetDisplayMedia: shimGetDisplayMedia$1\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetUserMedia$1(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nfunction shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nfunction shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nfunction shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nfunction shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\nvar firefoxShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimOnTrack: shimOnTrack,\n shimPeerConnection: shimPeerConnection,\n shimSenderGetStats: shimSenderGetStats,\n shimReceiverGetStats: shimReceiverGetStats,\n shimRemoveStream: shimRemoveStream,\n shimRTCDataChannel: shimRTCDataChannel,\n shimAddTransceiver: shimAddTransceiver,\n shimGetParameters: shimGetParameters,\n shimCreateOffer: shimCreateOffer,\n shimCreateAnswer: shimCreateAnswer,\n shimGetUserMedia: shimGetUserMedia$1,\n shimGetDisplayMedia: shimGetDisplayMedia\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nfunction shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nfunction shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nfunction shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nfunction shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\nvar safariShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimLocalStreamsAPI: shimLocalStreamsAPI,\n shimRemoteStreamsAPI: shimRemoteStreamsAPI,\n shimCallbacksAPI: shimCallbacksAPI,\n shimGetUserMedia: shimGetUserMedia,\n shimConstraints: shimConstraints,\n shimRTCIceServerUrls: shimRTCIceServerUrls,\n shimTrackEventTransceiver: shimTrackEventTransceiver,\n shimCreateOfferLegacy: shimCreateOfferLegacy,\n shimAudioContext: shimAudioContext\n});\n\nvar sdp$1 = {exports: {}};\n\n/* eslint-env node */\n\n(function (module) {\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substr(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\n{\n module.exports = SDPUtils;\n}\n}(sdp$1));\n\nvar SDPUtils = sdp$1.exports;\n\nvar sdp = /*#__PURE__*/_mergeNamespaces({\n __proto__: null,\n 'default': SDPUtils\n}, [sdp$1.exports]);\n\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n\nvar commonShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimRTCIceCandidate: shimRTCIceCandidate,\n shimMaxMessageSize: shimMaxMessageSize,\n shimSendThrowTypeError: shimSendThrowTypeError,\n shimConnectionState: shimConnectionState,\n removeExtmapAllowMixed: removeExtmapAllowMixed,\n shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty,\n shimParameterlessSetLocalDescription: shimParameterlessSetLocalDescription\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = log;\n const browserDetails = detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: extractVersion,\n disableLog: disableLog,\n disableWarnings: disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !shimPeerConnection$1 ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n\n shimGetUserMedia$2(window, browserDetails);\n shimMediaStream(window);\n shimPeerConnection$1(window, browserDetails);\n shimOnTrack$1(window);\n shimAddTrackRemoveTrack(window, browserDetails);\n shimGetSendersWithDtmf(window);\n shimGetStats(window);\n shimSenderReceiverGetStats(window);\n fixNegotiationNeeded(window, browserDetails);\n\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n\n shimGetUserMedia$1(window, browserDetails);\n shimPeerConnection(window, browserDetails);\n shimOnTrack(window);\n shimRemoveStream(window);\n shimSenderGetStats(window);\n shimReceiverGetStats(window);\n shimRTCDataChannel(window);\n shimAddTransceiver(window);\n shimGetParameters(window);\n shimCreateOffer(window);\n shimCreateAnswer(window);\n\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n\n shimRTCIceServerUrls(window);\n shimCreateOfferLegacy(window);\n shimCallbacksAPI(window);\n shimLocalStreamsAPI(window);\n shimRemoteStreamsAPI(window);\n shimTrackEventTransceiver(window);\n shimGetUserMedia(window);\n shimAudioContext(window);\n\n shimRTCIceCandidate(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nadapterFactory({window: typeof window === 'undefined' ? undefined : window});\n\n/**\r\n * Creates an RTCPeerConnection.\r\n *\r\n * @param configuration - Config to the RTCPeerConnection constructor.\r\n * @returns An RTCPeerConnection instance.\r\n */\r\nfunction createRTCPeerConnection(configuration) {\r\n return new RTCPeerConnection(configuration);\r\n}\n\n/**\r\n * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.\r\n */\r\nvar MediaStreamTrackKind;\r\n(function (MediaStreamTrackKind) {\r\n MediaStreamTrackKind[\"Audio\"] = \"audio\";\r\n MediaStreamTrackKind[\"Video\"] = \"video\";\r\n})(MediaStreamTrackKind || (MediaStreamTrackKind = {}));\r\nvar PeerConnectionEvents;\r\n(function (PeerConnectionEvents) {\r\n PeerConnectionEvents[\"IceGatheringStateChange\"] = \"icegatheringstatechange\";\r\n PeerConnectionEvents[\"ConnectionStateChange\"] = \"connectionstatechange\";\r\n})(PeerConnectionEvents || (PeerConnectionEvents = {}));\r\n/**\r\n * Manages a single RTCPeerConnection with the server.\r\n */\r\nclass PeerConnection extends EventEmitter {\r\n /**\r\n * Creates an instance of the RTCPeerConnection.\r\n *\r\n * @param configuration - Config to the RTCPeerConnection constructor.\r\n */\r\n constructor(configuration) {\r\n super();\r\n logger.log('PeerConnection init');\r\n this.pc = createRTCPeerConnection(configuration);\r\n this.connectionStateHandler = new ConnectionStateHandler(() => {\r\n return {\r\n connectionState: this.pc.connectionState,\r\n iceState: this.pc.iceConnectionState,\r\n };\r\n });\r\n this.connectionStateHandler.on(ConnectionStateHandler.Events.ConnectionStateChanged, (state) => {\r\n this.emit(PeerConnection.Events.ConnectionStateChange, state);\r\n });\r\n // Forward the connection state related events to connection state handler\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n this.pc.oniceconnectionstatechange = () => this.connectionStateHandler.onIceConnectionStateChange();\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n this.pc.onconnectionstatechange = () => this.connectionStateHandler.onConnectionStateChange();\r\n // Subscribe to underlying PeerConnection events and emit them via the EventEmitter\r\n /* eslint-disable jsdoc/require-jsdoc */\r\n this.pc.onicegatheringstatechange = (ev) => {\r\n this.emit(PeerConnection.Events.IceGatheringStateChange, ev);\r\n };\r\n }\r\n /**\r\n * Get the underlying RTCPeerConnection.\r\n *\r\n * @returns The underlying RTCPeerConnection.\r\n */\r\n getUnderlyingRTCPeerConnection() {\r\n return this.pc;\r\n }\r\n /**\r\n * Gets the overall connection state of the underlying RTCPeerConnection.\r\n *\r\n * @returns The underlying connection's overall state.\r\n */\r\n getConnectionState() {\r\n return this.connectionStateHandler.getConnectionState();\r\n }\r\n /**\r\n * Adds a new media track to the set of tracks which will be transmitted to the other peer.\r\n *\r\n * @param track - A MediaStreamTrack object representing the media track to add to the peer connection.\r\n * @param streams - (Optional) One or more local MediaStream objects to which the track should be\r\n * added.\r\n * @returns The RTCRtpSender object which will be used to transmit the media data, or null if\r\n * there is no underlying track when a track is added.\r\n */\r\n addTrack(track, ...streams) {\r\n return this.pc.addTrack(track, ...streams);\r\n }\r\n /**\r\n * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the\r\n * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender\r\n * and an RTCRtpReceiver associated with it.\r\n *\r\n * @param trackOrKind - A MediaStreamTrack to associate with the transceiver, or a string which is used\r\n * as the kind of the receiver's track, and by extension the RTCRtpReceiver itself.\r\n * @param init - Options that you may wish to specify when creating the new transceiver.\r\n * @returns - The created RTCRtpTransceiver object.\r\n */\r\n addTransceiver(trackOrKind, init) {\r\n return this.pc.addTransceiver(trackOrKind, init);\r\n }\r\n /**\r\n * Tell the local end of the connection to stop sending media from the specified track, without\r\n * actually removing the corresponding RTCRtpSender from the list of senders as reported by\r\n * RTCPeerConnection.getSenders(). If the track is already stopped, or is not in the connection's\r\n * senders list, the method has no effect.\r\n *\r\n * If the connection has already been negotiated (signalingState is set to 'stable'), it is marked\r\n * as needing to be negotiated again; the remote peer won't experience the change until this\r\n * negotiation occurs. A negotiatedneeded event is sent to the RTCPeerConnection to let the local\r\n * end know this negotiation must occur.\r\n *\r\n * @param sender - An RTCRtpSender specifying the sender to remove from the connection.\r\n */\r\n removeTrack(sender) {\r\n this.pc.removeTrack(sender);\r\n }\r\n /**\r\n * Creates a new data channel linked with the remote peer.\r\n *\r\n * @param label - A human-readable name for the channel. May not be longer than 65,535 bytes.\r\n * @param options - An object providing configuration options for the data channel.\r\n * @returns An RTCDataChannel object.\r\n */\r\n createDataChannel(label, options) {\r\n return this.pc.createDataChannel(label, options);\r\n }\r\n /**\r\n * Creates an SDP answer to an offer received from a remote peer during the offer/answer\r\n * negotiation of a WebRTC connection.\r\n *\r\n * @param options - (Optional) An object which contains options which customize the answer; this\r\n * is based on the RTCAnswerOptions dictionary.\r\n * @returns A Promise whose fulfillment handler is called with an object conforming to the\r\n * RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the\r\n * other peer.\r\n */\r\n createAnswer(options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.createAnswer(options);\r\n });\r\n }\r\n /**\r\n * Initiates the creation of an SDP offer for the purpose of starting a new WebRTC connection to a\r\n * remote peer.\r\n *\r\n * @param options - (Optional) An RTCOfferOptions dictionary providing options requested for the\r\n * offer.\r\n * @returns A Promise whose fulfillment handler will receive an object conforming to the\r\n * RTCSessionDescriptionInit dictionary which contains the SDP describing the generated offer.\r\n * That received offer should be delivered through the signaling server to a remote peer.\r\n */\r\n createOffer(options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.createOffer(options);\r\n });\r\n }\r\n /**\r\n * Changes the local description associated with the connection.\r\n *\r\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\r\n * configuration to be applied to the local end of the connection.\r\n * @returns A Promise which is fulfilled once the value of RTCPeerConnection.localDescription is\r\n * successfully changed or rejected if the change cannot be applied.\r\n */\r\n setLocalDescription(description) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.setLocalDescription(description);\r\n });\r\n }\r\n /**\r\n * Sets the specified session description as the remote peer's current offer or answer.\r\n *\r\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\r\n * remote peer's current offer or answer.\r\n * @returns A Promise which is fulfilled once the value of the connection's remoteDescription is\r\n * successfully changed or rejected if the change cannot be applied (for example, if the\r\n * specified description is incompatible with one or both of the peers on the connection).\r\n */\r\n setRemoteDescription(description) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.setRemoteDescription(description);\r\n });\r\n }\r\n /**\r\n * Closes the current peer connection.\r\n */\r\n close() {\r\n this.pc.close();\r\n }\r\n /**\r\n * Get the local description from this PeerConnection.\r\n *\r\n * @returns An RTCSessionDescription representing the local description, or null if none has been set.\r\n */\r\n getLocalDescription() {\r\n return this.pc.localDescription;\r\n }\r\n /**\r\n * Get the remote description from this PeerConnection.\r\n *\r\n * @returns An RTCSessionDescription representing the remote description, or null if none has been set.\r\n */\r\n getRemoteDescription() {\r\n return this.pc.remoteDescription;\r\n }\r\n /**\r\n * Returns an array of RTCRtpSender objects, each of which represents the RTP sender responsible\r\n * for transmitting one track's data. A sender object provides methods and properties for\r\n * examining and controlling the encoding and transmission of the track's data.\r\n *\r\n * @returns An array of RTCRtpSender objects, one for each track on the connection. The array is\r\n * empty if there are no RTP senders on the connection.\r\n */\r\n getSenders() {\r\n return this.pc.getSenders();\r\n }\r\n /**\r\n * Get the list of RTCRtpTransceiver objects being used to send and receive data on the\r\n * connection.\r\n *\r\n * @returns - An array of the RTCRtpTransceiver objects representing the transceivers handling\r\n * sending and receiving all media on the PeerConnection. The list is in the order in which the\r\n * transceivers were added to the connection.\r\n */\r\n getTransceivers() {\r\n return this.pc.getTransceivers();\r\n }\r\n /**\r\n * Get statistics about either the overall connection or about the specified MediaStreamTrack.\r\n *\r\n * @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,\r\n * statistics will be gathered for the entire underlying RTCPeerConnection.\r\n * @returns - A Promise which resolves with an RTCStatsReport object providing connection\r\n * statistics.\r\n */\r\n getStats(selector) {\r\n return this.pc.getStats(selector);\r\n }\r\n /**\r\n * Returns a string that describes the connections' ICE gathering state.\r\n *\r\n * @returns - The ICE gathering state.\r\n */\r\n get iceGatheringState() {\r\n return this.pc.iceGatheringState;\r\n }\r\n /**\r\n * Returns the type of a connection that has been established.\r\n *\r\n * @returns The connection type which would be `ConnectionType`.\r\n */\r\n getCurrentConnectionType() {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n // make sure this method only can be called when the ice connection is established;\r\n const isIceConnected = this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';\r\n if (!isIceConnected) {\r\n throw new Error('Ice connection is not established');\r\n }\r\n const succeededLocalCandidateIds = new Set();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const localCandidateStatsReports = [];\r\n (yield this.pc.getStats()).forEach((report) => {\r\n var _a;\r\n // collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.\r\n if (report.type === 'candidate-pair' && ((_a = report.state) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'succeeded') {\r\n succeededLocalCandidateIds.add(report.localCandidateId);\r\n }\r\n // collect all `local-candidate` stats.\r\n if (report.type === 'local-candidate') {\r\n localCandidateStatsReports.push(report);\r\n }\r\n });\r\n // find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.\r\n const localCandidate = localCandidateStatsReports.find((report) => succeededLocalCandidateIds.has(report.id));\r\n if (!localCandidate) {\r\n return 'unknown';\r\n }\r\n if (localCandidate.relayProtocol) {\r\n return `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\r\n }\r\n return (_a = localCandidate.protocol) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n });\r\n }\r\n}\r\nPeerConnection.Events = PeerConnectionEvents;\n\n/**\r\n * Wait until the given peer connection has finished gathering ICE candidates and, when it has,\r\n * return the local description with the candidates.\r\n *\r\n * @param peerConnection - The PeerConnection to use.\r\n * @returns A Promise that resolves with the local description with the ICE candidates in it.\r\n */\r\nfunction getLocalDescriptionWithIceCandidates(peerConnection) {\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * A helper method to retrieve the local description and resolve, if one is found, or reject\r\n * with an error if it's not.\r\n */\r\n const getLocalDescAndResolve = () => {\r\n const localDesc = peerConnection.getLocalDescription();\r\n if (localDesc) {\r\n resolve(localDesc);\r\n }\r\n else {\r\n reject(new Error('Local description was null'));\r\n }\r\n };\r\n peerConnection.on(PeerConnection.Events.IceGatheringStateChange, (e) => {\r\n if (e.target.iceGatheringState === 'complete') {\r\n getLocalDescAndResolve();\r\n }\r\n // TODO(brian): throw an error if we see an error iceGatheringState\r\n });\r\n // It's possible ICE gathering is already done\r\n if (peerConnection.iceGatheringState === 'complete') {\r\n getLocalDescAndResolve();\r\n }\r\n });\r\n}\n\nexport { ConnectionState, ErrorTypes, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalSystemAudioTrack, LocalTrack, LocalTrackEvents, Logger, MediaStreamTrackKind, PeerConnection, WcmeError, createCameraTrack, createDisplayTrack, createDisplayTrackWithAudio, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getLocalDescriptionWithIceCandidates, getVideoInputDevices, logger, media, setOnDeviceChangeHandler };\n","import { EventEmitter } from 'events';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar logger = {exports: {}};\n\n/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\n\n(function (module) {\n(function (global) {\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(commonjsGlobal));\n}(logger));\n\nvar Logger = logger.exports;\n\nLogger.useDefaults({\r\n defaultLevel: Logger.DEBUG,\r\n formatter: (messages, context) => {\r\n messages.unshift(`[${context.name}] `);\r\n },\r\n});\n\nclass ActiveSpeakerInfo {\r\n constructor(priority, crossPriorityDuplication, crossPolicyDuplication, preferLiveVideo, namedMediaGroups) {\r\n this.priority = priority;\r\n this.crossPriorityDuplication = crossPriorityDuplication;\r\n this.crossPolicyDuplication = crossPolicyDuplication;\r\n this.preferLiveVideo = preferLiveVideo;\r\n this.namedMediaGroups = namedMediaGroups;\r\n }\r\n toString() {\r\n return `ActiveSpeakerInfo(priority=${this.priority}, crossPriorityDuplication=${this.crossPriorityDuplication}, crossPolicyDuplication=${this.crossPolicyDuplication}, preferLiveVideo=${this.preferLiveVideo}), namedMediaGroups=${this.namedMediaGroups}`;\r\n }\r\n}\r\nfunction isValidActiveSpeakerInfo(msg) {\r\n const maybeActiveSpeakerInfo = msg;\r\n return Boolean('priority' in maybeActiveSpeakerInfo &&\r\n 'crossPriorityDuplication' in maybeActiveSpeakerInfo &&\r\n 'crossPolicyDuplication' in maybeActiveSpeakerInfo &&\r\n 'preferLiveVideo' in maybeActiveSpeakerInfo);\r\n}\r\nfunction areNamedMediaGroupArraysEqual(left, right) {\r\n if (left === undefined || right === undefined) {\r\n return left === right;\r\n }\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (left[i] !== right[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction areActiveSpeakerInfosEqual(left, right) {\r\n return (left.priority === right.priority &&\r\n left.crossPriorityDuplication === right.crossPriorityDuplication &&\r\n left.crossPolicyDuplication === right.crossPolicyDuplication &&\r\n left.preferLiveVideo === right.preferLiveVideo &&\r\n areNamedMediaGroupArraysEqual(left.namedMediaGroups, right.namedMediaGroups));\r\n}\n\nclass ActiveSpeakerNotificationMsg {\r\n constructor(seqNum, csis) {\r\n this.seqNum = seqNum;\r\n this.csis = csis;\r\n }\r\n toString() {\r\n return `ActiveSpeakerNotificationMsg(seqNum=${this.seqNum}, csis=[${this.csis}])`;\r\n }\r\n}\r\nfunction isValidActiveSpeakerNotificationMsg(msg) {\r\n const maybeActiveSpeakerNotificationMsg = msg;\r\n return Boolean(maybeActiveSpeakerNotificationMsg.seqNum && maybeActiveSpeakerNotificationMsg.csis);\r\n}\n\nvar HomerMsgType;\r\n(function (HomerMsgType) {\r\n HomerMsgType[\"Multistream\"] = \"multistream\";\r\n})(HomerMsgType || (HomerMsgType = {}));\r\nclass HomerMsg {\r\n constructor(msgType, payload) {\r\n this.msgType = msgType;\r\n this.payload = payload;\r\n }\r\n static fromJson(data) {\r\n if (!data.msgType || !data.payload) {\r\n return null;\r\n }\r\n return new HomerMsg(data.msgType, data.payload);\r\n }\r\n}\n\nvar JmpMsgType;\r\n(function (JmpMsgType) {\r\n JmpMsgType[\"MediaRequest\"] = \"mediaRequest\";\r\n JmpMsgType[\"MediaRequestAck\"] = \"mediaRequestAck\";\r\n JmpMsgType[\"MediaRequestStatus\"] = \"mediaRequestStatus\";\r\n JmpMsgType[\"MediaRequestStatusAck\"] = \"mediaRequestStatusAck\";\r\n JmpMsgType[\"SourceAdvertisement\"] = \"sourceAdvertisement\";\r\n JmpMsgType[\"SourceAdvertisementAck\"] = \"sourceAdvertisementAck\";\r\n JmpMsgType[\"ActiveSpeakerNotification\"] = \"activeSpeakerNotification\";\r\n})(JmpMsgType || (JmpMsgType = {}));\r\nclass JmpMsg {\r\n constructor(mediaFamily, mediaContent, payload) {\r\n this.mediaFamily = mediaFamily;\r\n this.mediaContent = mediaContent;\r\n this.payload = payload;\r\n }\r\n toString() {\r\n return `JmpMsg(mediaFamily=${this.mediaFamily}, mediaContent=${this.mediaContent}, payload=${this.payload})`;\r\n }\r\n}\r\nfunction isValidJmpMsgPayload(msg) {\r\n const maybeJmpMsgPayload = msg;\r\n return Boolean(maybeJmpMsgPayload.msgType && maybeJmpMsgPayload.payload);\r\n}\r\nfunction isValidJmpMsg(msg) {\r\n const maybeJmpMsg = msg;\r\n return Boolean(maybeJmpMsg.mediaContent &&\r\n maybeJmpMsg.mediaFamily &&\r\n maybeJmpMsg.payload &&\r\n isValidJmpMsgPayload(maybeJmpMsg.payload));\r\n}\n\nclass MediaRequestMsg {\r\n constructor(seqNum, requests) {\r\n this.seqNum = seqNum;\r\n this.requests = requests;\r\n }\r\n toString() {\r\n return `JmpMediaMsg(seqNum=${this.seqNum}, requests=[${this.requests}])`;\r\n }\r\n}\r\nfunction isValidMediaRequestMsg(msg) {\r\n const maybeMediaRequestMsg = msg;\r\n return Boolean(maybeMediaRequestMsg.seqNum && maybeMediaRequestMsg.requests);\r\n}\n\nclass MediaRequestAckMsg {\r\n constructor(mediaRequestSeqNum) {\r\n this.mediaRequestSeqNum = mediaRequestSeqNum;\r\n }\r\n toString() {\r\n return `MediaRequestAckMsg(seqNum=${this.mediaRequestSeqNum})`;\r\n }\r\n}\r\nfunction isValidMediaRequestAckMsg(msg) {\r\n const maybeMediaRequestAckMsg = msg;\r\n return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);\r\n}\n\nfunction isValidStreamId(obj) {\r\n const maybeStreamId = obj;\r\n if (maybeStreamId.mid && maybeStreamId.ssrc) {\r\n return false;\r\n }\r\n return Boolean(maybeStreamId.mid) || Boolean(maybeStreamId.ssrc);\r\n}\r\nfunction compareStreamIds(id1, id2) {\r\n const keys1 = Object.keys(id1);\r\n const keys2 = Object.keys(id2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n return keys1.every((key) => id1[key] === id2[key]);\r\n}\n\nfunction isValidStreamInfo(obj) {\r\n const maybeStreamInfo = obj;\r\n return Boolean(maybeStreamInfo.id &&\r\n isValidStreamId(maybeStreamInfo.id) &&\r\n ['no source', 'invalid source', 'live', 'avatar', 'bandwidth disabled'].includes(maybeStreamInfo.state));\r\n}\r\nclass MediaRequestStatusMsg {\r\n constructor(seqNum, streamStates) {\r\n this.seqNum = seqNum;\r\n this.streamStates = streamStates;\r\n }\r\n}\r\nfunction isValidMediaRequestStatusMsg(msg) {\r\n const maybeMediaRequestStatusMsg = msg;\r\n return (Boolean(maybeMediaRequestStatusMsg.seqNum) &&\r\n maybeMediaRequestStatusMsg.streamStates &&\r\n maybeMediaRequestStatusMsg.streamStates.every((streamInfo) => isValidStreamInfo(streamInfo)));\r\n}\r\nfunction compareStreamStateArrays(streamStates1, streamStates2) {\r\n var _a, _b;\r\n if (streamStates1.length !== streamStates2.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < streamStates1.length; i += 1) {\r\n if (!compareStreamIds(streamStates1[i].id, streamStates2[i].id)) {\r\n return false;\r\n }\r\n if (streamStates1[i].state !== streamStates2[i].state) {\r\n return false;\r\n }\r\n if (((_a = streamStates1[i]) === null || _a === void 0 ? void 0 : _a.csi) !== ((_b = streamStates2[i]) === null || _b === void 0 ? void 0 : _b.csi)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\n\nclass MediaRequestStatusAckMsg {\r\n constructor(mediaRequestStatusSeqNum) {\r\n this.mediaRequestStatusSeqNum = mediaRequestStatusSeqNum;\r\n }\r\n toString() {\r\n return `MediaRequestStatusAckMsg(seqNum=${this.mediaRequestStatusSeqNum})`;\r\n }\r\n}\r\nfunction isValidMediaRequestStatusAckMsg(msg) {\r\n const maybeMediaRequestStatusAckMsg = msg;\r\n return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);\r\n}\n\nclass H264Codec {\r\n constructor(maxFs, maxFps, maxMbps, maxWidth, maxHeight) {\r\n this.maxFs = maxFs;\r\n this.maxFps = maxFps;\r\n this.maxMbps = maxMbps;\r\n this.maxWidth = maxWidth;\r\n this.maxHeight = maxHeight;\r\n }\r\n}\r\nfunction isValidH264Codec(msg) {\r\n const maybeH264Codec = msg;\r\n return Boolean(maybeH264Codec.maxFs && maybeH264Codec.maxFps && maybeH264Codec.maxMbps);\r\n}\r\nfunction areH264CodecsEqual(left, right) {\r\n if (left === undefined || right === undefined) {\r\n return left === right;\r\n }\r\n return (left.maxFs === right.maxFs &&\r\n left.maxFps === right.maxFps &&\r\n left.maxMbps === right.maxMbps &&\r\n left.maxWidth === right.maxWidth &&\r\n left.maxHeight === right.maxHeight);\r\n}\n\nclass CodecInfo {\r\n constructor(payloadType, h264) {\r\n this.payloadType = payloadType;\r\n this.h264 = h264;\r\n }\r\n}\r\nfunction isValidCodecRequestInfo(msg) {\r\n const maybeCodecRequestInfo = msg;\r\n return Boolean(maybeCodecRequestInfo.payloadType && maybeCodecRequestInfo.h264);\r\n}\r\nfunction areCodecInfosEqual(left, right) {\r\n return left.payloadType === right.payloadType && areH264CodecsEqual(left.h264, right.h264);\r\n}\n\nclass ReceiverSelectedInfo {\r\n constructor(csi) {\r\n this.csi = csi;\r\n }\r\n toString() {\r\n return `ReceiverSelectedInfo(csi=${this.csi})`;\r\n }\r\n}\r\nfunction isValidReceiverSelectedInfo(msg) {\r\n const maybeReceiverSelectedInfo = msg;\r\n return Boolean(maybeReceiverSelectedInfo.csi);\r\n}\r\nfunction areReceiverSelectedInfosEqual(left, right) {\r\n return left.csi === right.csi;\r\n}\n\nvar MediaFamily;\r\n(function (MediaFamily) {\r\n MediaFamily[\"Audio\"] = \"AUDIO\";\r\n MediaFamily[\"Video\"] = \"VIDEO\";\r\n})(MediaFamily || (MediaFamily = {}));\r\nvar MediaContent;\r\n(function (MediaContent) {\r\n MediaContent[\"Main\"] = \"MAIN\";\r\n MediaContent[\"Slides\"] = \"SLIDES\";\r\n})(MediaContent || (MediaContent = {}));\r\nvar Policy;\r\n(function (Policy) {\r\n Policy[\"ActiveSpeaker\"] = \"active-speaker\";\r\n Policy[\"ReceiverSelected\"] = \"receiver-selected\";\r\n})(Policy || (Policy = {}));\r\nvar MediaType;\r\n(function (MediaType) {\r\n MediaType[\"VideoMain\"] = \"VIDEO-MAIN\";\r\n MediaType[\"VideoSlides\"] = \"VIDEO-SLIDES\";\r\n MediaType[\"AudioMain\"] = \"AUDIO-MAIN\";\r\n MediaType[\"AudioSlides\"] = \"AUDIO-SLIDES\";\r\n})(MediaType || (MediaType = {}));\n\nfunction randomInteger(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n}\r\nfunction generateSceneId() {\r\n return randomInteger(0, 0x7fffff);\r\n}\r\nfunction generateCsi(mediaFamily, sceneId) {\r\n let av;\r\n if (mediaFamily === MediaFamily.Audio) {\r\n av = 0;\r\n }\r\n else {\r\n av = 1;\r\n }\r\n return (sceneId << 8) | av;\r\n}\r\nfunction getMediaType(mediaFamily, mediaContent) {\r\n if (mediaFamily === MediaFamily.Video && mediaContent === MediaContent.Main) {\r\n return MediaType.VideoMain;\r\n }\r\n if (mediaFamily === MediaFamily.Video && mediaContent === MediaContent.Slides) {\r\n return MediaType.VideoSlides;\r\n }\r\n if (mediaFamily === MediaFamily.Audio && mediaContent === MediaContent.Main) {\r\n return MediaType.AudioMain;\r\n }\r\n return MediaType.AudioSlides;\r\n}\r\nfunction getMediaFamily(mediaType) {\r\n return [MediaType.VideoMain, MediaType.VideoSlides].includes(mediaType)\r\n ? MediaFamily.Video\r\n : MediaFamily.Audio;\r\n}\r\nfunction getMediaContent(mediaType) {\r\n return [MediaType.VideoMain, MediaType.AudioMain].includes(mediaType)\r\n ? MediaContent.Main\r\n : MediaContent.Slides;\r\n}\r\nconst truthyOrZero = (value) => value === 0 || value;\n\nclass SourceAdvertisementMsg {\r\n constructor(seqNum, numTotalSources, numLiveSources, namedMediaGroups, videoContentHint) {\r\n this.seqNum = seqNum;\r\n this.numTotalSources = numTotalSources;\r\n this.numLiveSources = numLiveSources;\r\n this.namedMediaGroups = namedMediaGroups;\r\n this.videoContentHint = videoContentHint;\r\n }\r\n toString() {\r\n return `SourceAdvertisement(seqNum=${this.seqNum}, numTotalSources=${this.numTotalSources}, numLiveSources=${this.numLiveSources}, namedMediaGroups=${this.namedMediaGroups}, videoContentHint=${this.videoContentHint}`;\r\n }\r\n}\r\nfunction isValidSourceAdvertisementMsg(msg) {\r\n const maybeSourceAdvertisementMsg = msg;\r\n return Boolean(maybeSourceAdvertisementMsg.seqNum &&\r\n truthyOrZero(maybeSourceAdvertisementMsg.numTotalSources) &&\r\n truthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));\r\n}\n\nclass SourceAdvertisementAckMsg {\r\n constructor(sourceAdvertisementSeqNum) {\r\n this.sourceAdvertisementSeqNum = sourceAdvertisementSeqNum;\r\n }\r\n toString() {\r\n return `SourceAdvertisementAckMsg(sourceAdvertisementSeqNum=${this.sourceAdvertisementSeqNum})`;\r\n }\r\n}\r\nfunction isValidSourceAdvertisementAckMsg(msg) {\r\n const maybeSourceAdvertisementAckMsg = msg;\r\n return Boolean(maybeSourceAdvertisementAckMsg.sourceAdvertisementSeqNum);\r\n}\n\nclass StreamRequest {\r\n constructor(policy, policySpecificInfo, ids, maxPayloadBitsPerSecond, codecInfos = []) {\r\n this.policy = policy;\r\n this.policySpecificInfo = policySpecificInfo;\r\n this.ids = ids;\r\n this.maxPayloadBitsPerSecond = maxPayloadBitsPerSecond;\r\n this.codecInfos = codecInfos;\r\n }\r\n toString() {\r\n return `Request(policy=${this.policy}, info=${this.policySpecificInfo}, ids=[${this.ids}], maxPayloadBitsPerSecond=[${this.maxPayloadBitsPerSecond}], codecInfos=[${this.codecInfos}])`;\r\n }\r\n}\r\nfunction isValidStreamRequest(msg) {\r\n const maybeStreamRequest = msg;\r\n return Boolean(maybeStreamRequest.policy &&\r\n maybeStreamRequest.policySpecificInfo &&\r\n maybeStreamRequest.ids &&\r\n maybeStreamRequest.maxPayloadBitsPerSecond &&\r\n maybeStreamRequest.codecInfos);\r\n}\r\nfunction arePolicySpecificInfosEqual(left, right) {\r\n if (isValidActiveSpeakerInfo(left)) {\r\n if (!isValidActiveSpeakerInfo(right)) {\r\n return false;\r\n }\r\n return areActiveSpeakerInfosEqual(left, right);\r\n }\r\n if (isValidReceiverSelectedInfo(left)) {\r\n if (!isValidReceiverSelectedInfo(right)) {\r\n return false;\r\n }\r\n return areReceiverSelectedInfosEqual(left, right);\r\n }\r\n throw new Error('Invalid PolicySpecificInfo');\r\n}\r\nfunction areCodecInfoArraysEqual(left, right) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (!areCodecInfosEqual(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction areStreamIdArraysEqual(left, right) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (!compareStreamIds(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction areStreamRequestsEqual(left, right) {\r\n if (left.policy !== right.policy) {\r\n return false;\r\n }\r\n if (!arePolicySpecificInfosEqual(left.policySpecificInfo, right.policySpecificInfo)) {\r\n return false;\r\n }\r\n if (!areStreamIdArraysEqual(left.ids, right.ids)) {\r\n return false;\r\n }\r\n if (left.maxPayloadBitsPerSecond !== right.maxPayloadBitsPerSecond) {\r\n return false;\r\n }\r\n if (!areCodecInfoArraysEqual(left.codecInfos, right.codecInfos)) {\r\n return false;\r\n }\r\n return true;\r\n}\n\nclass RetransmitHandler {\r\n constructor(msg, maxNumRetransmits, retransmitIntervalMs, transmitCallback, expirationCallback) {\r\n this.timerHandle = undefined;\r\n this.msg = msg;\r\n this.numRetransmitsLeft = maxNumRetransmits;\r\n this.retransmitIntervalMs = retransmitIntervalMs;\r\n this.transmitCallback = transmitCallback;\r\n this.expirationCallback = expirationCallback;\r\n this.scheduleTimer();\r\n }\r\n onTimer() {\r\n var _a;\r\n if (this.numRetransmitsLeft > 0) {\r\n --this.numRetransmitsLeft;\r\n this.transmitCallback(this.msg);\r\n this.scheduleTimer();\r\n }\r\n else {\r\n (_a = this.expirationCallback) === null || _a === void 0 ? void 0 : _a.call(this, this.msg);\r\n }\r\n }\r\n scheduleTimer() {\r\n this.timerHandle = window.setTimeout(() => this.onTimer(), this.retransmitIntervalMs);\r\n }\r\n cancel() {\r\n if (this.timerHandle) {\r\n clearTimeout(this.timerHandle);\r\n }\r\n this.timerHandle = undefined;\r\n }\r\n}\n\nvar JmpSessionEvents;\r\n(function (JmpSessionEvents) {\r\n JmpSessionEvents[\"ActiveSpeaker\"] = \"active-speaker\";\r\n JmpSessionEvents[\"MediaRequestReceived\"] = \"media-request-received\";\r\n JmpSessionEvents[\"MediaRequestStatusReceived\"] = \"media-request-status-received\";\r\n JmpSessionEvents[\"SourceAdvertisementReceived\"] = \"source-advertisement-received\";\r\n})(JmpSessionEvents || (JmpSessionEvents = {}));\r\nfunction areStreamRequestArraysEqual(left, right) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (!areStreamRequestsEqual(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nclass JmpSession extends EventEmitter {\r\n constructor(mediaFamily, mediaContent, maxNumRetransmits = 3, retransmitIntervalMs = 250) {\r\n super();\r\n this.currMediaRequestSeqNum = 1;\r\n this.currSourceAdvertisementSeqNum = 1;\r\n this.currMediaRequestStatusSeqNum = 1;\r\n this.txCallback = undefined;\r\n this.lastSentMediaRequest = undefined;\r\n this.lastSentMediaRequestAck = undefined;\r\n this.lastReceivedMediaRequest = undefined;\r\n this.mediaFamily = mediaFamily;\r\n this.mediaContent = mediaContent;\r\n this.logger = Logger.get(`JmpSession ${this.mediaFamily}-${this.mediaContent}`);\r\n this.maxNumRetransmits = maxNumRetransmits;\r\n this.retransmitIntervalMs = retransmitIntervalMs;\r\n }\r\n getLogger() {\r\n return this.logger;\r\n }\r\n sendRequests(requests) {\r\n var _a;\r\n const mediaRequestMsg = new MediaRequestMsg(this.currMediaRequestSeqNum, requests);\r\n if (!this.lastSentMediaRequest ||\r\n !areStreamRequestArraysEqual(this.lastSentMediaRequest.msg.requests, requests)) {\r\n this.sendJmpMsg(JmpMsgType.MediaRequest, mediaRequestMsg);\r\n (_a = this.lastSentMediaRequest) === null || _a === void 0 ? void 0 : _a.cancel();\r\n this.lastSentMediaRequest = new RetransmitHandler(mediaRequestMsg, this.maxNumRetransmits, this.retransmitIntervalMs, () => this.sendJmpMsg(JmpMsgType.MediaRequest, mediaRequestMsg), (expiredJmpMsg) => {\r\n this.logger.warn(`Retransmits for message expired: ${expiredJmpMsg}`);\r\n });\r\n this.currMediaRequestSeqNum++;\r\n }\r\n }\r\n sendSourceAdvertisement(numTotalSources, numLiveSources, namedMediaGroups, videoContentHint) {\r\n const sourceAdvertisementMsg = new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum++, numTotalSources, numLiveSources, namedMediaGroups, videoContentHint);\r\n this.sendJmpMsg(JmpMsgType.SourceAdvertisement, sourceAdvertisementMsg);\r\n this.lastSentSourceAdvertisement = new RetransmitHandler(sourceAdvertisementMsg, this.maxNumRetransmits, this.retransmitIntervalMs, () => this.sendJmpMsg(JmpMsgType.SourceAdvertisement, sourceAdvertisementMsg), (expiredMsg) => {\r\n this.logger.warn(`Retransmits for message expired: `, expiredMsg);\r\n });\r\n }\r\n sendMediaRequestStatus(streamStates) {\r\n var _a, _b;\r\n const filteredStreamStates = streamStates.filter((streamState) => {\r\n var _a;\r\n return (_a = this.lastReceivedMediaRequest) === null || _a === void 0 ? void 0 : _a.requests.some((req) => req.ids.find((streamId) => compareStreamIds(streamId, streamState.id)));\r\n });\r\n const mediaRequestStatus = new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum, filteredStreamStates);\r\n if (!((_a = this.lastSentMediaRequestStatus) === null || _a === void 0 ? void 0 : _a.msg.streamStates) ||\r\n !compareStreamStateArrays(filteredStreamStates, this.lastSentMediaRequestStatus.msg.streamStates)) {\r\n this.sendJmpMsg(JmpMsgType.MediaRequestStatus, mediaRequestStatus);\r\n (_b = this.lastSentMediaRequestStatus) === null || _b === void 0 ? void 0 : _b.cancel();\r\n this.lastSentMediaRequestStatus = new RetransmitHandler(mediaRequestStatus, this.maxNumRetransmits, this.retransmitIntervalMs, () => this.sendJmpMsg(JmpMsgType.MediaRequestStatus, mediaRequestStatus), (expiredMsg) => {\r\n this.logger.warn(`Retransmits for message expired: `, expiredMsg);\r\n });\r\n this.currMediaRequestStatusSeqNum++;\r\n }\r\n }\r\n receive(jmpMsg) {\r\n if (jmpMsg.mediaContent !== this.mediaContent || jmpMsg.mediaFamily !== this.mediaFamily) {\r\n this.logger.error(`JmpMsg ${jmpMsg} sent to incorrect JmpSession`);\r\n return;\r\n }\r\n this.logger.debug(`Received JmpMsg`, jmpMsg);\r\n const { payload } = jmpMsg;\r\n if (payload.msgType === JmpMsgType.MediaRequest) {\r\n const mediaRequestMsg = payload.payload;\r\n if (!isValidMediaRequestMsg(mediaRequestMsg)) {\r\n this.logger.error(`Received invalid MediaRequest:`, mediaRequestMsg);\r\n return;\r\n }\r\n this.handleIncomingMediaRequest(mediaRequestMsg);\r\n }\r\n else if (payload.msgType === JmpMsgType.MediaRequestAck) {\r\n const mediaRequestAckMsg = payload.payload;\r\n if (!isValidMediaRequestAckMsg(mediaRequestAckMsg)) {\r\n this.logger.error(`Received invalid MediaRequest ACK:`, mediaRequestAckMsg);\r\n return;\r\n }\r\n this.handleIncomingMediaRequestAck(mediaRequestAckMsg);\r\n }\r\n else if (payload.msgType === JmpMsgType.ActiveSpeakerNotification) {\r\n const activeSpeakerNotification = payload.payload;\r\n if (!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)) {\r\n this.logger.info(`Received invalid Active Speaker Notification:`, activeSpeakerNotification);\r\n return;\r\n }\r\n this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);\r\n }\r\n else if (payload.msgType === JmpMsgType.SourceAdvertisement) {\r\n const sourceAdvertisement = payload.payload;\r\n if (!isValidSourceAdvertisementMsg(sourceAdvertisement)) {\r\n this.logger.error(`Received invalid SourceAdvertisementMsg: `, sourceAdvertisement);\r\n return;\r\n }\r\n this.handleIncomingSourceAdvertisement(sourceAdvertisement);\r\n }\r\n else if (payload.msgType === JmpMsgType.SourceAdvertisementAck) {\r\n const sourceAdvertisementAck = payload.payload;\r\n if (!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)) {\r\n this.logger.error(`Received invalid SourceAdvertisementAckMsg: `, sourceAdvertisementAck);\r\n return;\r\n }\r\n this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);\r\n }\r\n else if (payload.msgType === JmpMsgType.MediaRequestStatus) {\r\n const mediaRequestStatus = payload.payload;\r\n if (!isValidMediaRequestStatusMsg(mediaRequestStatus)) {\r\n this.logger.error(`Received invalid MediaRequestStatusMsg: `, mediaRequestStatus);\r\n return;\r\n }\r\n this.handleIncomingMediaRequestStatus(mediaRequestStatus);\r\n }\r\n else if (payload.msgType === JmpMsgType.MediaRequestStatusAck) {\r\n const mediaRequestStatusAck = payload.payload;\r\n if (!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)) {\r\n this.logger.error(`Received invalid MediaRequestStatusAckMsg: `, mediaRequestStatusAck);\r\n return;\r\n }\r\n this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);\r\n }\r\n else {\r\n this.logger.error(`Received unknown JmpMsg`);\r\n }\r\n }\r\n setTxCallback(callback) {\r\n this.txCallback = callback;\r\n }\r\n close() {\r\n var _a;\r\n this.logger.info(`closing`);\r\n (_a = this.lastSentMediaRequest) === null || _a === void 0 ? void 0 : _a.cancel();\r\n }\r\n sendJmpMsg(msgType, payload) {\r\n var _a;\r\n const jmpMsg = new JmpMsg(this.mediaFamily, this.mediaContent, {\r\n msgType,\r\n payload,\r\n });\r\n const homerMsg = new HomerMsg(HomerMsgType.Multistream, jmpMsg);\r\n (_a = this.txCallback) === null || _a === void 0 ? void 0 : _a.call(this, JSON.stringify(homerMsg));\r\n }\r\n handleIncomingMediaRequest(mediaRequestMsg) {\r\n var _a;\r\n if (this.lastReceivedMediaRequest &&\r\n mediaRequestMsg.seqNum < ((_a = this.lastReceivedMediaRequest) === null || _a === void 0 ? void 0 : _a.seqNum)) {\r\n this.logger.info(`Received old MediaRequest, ignoring`);\r\n }\r\n else if (this.lastReceivedMediaRequest &&\r\n mediaRequestMsg.seqNum === this.lastReceivedMediaRequest.seqNum) {\r\n if (this.lastSentMediaRequestAck) {\r\n this.logger.info(`Received duplicate MediaRequest, re-sending ACK`);\r\n this.sendJmpMsg(JmpMsgType.MediaRequestAck, this.lastSentMediaRequestAck);\r\n }\r\n else {\r\n this.logger.warn(`Received duplicate MediaRequest, but there was no ACK previously sent`);\r\n }\r\n }\r\n else {\r\n this.logger.info(`Received new MediaRequest, sending ACK`);\r\n const mediaRequestAck = new MediaRequestAckMsg(mediaRequestMsg.seqNum);\r\n this.lastReceivedMediaRequest = mediaRequestMsg;\r\n this.lastSentMediaRequestAck = mediaRequestAck;\r\n this.sendJmpMsg(JmpMsgType.MediaRequestAck, mediaRequestAck);\r\n this.emit(JmpSessionEvents.MediaRequestReceived, mediaRequestMsg);\r\n }\r\n }\r\n handleIncomingMediaRequestAck(mediaRequestAckMsg) {\r\n var _a, _b, _c;\r\n if (mediaRequestAckMsg.mediaRequestSeqNum === ((_b = (_a = this.lastSentMediaRequest) === null || _a === void 0 ? void 0 : _a.msg) === null || _b === void 0 ? void 0 : _b.seqNum)) {\r\n this.logger.info(`Received ACK for last sent MediaRequest`);\r\n (_c = this.lastSentMediaRequest) === null || _c === void 0 ? void 0 : _c.cancel();\r\n }\r\n else {\r\n this.logger.info(`Received ACK for old MediaRequest`);\r\n }\r\n }\r\n handleIncomingActiveSpeakerNotification(activeSpeakerNotification) {\r\n this.logger.debug(`Received Active Speaker Notification:`, activeSpeakerNotification);\r\n this.emit(JmpSessionEvents.ActiveSpeaker, activeSpeakerNotification);\r\n }\r\n handleIncomingSourceAdvertisement(sourceAdvertisement) {\r\n if (this.lastReceivedSourceAdvertisement &&\r\n sourceAdvertisement.seqNum < this.lastReceivedSourceAdvertisement.seqNum) {\r\n this.logger.info(`Received old SourceAdvertisement, ignoring`);\r\n }\r\n else if (this.lastReceivedSourceAdvertisement &&\r\n sourceAdvertisement.seqNum === this.lastReceivedSourceAdvertisement.seqNum) {\r\n if (this.lastSentSourceAdvertisementAck) {\r\n this.logger.info(`Received duplicate SourceAdvertisement, re-sending ACK`);\r\n this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck, this.lastSentSourceAdvertisementAck);\r\n }\r\n else {\r\n this.logger.warn(`Received duplicate SourceAdvertisement, but there was no ACK previously sent`);\r\n }\r\n }\r\n else {\r\n this.logger.info(`Received new SourceAdvertisement, sending ACK`);\r\n const sourceAdvertisementAck = new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);\r\n this.lastReceivedSourceAdvertisement = sourceAdvertisement;\r\n this.lastSentSourceAdvertisementAck = sourceAdvertisementAck;\r\n this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck, sourceAdvertisementAck);\r\n this.emit(JmpSessionEvents.SourceAdvertisementReceived, sourceAdvertisement);\r\n }\r\n }\r\n handleIncomingSourceAdvertisementAck(sourceAdvertisementAck) {\r\n var _a, _b, _c;\r\n if (sourceAdvertisementAck.sourceAdvertisementSeqNum ===\r\n ((_b = (_a = this.lastSentSourceAdvertisement) === null || _a === void 0 ? void 0 : _a.msg) === null || _b === void 0 ? void 0 : _b.seqNum)) {\r\n this.logger.info(`Received ACK for last sent SourceAdvertisement`);\r\n (_c = this.lastSentSourceAdvertisement) === null || _c === void 0 ? void 0 : _c.cancel();\r\n }\r\n else {\r\n this.logger.info(`Received ACK for old SourceAdvertisement`);\r\n }\r\n }\r\n handleIncomingMediaRequestStatus(mediaRequestStatus) {\r\n if (this.lastReceivedMediaRequestStatus &&\r\n mediaRequestStatus.seqNum < this.lastReceivedMediaRequestStatus.seqNum) {\r\n this.logger.info(`Received old MediaRequestStatus, ignoring`);\r\n }\r\n else if (this.lastReceivedMediaRequestStatus &&\r\n mediaRequestStatus.seqNum === this.lastReceivedMediaRequestStatus.seqNum) {\r\n if (this.lastSentMediaRequestStatusAck) {\r\n this.logger.info(`Received duplicate MediaRequestStatus, re-sending ACK`);\r\n this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck, this.lastSentMediaRequestStatusAck);\r\n }\r\n else {\r\n this.logger.warn(`Received duplicate MediaRequestStatus, but there was no ACK previously sent`);\r\n }\r\n }\r\n else {\r\n this.logger.info(`Received new MediaRequestStatus, sending ACK`);\r\n const mediaRequestStatusAck = new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);\r\n this.lastReceivedMediaRequestStatus = mediaRequestStatus;\r\n this.lastSentMediaRequestStatusAck = mediaRequestStatusAck;\r\n this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck, mediaRequestStatusAck);\r\n this.emit(JmpSessionEvents.MediaRequestStatusReceived, mediaRequestStatus);\r\n }\r\n }\r\n handleIncomingMediaRequestStatusAck(mediaRequestStatusAck) {\r\n var _a, _b, _c;\r\n if (mediaRequestStatusAck.mediaRequestStatusSeqNum ===\r\n ((_b = (_a = this.lastSentMediaRequestStatus) === null || _a === void 0 ? void 0 : _a.msg) === null || _b === void 0 ? void 0 : _b.seqNum)) {\r\n this.logger.info(`Received ACK for last sent MediaRequestStatus`);\r\n (_c = this.lastSentMediaRequestStatus) === null || _c === void 0 ? void 0 : _c.cancel();\r\n }\r\n else {\r\n this.logger.info(`Received ACK for old MediaRequestStatus`);\r\n }\r\n }\r\n}\n\nexport { ActiveSpeakerInfo, ActiveSpeakerNotificationMsg, CodecInfo, H264Codec, HomerMsg, HomerMsgType, JmpMsg, JmpMsgType, JmpSession, JmpSessionEvents, Logger, MediaContent, MediaFamily, MediaRequestAckMsg, MediaRequestMsg, MediaRequestStatusAckMsg, MediaRequestStatusMsg, MediaType, Policy, ReceiverSelectedInfo, SourceAdvertisementAckMsg, SourceAdvertisementMsg, StreamRequest, areActiveSpeakerInfosEqual, areCodecInfosEqual, areH264CodecsEqual, areReceiverSelectedInfosEqual, areStreamRequestsEqual, compareStreamIds, compareStreamStateArrays, generateCsi, generateSceneId, getMediaContent, getMediaFamily, getMediaType, isValidActiveSpeakerInfo, isValidActiveSpeakerNotificationMsg, isValidCodecRequestInfo, isValidH264Codec, isValidJmpMsg, isValidJmpMsgPayload, isValidMediaRequestAckMsg, isValidMediaRequestMsg, isValidMediaRequestStatusAckMsg, isValidMediaRequestStatusMsg, isValidReceiverSelectedInfo, isValidSourceAdvertisementAckMsg, isValidSourceAdvertisementMsg, isValidStreamId, isValidStreamInfo, isValidStreamRequest, truthyOrZero };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","\"use strict\";\nexports.__esModule = true;\nexports.rtcStats = void 0;\nvar uuid_1 = require(\"uuid\");\n/**\n * Copies values of any nested depth.\n *\n * @param value - The value to be copied.\n * @returns - Copied value.\n */\nvar deepCopy = function (value) { return JSON.parse(JSON.stringify(value)); };\n/**\n * Check deep equality between two values.\n *\n * @param value1 - First value to check.\n * @param value2 - Second value to check.\n * @returns True if values are deeply equal, false otherwise.\n */\nvar deepEqual = function (value1, value2) {\n // If both immutable values are equal, return true.\n if (value1 === value2) {\n return true;\n }\n // If both are objects, we check the length and properties of each.\n if (value1 && value2 && typeof value1 === 'object' && typeof value2 === 'object') {\n if (value1.constructor !== value2.constructor)\n return false;\n // Return false if the objects are of different sizes.\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n // Deep equal check each property in the opject.\n for (var prop in value1) {\n if (value2.hasOwnProperty(prop)) {\n if (!deepEqual(value1[prop], value2[prop])) {\n return false;\n }\n }\n else {\n return false;\n }\n }\n // Return true if we found no differing properties.\n return true;\n }\n // Return false if no other conditions are met.\n return false;\n};\n/**\n * Translates a RTCStatsReport into an object.\n *\n * @param report - The report.\n * @returns - A deduped object.\n */\nvar map2obj = function (report) {\n if (!report.size) {\n return report;\n }\n var o = {};\n report.forEach(function (value, key) {\n o[key] = value;\n });\n return o;\n};\nvar persistedKeys = ['type', 'id', 'timestamp'];\n/**\n * Check to see if the report consists of more than just the persisted metadata.\n *\n * @param report - The report line being checked.\n * @returns True if the report item contains non-persisted keys, false otherwise.\n */\nvar hasNonMetadata = function (report) {\n return !!Object.keys(report).filter(function (key) { return !persistedKeys.includes(key); }).length;\n};\n/**\n * Apply a delta compression to the stats report. Reduces size by ~90%.\n * To reduce further, report keys could be compressed.\n *\n * @param oldStats - Previous report items that we dedupe against.\n * @param newStats - New incoming stats.\n * @returns - Compressed Stats.\n */\nvar deltaCompression = function (oldStats, newStats) {\n var updatedStats = deepCopy(newStats);\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (!oldStats[id]) {\n return;\n }\n // Persist specific values beyond delta compression, as long as they\n // aren't the only non-deduped keys.\n Object.keys(report).forEach(function (name) {\n if (deepEqual(report[name], oldStats[id][name]) && !persistedKeys.includes(name)) {\n delete updatedStats[id][name];\n }\n if (!hasNonMetadata(report)) {\n delete updatedStats[id];\n }\n });\n });\n // Use the most recent timestamp.\n var timestamp = -Infinity;\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (report.timestamp > timestamp) {\n timestamp = report.timestamp;\n }\n });\n // Delete the timestamps on each item.\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (report.timestamp === timestamp) {\n delete report.timestamp;\n }\n });\n updatedStats.timestamp = timestamp;\n return updatedStats;\n};\n/**\n * Format the stats report into an array.\n *\n * @param report - A WebRTC stats report.\n * @returns - An array of Stats Report items.\n */\nvar formatStatsReport = function (report) {\n return Object.keys(report)\n .filter(function (name) { return name !== 'timestamp'; })\n .map(function (name) { return report[name]; });\n};\n/**\n * Parametrize a single string event to contain type and an (empty) id.\n *\n * @param value - The value to parametrize.\n * @returns An event object.\n */\nvar makeEvent = function (value) { return ([{ value: value, type: 'string', id: '' }]); };\n/**\n * Attach a Peer Connection to periodically get updated on events and stats.\n *\n * @param pc - Peer Connection in which we attach.\n * @param logger - Logging function to log events and stats.\n * @param intervalTime - Time between each `getStats` check.\n * @param id - Optional id string used for logging.\n * @param statsPreProcessor - Optional function that modifies stats.\n */\nvar rtcStats = function (pc, logger, intervalTime, id, statsPreProcessor) {\n if (id === void 0) { id = (0, uuid_1.v4)(); }\n if (statsPreProcessor === void 0) { statsPreProcessor = function () { return Promise.resolve(); }; }\n var prev = {};\n /**\n * Log stats or event data with additional tracking information.\n *\n * @param name - Name of the event to log.\n * @param payload - Log data pertaining to the event.\n */\n var trace = function (name, payload, timestamp) {\n logger({ id: id, timestamp: timestamp ? Math.round(timestamp) : Date.now(), name: name, payload: payload });\n };\n pc.addEventListener('icecandidate', function (e) {\n if (e.candidate) {\n trace('onicecandidate', makeEvent(JSON.stringify(e.candidate)));\n }\n });\n pc.addEventListener('icecandidateerror', function (event) {\n var _a = event, errorCode = _a.errorCode, errorText = _a.errorText;\n trace('onicecandidateerror', makeEvent(\"\".concat(errorCode, \": \").concat(errorText)));\n });\n pc.addEventListener('track', function (e) {\n trace('ontrack', makeEvent(\"\".concat(e.track.kind, \":\").concat(e.track.id, \" \").concat(e.streams.map(function (stream) { return \"stream:\".concat(stream.id); }).join(' '))));\n });\n pc.addEventListener('signalingstatechange', function () {\n trace('onsignalingstatechange', makeEvent(pc.signalingState));\n });\n pc.addEventListener('iceconnectionstatechange', function () {\n trace('oniceconnectionstatechange', makeEvent(pc.iceConnectionState));\n });\n pc.addEventListener('icegatheringstatechange', function () {\n trace('onicegatheringstatechange', makeEvent(pc.iceGatheringState));\n });\n pc.addEventListener('connectionstatechange', function () {\n trace('onconnectionstatechange', makeEvent(pc.connectionState));\n });\n pc.addEventListener('negotiationneeded', function () {\n trace('onnegotiationneeded', makeEvent('negotiationneeded'));\n });\n pc.addEventListener('datachannel', function (event) {\n trace('ondatachannel', makeEvent(\"\".concat(event.channel.id, \": \").concat(event.channel.label)));\n });\n var interval = window.setInterval(function () {\n if (pc.signalingState === 'closed') {\n window.clearInterval(interval);\n return;\n }\n pc.getStats(null).then(function (res) {\n var now = map2obj(res);\n statsPreProcessor(now).then(function () {\n var base = deepCopy(now); // our new prev\n var compressed = deltaCompression(prev, now);\n trace('stats-report', formatStatsReport(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);\n prev = base;\n });\n });\n }, intervalTime);\n};\nexports.rtcStats = rtcStats;\n","const NUM = '\\\\d+';\r\nconst SDP_TOKEN = \"[!#$%&'*+\\\\-.^_`{|}~a-zA-Z0-9]+\";\r\nconst ANY_NON_WS = '\\\\S+';\r\nconst SP = '\\\\s';\r\nconst WS = '\\\\w*';\r\nconst REST = '.+';\n\nclass Line {\r\n}\n\nvar _a$5;\r\nclass BandwidthLine extends Line {\r\n constructor(bandwidthType, bandwidth) {\r\n super();\r\n this.bandwidthType = bandwidthType;\r\n this.bandwidth = bandwidth;\r\n }\r\n static fromSdpLine(line) {\r\n if (!BandwidthLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(BandwidthLine.regex);\r\n const bandwidthType = tokens[1];\r\n const bandwidth = parseInt(tokens[2], 10);\r\n return new BandwidthLine(bandwidthType, bandwidth);\r\n }\r\n toSdpLine() {\r\n return `b=${this.bandwidthType}:${this.bandwidth}`;\r\n }\r\n}\r\n_a$5 = BandwidthLine;\r\nBandwidthLine.BW_TYPE_REGEX = 'CT|AS|TIAS';\r\nBandwidthLine.regex = new RegExp(`^(${_a$5.BW_TYPE_REGEX}):(${NUM})`);\n\nclass BundleGroupLine extends Line {\r\n constructor(mids) {\r\n super();\r\n this.mids = mids;\r\n }\r\n static fromSdpLine(line) {\r\n if (!BundleGroupLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(BundleGroupLine.regex);\r\n const mids = tokens[1].split(' ');\r\n return new BundleGroupLine(mids);\r\n }\r\n toSdpLine() {\r\n return `a=group:BUNDLE ${this.mids.join(' ')}`;\r\n }\r\n}\r\nBundleGroupLine.regex = new RegExp(`^group:BUNDLE (${REST})`);\n\nvar _a$4;\r\nclass CandidateLine extends Line {\r\n constructor(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions) {\r\n super();\r\n this.foundation = foundation;\r\n this.componentId = componentId;\r\n this.transport = transport;\r\n this.priority = priority;\r\n this.connectionAddress = connectionAddress;\r\n this.port = port;\r\n this.candidateType = candidateType;\r\n this.relAddr = relAddr;\r\n this.relPort = relPort;\r\n this.candidateExtensions = candidateExtensions;\r\n }\r\n static fromSdpLine(line) {\r\n if (!CandidateLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(CandidateLine.regex);\r\n const foundation = tokens[1];\r\n const componentId = parseInt(tokens[2], 10);\r\n const transport = tokens[3];\r\n const priority = parseInt(tokens[4], 10);\r\n const connectionAddress = tokens[5];\r\n const port = parseInt(tokens[6], 10);\r\n const candidateType = tokens[7];\r\n const relAddr = tokens[8];\r\n const relPort = tokens[9] ? parseInt(tokens[9], 10) : undefined;\r\n const candidateExtensions = tokens[10];\r\n return new CandidateLine(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=candidate:${this.foundation} ${this.componentId} ${this.transport} ${this.priority} ${this.connectionAddress} ${this.port} typ ${this.candidateType}`;\r\n if (this.relAddr) {\r\n str += ` raddr ${this.relAddr}`;\r\n }\r\n if (this.relPort) {\r\n str += ` rport ${this.relPort}`;\r\n }\r\n if (this.candidateExtensions) {\r\n str += ` ${this.candidateExtensions}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a$4 = CandidateLine;\r\nCandidateLine.ICE_CHARS = `[a-zA-Z0-9+/]+`;\r\nCandidateLine.regex = new RegExp(`^candidate:(${_a$4.ICE_CHARS}) (${NUM}) (${ANY_NON_WS}) (${NUM}) (${ANY_NON_WS}) (${NUM}) typ (${ANY_NON_WS})(?: raddr (${ANY_NON_WS}))?(?: rport (${NUM}))?(?: (${REST}))?`);\n\nclass ConnectionLine extends Line {\r\n constructor(netType, addrType, ipAddr) {\r\n super();\r\n this.netType = netType;\r\n this.addrType = addrType;\r\n this.ipAddr = ipAddr;\r\n }\r\n static fromSdpLine(line) {\r\n if (!ConnectionLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(ConnectionLine.regex);\r\n const netType = tokens[1];\r\n const addrType = tokens[2];\r\n const ipAddr = tokens[3];\r\n return new ConnectionLine(netType, addrType, ipAddr);\r\n }\r\n toSdpLine() {\r\n return `c=${this.netType} ${this.addrType} ${this.ipAddr}`;\r\n }\r\n}\r\nConnectionLine.regex = new RegExp(`^(${ANY_NON_WS}) (${ANY_NON_WS}) (${ANY_NON_WS})`);\n\nclass ContentLine extends Line {\r\n constructor(values) {\r\n super();\r\n this.values = values;\r\n }\r\n static fromSdpLine(line) {\r\n if (!ContentLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(ContentLine.regex);\r\n const values = tokens[1].split(',');\r\n return new ContentLine(values);\r\n }\r\n toSdpLine() {\r\n return `a=content:${this.values.join(',')}`;\r\n }\r\n}\r\nContentLine.regex = new RegExp(`^content:(${REST})$`);\n\nclass DirectionLine extends Line {\r\n constructor(direction) {\r\n super();\r\n this.direction = direction;\r\n }\r\n static fromSdpLine(line) {\r\n if (!DirectionLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(DirectionLine.regex);\r\n const direction = tokens[1];\r\n return new DirectionLine(direction);\r\n }\r\n toSdpLine() {\r\n return `a=${this.direction}`;\r\n }\r\n}\r\nDirectionLine.regex = /^(sendrecv|sendonly|recvonly|inactive)$/;\n\nvar _a$3;\r\nclass ExtMapLine extends Line {\r\n constructor(id, uri, direction, extensionAttributes) {\r\n super();\r\n this.id = id;\r\n this.uri = uri;\r\n this.direction = direction;\r\n this.extensionAttributes = extensionAttributes;\r\n }\r\n static fromSdpLine(line) {\r\n if (!ExtMapLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(ExtMapLine.regex);\r\n const id = parseInt(tokens[1], 10);\r\n const direction = tokens[2];\r\n const uri = tokens[3];\r\n const extensionAttributes = tokens[4];\r\n return new ExtMapLine(id, uri, direction, extensionAttributes);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=extmap:${this.id}`;\r\n if (this.direction) {\r\n str += `/${this.direction}`;\r\n }\r\n str += ` ${this.uri}`;\r\n if (this.extensionAttributes) {\r\n str += ` ${this.extensionAttributes}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a$3 = ExtMapLine;\r\nExtMapLine.EXTMAP_DIRECTION = `sendonly|recvonly|sendrecv|inactive`;\r\nExtMapLine.regex = new RegExp(`^extmap:(${NUM})(?:/(${_a$3.EXTMAP_DIRECTION}))? (${ANY_NON_WS})(?: (${REST}))?`);\n\nclass FingerprintLine extends Line {\r\n constructor(fingerprint) {\r\n super();\r\n this.fingerprint = fingerprint;\r\n }\r\n static fromSdpLine(line) {\r\n if (!FingerprintLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(FingerprintLine.regex);\r\n const fingerprint = tokens[1];\r\n return new FingerprintLine(fingerprint);\r\n }\r\n toSdpLine() {\r\n return `a=fingerprint:${this.fingerprint}`;\r\n }\r\n}\r\nFingerprintLine.regex = new RegExp(`^fingerprint:(${REST})`);\n\nfunction parseFmtpParams(fmtpParams) {\r\n fmtpParams = fmtpParams.replace(/^a=fmtp:\\d+\\x20/, '');\r\n const fmtpObj = new Map();\r\n if (/^\\d+([/-]\\d+)+$/.test(fmtpParams)) {\r\n fmtpObj.set(fmtpParams, undefined);\r\n return fmtpObj;\r\n }\r\n fmtpParams.split(';').forEach((param) => {\r\n const paramArr = param && param.split('=');\r\n if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {\r\n throw new Error(`Fmtp params is invalid with ${fmtpParams}`);\r\n }\r\n fmtpObj.set(paramArr[0], paramArr[1]);\r\n });\r\n return fmtpObj;\r\n}\r\nclass FmtpLine extends Line {\r\n constructor(payloadType, params) {\r\n super();\r\n this.payloadType = payloadType;\r\n this.params = params;\r\n }\r\n static fromSdpLine(line) {\r\n if (!FmtpLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(FmtpLine.regex);\r\n const payloadType = parseInt(tokens[1], 10);\r\n const params = tokens[2];\r\n return new FmtpLine(payloadType, parseFmtpParams(params));\r\n }\r\n toSdpLine() {\r\n const fmtParams = Array.from(this.params.keys())\r\n .map((key) => {\r\n if (this.params.get(key) !== undefined) {\r\n return `${key}=${this.params.get(key)}`;\r\n }\r\n return `${key}`;\r\n })\r\n .join(';');\r\n return `a=fmtp:${this.payloadType} ${fmtParams}`;\r\n }\r\n}\r\nFmtpLine.regex = new RegExp(`^fmtp:(${NUM}) (${REST})`);\n\nclass IceOptionsLine extends Line {\r\n constructor(options) {\r\n super();\r\n this.options = options;\r\n }\r\n static fromSdpLine(line) {\r\n if (!IceOptionsLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(IceOptionsLine.regex);\r\n const options = tokens[1].split(' ');\r\n return new IceOptionsLine(options);\r\n }\r\n toSdpLine() {\r\n return `a=ice-options:${this.options.join(' ')}`;\r\n }\r\n}\r\nIceOptionsLine.regex = new RegExp(`^ice-options:(${REST})$`);\n\nclass IcePwdLine extends Line {\r\n constructor(pwd) {\r\n super();\r\n this.pwd = pwd;\r\n }\r\n static fromSdpLine(line) {\r\n if (!IcePwdLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(IcePwdLine.regex);\r\n const pwd = tokens[1];\r\n return new IcePwdLine(pwd);\r\n }\r\n toSdpLine() {\r\n return `a=ice-pwd:${this.pwd}`;\r\n }\r\n}\r\nIcePwdLine.regex = new RegExp(`^ice-pwd:(${ANY_NON_WS})$`);\n\nclass IceUfragLine extends Line {\r\n constructor(ufrag) {\r\n super();\r\n this.ufrag = ufrag;\r\n }\r\n static fromSdpLine(line) {\r\n if (!IceUfragLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(IceUfragLine.regex);\r\n const ufrag = tokens[1];\r\n return new IceUfragLine(ufrag);\r\n }\r\n toSdpLine() {\r\n return `a=ice-ufrag:${this.ufrag}`;\r\n }\r\n}\r\nIceUfragLine.regex = new RegExp(`^ice-ufrag:(${ANY_NON_WS})$`);\n\nclass MaxMessageSizeLine extends Line {\r\n constructor(maxMessageSize) {\r\n super();\r\n this.maxMessageSize = maxMessageSize;\r\n }\r\n static fromSdpLine(line) {\r\n if (!MaxMessageSizeLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(MaxMessageSizeLine.regex);\r\n const maxMessageSize = parseInt(tokens[1], 10);\r\n return new MaxMessageSizeLine(maxMessageSize);\r\n }\r\n toSdpLine() {\r\n return `a=max-message-size:${this.maxMessageSize}`;\r\n }\r\n}\r\nMaxMessageSizeLine.regex = new RegExp(`^max-message-size:(${NUM})`);\n\nvar _a$2;\r\nclass MediaLine extends Line {\r\n constructor(type, port, protocol, formats) {\r\n super();\r\n this.type = type;\r\n this.port = port;\r\n this.protocol = protocol;\r\n this.formats = formats;\r\n }\r\n static fromSdpLine(line) {\r\n if (!MediaLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(MediaLine.regex);\r\n const type = tokens[1];\r\n const port = parseInt(tokens[2], 10);\r\n const protocol = tokens[3];\r\n const formats = tokens[4].split(' ');\r\n return new MediaLine(type, port, protocol, formats);\r\n }\r\n toSdpLine() {\r\n return `m=${this.type} ${this.port} ${this.protocol} ${this.formats.join(' ')}`;\r\n }\r\n}\r\n_a$2 = MediaLine;\r\nMediaLine.MEDIA_TYPE = 'audio|video|application';\r\nMediaLine.regex = new RegExp(`^(${_a$2.MEDIA_TYPE}) (${NUM}) (${ANY_NON_WS}) (${REST})`);\n\nclass MidLine extends Line {\r\n constructor(mid) {\r\n super();\r\n this.mid = mid;\r\n }\r\n static fromSdpLine(line) {\r\n if (!MidLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(MidLine.regex);\r\n const mid = tokens[1];\r\n return new MidLine(mid);\r\n }\r\n toSdpLine() {\r\n return `a=mid:${this.mid}`;\r\n }\r\n}\r\nMidLine.regex = new RegExp(`^mid:(${ANY_NON_WS})$`);\n\nclass OriginLine extends Line {\r\n constructor(username, sessionId, sessionVersion, netType, addrType, ipAddr) {\r\n super();\r\n this.username = username;\r\n this.sessionId = sessionId;\r\n this.sessionVersion = sessionVersion;\r\n this.netType = netType;\r\n this.addrType = addrType;\r\n this.ipAddr = ipAddr;\r\n }\r\n static fromSdpLine(line) {\r\n if (!OriginLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(OriginLine.regex);\r\n const username = tokens[1];\r\n const sessionId = tokens[2];\r\n const sessionVersion = parseInt(tokens[3], 10);\r\n const netType = tokens[4];\r\n const addrType = tokens[5];\r\n const ipAddr = tokens[6];\r\n return new OriginLine(username, sessionId, sessionVersion, netType, addrType, ipAddr);\r\n }\r\n toSdpLine() {\r\n return `o=${this.username} ${this.sessionId} ${this.sessionVersion} ${this.netType} ${this.addrType} ${this.ipAddr}`;\r\n }\r\n}\r\nOriginLine.regex = new RegExp(`^(${ANY_NON_WS}) (${ANY_NON_WS}) (${NUM}) (${ANY_NON_WS}) (${ANY_NON_WS}) (${ANY_NON_WS})`);\n\nvar _a$1;\r\nclass RidLine extends Line {\r\n constructor(id, direction, params) {\r\n super();\r\n this.id = id;\r\n this.direction = direction;\r\n this.params = params;\r\n }\r\n static fromSdpLine(line) {\r\n if (!RidLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(RidLine.regex);\r\n const id = tokens[1];\r\n const direction = tokens[2];\r\n const params = tokens[3];\r\n return new RidLine(id, direction, params);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=rid:${this.id} ${this.direction}`;\r\n if (this.params) {\r\n str += ` ${this.params}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a$1 = RidLine;\r\nRidLine.RID_ID = `[\\\\w-]+`;\r\nRidLine.RID_DIRECTION = `\\\\bsend\\\\b|\\\\brecv\\\\b`;\r\nRidLine.regex = new RegExp(`^rid:(${_a$1.RID_ID}) (${_a$1.RID_DIRECTION})(?:${SP}(${REST}))?`);\n\nclass RtcpMuxLine extends Line {\r\n static fromSdpLine(line) {\r\n if (!RtcpMuxLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n return new RtcpMuxLine();\r\n }\r\n toSdpLine() {\r\n return `a=rtcp-mux`;\r\n }\r\n}\r\nRtcpMuxLine.regex = /^rtcp-mux$/;\n\nclass RtcpFbLine extends Line {\r\n constructor(payloadType, feedback) {\r\n super();\r\n this.payloadType = payloadType;\r\n this.feedback = feedback;\r\n }\r\n static fromSdpLine(line) {\r\n if (!RtcpFbLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(RtcpFbLine.regex);\r\n const payloadType = parseInt(tokens[1], 10);\r\n const feedback = tokens[2];\r\n return new RtcpFbLine(payloadType, feedback);\r\n }\r\n toSdpLine() {\r\n return `a=rtcp-fb:${this.payloadType} ${this.feedback}`;\r\n }\r\n}\r\nRtcpFbLine.regex = new RegExp(`^rtcp-fb:(${NUM}) (${REST})`);\n\nvar _a;\r\nclass RtpMapLine extends Line {\r\n constructor(payloadType, encodingName, clockRate, encodingParams) {\r\n super();\r\n this.payloadType = payloadType;\r\n this.encodingName = encodingName;\r\n this.clockRate = clockRate;\r\n this.encodingParams = encodingParams;\r\n }\r\n static fromSdpLine(line) {\r\n if (!RtpMapLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(RtpMapLine.regex);\r\n const payloadType = parseInt(tokens[1], 10);\r\n const encodingName = tokens[2];\r\n const clockRate = parseInt(tokens[3], 10);\r\n const encodingParams = tokens[4];\r\n return new RtpMapLine(payloadType, encodingName, clockRate, encodingParams);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=rtpmap:${this.payloadType} ${this.encodingName}/${this.clockRate}`;\r\n if (this.encodingParams) {\r\n str += `/${this.encodingParams}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a = RtpMapLine;\r\nRtpMapLine.NON_SLASH_TOKEN = '[^\\\\s/]+';\r\nRtpMapLine.regex = new RegExp(`^rtpmap:(${NUM}) (${_a.NON_SLASH_TOKEN})/(${_a.NON_SLASH_TOKEN})(?:/(${_a.NON_SLASH_TOKEN}))?`);\n\nclass SctpPortLine extends Line {\r\n constructor(port) {\r\n super();\r\n this.port = port;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SctpPortLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SctpPortLine.regex);\r\n const port = parseInt(tokens[1], 10);\r\n return new SctpPortLine(port);\r\n }\r\n toSdpLine() {\r\n return `a=sctp-port:${this.port}`;\r\n }\r\n}\r\nSctpPortLine.regex = new RegExp(`^sctp-port:(${NUM})`);\n\nclass SessionInformationLine extends Line {\r\n constructor(info) {\r\n super();\r\n this.info = info;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SessionInformationLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SessionInformationLine.regex);\r\n const info = tokens[1];\r\n return new SessionInformationLine(info);\r\n }\r\n toSdpLine() {\r\n return `i=${this.info}`;\r\n }\r\n}\r\nSessionInformationLine.regex = new RegExp(`(${REST})`);\n\nclass SessionNameLine extends Line {\r\n constructor(name) {\r\n super();\r\n this.name = name;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SessionNameLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SessionNameLine.regex);\r\n const name = tokens[1];\r\n return new SessionNameLine(name);\r\n }\r\n toSdpLine() {\r\n return `s=${this.name}`;\r\n }\r\n}\r\nSessionNameLine.regex = new RegExp(`^(${REST})`);\n\nclass SetupLine extends Line {\r\n constructor(setup) {\r\n super();\r\n this.setup = setup;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SetupLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SetupLine.regex);\r\n const setup = tokens[1];\r\n return new SetupLine(setup);\r\n }\r\n toSdpLine() {\r\n return `a=setup:${this.setup}`;\r\n }\r\n}\r\nSetupLine.regex = /^setup:(actpass|active|passive)$/;\n\nclass SimulcastLayer {\r\n constructor(id, paused) {\r\n this.id = id;\r\n this.paused = paused;\r\n }\r\n toString() {\r\n return this.paused ? `~${this.id}` : this.id;\r\n }\r\n}\r\nclass SimulcastLayerList {\r\n constructor() {\r\n this.layers = [];\r\n }\r\n addLayer(layer) {\r\n this.layers.push([layer]);\r\n }\r\n addLayerWithAlternatives(alternatives) {\r\n this.layers.push(alternatives);\r\n }\r\n get length() {\r\n return this.layers.length;\r\n }\r\n get(index) {\r\n return this.layers[index];\r\n }\r\n static fromString(str) {\r\n const layerList = new SimulcastLayerList();\r\n const tokens = str.split(';');\r\n if (tokens.length === 1 && !tokens[0].trim()) {\r\n throw new Error('simulcast stream list empty');\r\n }\r\n tokens.forEach((token) => {\r\n if (!token) {\r\n throw new Error('simulcast layer list empty');\r\n }\r\n const ridTokens = token.split(',');\r\n const layers = [];\r\n ridTokens.forEach((ridToken) => {\r\n if (!ridToken || ridToken === '~') {\r\n throw new Error('rid empty');\r\n }\r\n const paused = ridToken[0] === '~';\r\n const rid = paused ? ridToken.substring(1) : ridToken;\r\n layers.push(new SimulcastLayer(rid, paused));\r\n });\r\n layerList.addLayerWithAlternatives(layers);\r\n });\r\n return layerList;\r\n }\r\n toString() {\r\n return this.layers\r\n .map((altArray) => altArray.map((v) => v.toString()).join(','))\r\n .join(';');\r\n }\r\n}\r\nclass SimulcastLine extends Line {\r\n constructor(sendLayers, recvLayers) {\r\n super();\r\n this.sendLayers = sendLayers;\r\n this.recvLayers = recvLayers;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SimulcastLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SimulcastLine.regex);\r\n const bidirectional = tokens[3] && tokens[4];\r\n const firstDirection = tokens[1];\r\n const layerList1 = SimulcastLayerList.fromString(tokens[2]);\r\n let layerList2 = new SimulcastLayerList();\r\n if (bidirectional) {\r\n const secondDirection = tokens[3];\r\n if (firstDirection === secondDirection) {\r\n return undefined;\r\n }\r\n layerList2 = SimulcastLayerList.fromString(tokens[4]);\r\n }\r\n let sendLayerList;\r\n let recvLayerList;\r\n if (firstDirection === 'send') {\r\n sendLayerList = layerList1;\r\n recvLayerList = layerList2;\r\n }\r\n else {\r\n sendLayerList = layerList2;\r\n recvLayerList = layerList1;\r\n }\r\n return new SimulcastLine(sendLayerList, recvLayerList);\r\n }\r\n toSdpLine() {\r\n let str = 'a=simulcast:';\r\n if (this.sendLayers.length) {\r\n str += `send ${this.sendLayers.toString()}`;\r\n if (this.recvLayers.length) {\r\n str += ` `;\r\n }\r\n }\r\n if (this.recvLayers.length) {\r\n str += `recv ${this.recvLayers.toString()}`;\r\n }\r\n return str;\r\n }\r\n}\r\nSimulcastLine.regex = new RegExp(`^simulcast:(send|recv) (${ANY_NON_WS})(?: (send|recv) (${ANY_NON_WS}))?`);\n\nclass SsrcLine extends Line {\r\n constructor(ssrcId, attribute, attributeValue = undefined, attributeData = undefined) {\r\n super();\r\n this.ssrcId = ssrcId;\r\n this.attribute = attribute;\r\n this.attributeValue = attributeValue;\r\n this.attributeData = attributeData;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SsrcLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SsrcLine.regex);\r\n const ssrcId = parseInt(tokens[1], 10);\r\n const attribute = tokens[2];\r\n const attributeValue = tokens[3];\r\n const attributeData = tokens[4];\r\n return new SsrcLine(ssrcId, attribute, attributeValue, attributeData);\r\n }\r\n toSdpLine() {\r\n let str = `a=ssrc:${this.ssrcId} ${this.attribute}`;\r\n if (this.attributeValue) {\r\n str += `:${this.attributeValue}`;\r\n }\r\n if (this.attributeData) {\r\n str += ` ${this.attributeData}`;\r\n }\r\n return str;\r\n }\r\n}\r\nSsrcLine.regex = new RegExp(`^ssrc:(${NUM}) (${SDP_TOKEN})(?::(${SDP_TOKEN})?(?: (${ANY_NON_WS}))?)?$`);\n\nclass SsrcGroupLine extends Line {\r\n constructor(semantics, ssrcs) {\r\n super();\r\n this.semantics = semantics;\r\n this.ssrcs = ssrcs;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SsrcGroupLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SsrcGroupLine.regex);\r\n const semantics = tokens[1];\r\n const ssrcs = tokens[2].split(' ').map((ssrcStr) => parseInt(ssrcStr, 10));\r\n return new SsrcGroupLine(semantics, ssrcs);\r\n }\r\n toSdpLine() {\r\n return `a=ssrc-group:${this.semantics} ${this.ssrcs.join(' ')}`;\r\n }\r\n}\r\nSsrcGroupLine.regex = new RegExp(`^ssrc-group:(SIM|FID|FEC) ((?:${NUM}${SP}*)+)`);\n\nclass TimingLine extends Line {\r\n constructor(startTime, stopTime) {\r\n super();\r\n this.startTime = startTime;\r\n this.stopTime = stopTime;\r\n }\r\n static fromSdpLine(line) {\r\n if (!TimingLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(TimingLine.regex);\r\n const startTime = parseInt(tokens[1], 10);\r\n const stopTime = parseInt(tokens[2], 10);\r\n return new TimingLine(startTime, stopTime);\r\n }\r\n toSdpLine() {\r\n return `t=${this.startTime} ${this.stopTime}`;\r\n }\r\n}\r\nTimingLine.regex = new RegExp(`^(${NUM}) (${NUM})`);\n\nclass VersionLine extends Line {\r\n constructor(version) {\r\n super();\r\n this.version = version;\r\n }\r\n static fromSdpLine(line) {\r\n if (!VersionLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(VersionLine.regex);\r\n const version = parseInt(tokens[1], 10);\r\n return new VersionLine(version);\r\n }\r\n toSdpLine() {\r\n return `v=${this.version}`;\r\n }\r\n}\r\nVersionLine.regex = new RegExp(`^(${NUM})$`);\n\nclass UnknownLine extends Line {\r\n constructor(value) {\r\n super();\r\n this.value = value;\r\n }\r\n static fromSdpLine(line) {\r\n const tokens = line.match(UnknownLine.regex);\r\n const value = tokens[1];\r\n return new UnknownLine(value);\r\n }\r\n toSdpLine() {\r\n return `${this.value}`;\r\n }\r\n}\r\nUnknownLine.regex = new RegExp(`(${REST})`);\n\nclass IceInfo {\r\n constructor() {\r\n this.candidates = [];\r\n }\r\n addLine(line) {\r\n if (line instanceof IceUfragLine) {\r\n this.ufrag = line;\r\n return true;\r\n }\r\n if (line instanceof IcePwdLine) {\r\n this.pwd = line;\r\n return true;\r\n }\r\n if (line instanceof IceOptionsLine) {\r\n this.options = line;\r\n return true;\r\n }\r\n if (line instanceof CandidateLine) {\r\n this.candidates.push(line);\r\n return true;\r\n }\r\n return false;\r\n }\r\n toLines() {\r\n const lines = [];\r\n if (this.ufrag) {\r\n lines.push(this.ufrag);\r\n }\r\n if (this.pwd) {\r\n lines.push(this.pwd);\r\n }\r\n if (this.options) {\r\n lines.push(this.options);\r\n }\r\n this.candidates.forEach((candidate) => lines.push(candidate));\r\n return lines;\r\n }\r\n}\n\nclass MediaDescription {\r\n constructor(type, port, protocol) {\r\n this.iceInfo = new IceInfo();\r\n this.otherLines = [];\r\n this.type = type;\r\n this.port = port;\r\n this.protocol = protocol;\r\n }\r\n findOtherLine(ty) {\r\n return this.otherLines.find((line) => line instanceof ty);\r\n }\r\n addLine(line) {\r\n if (line instanceof BundleGroupLine) {\r\n throw new Error(`Error: bundle group line not allowed in media description`);\r\n }\r\n if (line instanceof BandwidthLine) {\r\n this.bandwidth = line;\r\n return true;\r\n }\r\n if (line instanceof MidLine) {\r\n this.mid = line.mid;\r\n return true;\r\n }\r\n if (line instanceof FingerprintLine) {\r\n this.fingerprint = line.fingerprint;\r\n return true;\r\n }\r\n if (line instanceof SetupLine) {\r\n this.setup = line.setup;\r\n return true;\r\n }\r\n if (line instanceof ConnectionLine) {\r\n this.connection = line;\r\n return true;\r\n }\r\n if (line instanceof ContentLine) {\r\n this.content = line;\r\n return true;\r\n }\r\n return this.iceInfo.addLine(line);\r\n }\r\n}\n\nclass ApplicationMediaDescription extends MediaDescription {\r\n constructor(mediaLine) {\r\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\r\n this.fmts = [];\r\n this.fmts = mediaLine.formats;\r\n }\r\n toLines() {\r\n const lines = [];\r\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.fmts));\r\n if (this.connection) {\r\n lines.push(this.connection);\r\n }\r\n if (this.bandwidth) {\r\n lines.push(this.bandwidth);\r\n }\r\n lines.push(...this.iceInfo.toLines());\r\n if (this.fingerprint) {\r\n lines.push(new FingerprintLine(this.fingerprint));\r\n }\r\n if (this.setup) {\r\n lines.push(new SetupLine(this.setup));\r\n }\r\n if (this.mid) {\r\n lines.push(new MidLine(this.mid));\r\n }\r\n if (this.content) {\r\n lines.push(this.content);\r\n }\r\n if (this.sctpPort) {\r\n lines.push(new SctpPortLine(this.sctpPort));\r\n }\r\n if (this.maxMessageSize) {\r\n lines.push(new MaxMessageSizeLine(this.maxMessageSize));\r\n }\r\n lines.push(...this.otherLines);\r\n return lines;\r\n }\r\n addLine(line) {\r\n if (super.addLine(line)) {\r\n return true;\r\n }\r\n if (line instanceof MediaLine) {\r\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\r\n }\r\n if (line instanceof SctpPortLine) {\r\n this.sctpPort = line.port;\r\n return true;\r\n }\r\n if (line instanceof MaxMessageSizeLine) {\r\n this.maxMessageSize = line.maxMessageSize;\r\n return true;\r\n }\r\n this.otherLines.push(line);\r\n return true;\r\n }\r\n}\n\nclass CodecInfo {\r\n constructor(pt) {\r\n this.fmtParams = new Map();\r\n this.feedback = [];\r\n this.pt = pt;\r\n }\r\n addLine(line) {\r\n if (line instanceof RtpMapLine) {\r\n this.name = line.encodingName;\r\n this.clockRate = line.clockRate;\r\n this.encodingParams = line.encodingParams;\r\n return true;\r\n }\r\n if (line instanceof FmtpLine) {\r\n this.fmtParams = new Map([\r\n ...Array.from(this.fmtParams.entries()),\r\n ...Array.from(line.params.entries()),\r\n ]);\r\n if (line.params.has('apt')) {\r\n const apt = line.params.get('apt');\r\n this.primaryCodecPt = parseInt(apt, 10);\r\n }\r\n return true;\r\n }\r\n if (line instanceof RtcpFbLine) {\r\n this.feedback.push(line.feedback);\r\n return true;\r\n }\r\n return false;\r\n }\r\n toLines() {\r\n const lines = [];\r\n lines.push(new RtpMapLine(this.pt, this.name, this.clockRate, this.encodingParams));\r\n this.feedback.forEach((fb) => {\r\n lines.push(new RtcpFbLine(this.pt, fb));\r\n });\r\n if (this.fmtParams.size > 0) {\r\n lines.push(new FmtpLine(this.pt, this.fmtParams));\r\n }\r\n return lines;\r\n }\r\n}\n\nclass AvMediaDescription extends MediaDescription {\r\n constructor(mediaLine) {\r\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\r\n this.pts = [];\r\n this.extMaps = [];\r\n this.rids = [];\r\n this.codecs = new Map();\r\n this.rtcpMux = false;\r\n this.ssrcs = [];\r\n this.ssrcGroups = [];\r\n this.pts = mediaLine.formats.map((fmt) => {\r\n return parseInt(fmt, 10);\r\n });\r\n this.pts.forEach((pt) => this.codecs.set(pt, new CodecInfo(pt)));\r\n }\r\n toLines() {\r\n const lines = [];\r\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.pts.map((pt) => `${pt}`)));\r\n if (this.connection) {\r\n lines.push(this.connection);\r\n }\r\n if (this.bandwidth) {\r\n lines.push(this.bandwidth);\r\n }\r\n lines.push(...this.iceInfo.toLines());\r\n if (this.fingerprint) {\r\n lines.push(new FingerprintLine(this.fingerprint));\r\n }\r\n if (this.setup) {\r\n lines.push(new SetupLine(this.setup));\r\n }\r\n if (this.mid) {\r\n lines.push(new MidLine(this.mid));\r\n }\r\n if (this.rtcpMux) {\r\n lines.push(new RtcpMuxLine());\r\n }\r\n if (this.content) {\r\n lines.push(this.content);\r\n }\r\n this.extMaps.forEach((extMap) => lines.push(extMap));\r\n this.rids.forEach((rid) => lines.push(rid));\r\n if (this.simulcast) {\r\n lines.push(this.simulcast);\r\n }\r\n if (this.direction) {\r\n lines.push(new DirectionLine(this.direction));\r\n }\r\n this.codecs.forEach((codec) => lines.push(...codec.toLines()));\r\n lines.push(...this.ssrcs);\r\n lines.push(...this.ssrcGroups);\r\n lines.push(...this.otherLines);\r\n return lines;\r\n }\r\n addLine(line) {\r\n if (super.addLine(line)) {\r\n return true;\r\n }\r\n if (line instanceof MediaLine) {\r\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\r\n }\r\n if (line instanceof DirectionLine) {\r\n this.direction = line.direction;\r\n return true;\r\n }\r\n if (line instanceof ExtMapLine) {\r\n this.extMaps.push(line);\r\n return true;\r\n }\r\n if (line instanceof RidLine) {\r\n this.rids.push(line);\r\n return true;\r\n }\r\n if (line instanceof RtcpMuxLine) {\r\n this.rtcpMux = true;\r\n return true;\r\n }\r\n if (line instanceof SimulcastLine) {\r\n this.simulcast = line;\r\n return true;\r\n }\r\n if (line instanceof RtpMapLine || line instanceof FmtpLine || line instanceof RtcpFbLine) {\r\n const codec = this.codecs.get(line.payloadType);\r\n if (!codec) {\r\n throw new Error(`Error: got line for unknown codec: ${line.toSdpLine()}`);\r\n }\r\n codec.addLine(line);\r\n return true;\r\n }\r\n if (line instanceof SsrcLine) {\r\n this.ssrcs.push(line);\r\n return true;\r\n }\r\n if (line instanceof SsrcGroupLine) {\r\n this.ssrcGroups.push(line);\r\n return true;\r\n }\r\n this.otherLines.push(line);\r\n return true;\r\n }\r\n getCodecByPt(pt) {\r\n return this.codecs.get(pt);\r\n }\r\n removePt(pt) {\r\n const associatedPts = [...this.codecs.values()]\r\n .filter((ci) => ci.primaryCodecPt === pt)\r\n .map((ci) => ci.pt);\r\n const allPtsToRemove = [pt, ...associatedPts];\r\n allPtsToRemove.forEach((ptToRemove) => {\r\n this.codecs.delete(ptToRemove);\r\n });\r\n this.pts = this.pts.filter((existingPt) => allPtsToRemove.indexOf(existingPt) === -1);\r\n }\r\n}\n\nclass SessionDescription {\r\n constructor() {\r\n this.groups = [];\r\n this.otherLines = [];\r\n }\r\n addLine(line) {\r\n if (line instanceof VersionLine) {\r\n this.version = line;\r\n return true;\r\n }\r\n if (line instanceof OriginLine) {\r\n this.origin = line;\r\n return true;\r\n }\r\n if (line instanceof SessionNameLine) {\r\n this.sessionName = line;\r\n return true;\r\n }\r\n if (line instanceof SessionInformationLine) {\r\n this.information = line;\r\n return true;\r\n }\r\n if (line instanceof TimingLine) {\r\n this.timing = line;\r\n return true;\r\n }\r\n if (line instanceof ConnectionLine) {\r\n this.connection = line;\r\n return true;\r\n }\r\n if (line instanceof BandwidthLine) {\r\n this.bandwidth = line;\r\n return true;\r\n }\r\n if (line instanceof BundleGroupLine) {\r\n this.groups.push(line);\r\n return true;\r\n }\r\n this.otherLines.push(line);\r\n return true;\r\n }\r\n toLines() {\r\n const lines = [];\r\n if (this.version) {\r\n lines.push(this.version);\r\n }\r\n if (this.origin) {\r\n lines.push(this.origin);\r\n }\r\n if (this.sessionName) {\r\n lines.push(this.sessionName);\r\n }\r\n if (this.information) {\r\n lines.push(this.information);\r\n }\r\n if (this.connection) {\r\n lines.push(this.connection);\r\n }\r\n if (this.bandwidth) {\r\n lines.push(this.bandwidth);\r\n }\r\n if (this.timing) {\r\n lines.push(this.timing);\r\n }\r\n if (this.groups) {\r\n lines.push(...this.groups);\r\n }\r\n lines.push(...this.otherLines);\r\n return lines;\r\n }\r\n}\n\nclass Sdp {\r\n constructor() {\r\n this.session = new SessionDescription();\r\n this.media = [];\r\n }\r\n get avMedia() {\r\n return this.media.filter((mi) => mi instanceof AvMediaDescription);\r\n }\r\n toString() {\r\n const lines = [];\r\n lines.push(...this.session.toLines());\r\n this.media.forEach((m) => lines.push(...m.toLines()));\r\n return `${lines.map((l) => l.toSdpLine()).join('\\r\\n')}\\r\\n`;\r\n }\r\n}\n\nclass Grammar {\r\n constructor() {\r\n this.parsers = new Map();\r\n }\r\n addParser(lineType, parser) {\r\n const parsers = this.parsers.get(lineType) || [];\r\n parsers.push(parser);\r\n this.parsers.set(lineType, parsers);\r\n }\r\n getParsers(lineType) {\r\n return this.parsers.get(lineType) || [];\r\n }\r\n}\r\nclass SdpGrammar extends Grammar {\r\n constructor() {\r\n super();\r\n this.addParser('v', VersionLine.fromSdpLine);\r\n this.addParser('o', OriginLine.fromSdpLine);\r\n this.addParser('c', ConnectionLine.fromSdpLine);\r\n this.addParser('i', SessionInformationLine.fromSdpLine);\r\n this.addParser('m', MediaLine.fromSdpLine);\r\n this.addParser('s', SessionNameLine.fromSdpLine);\r\n this.addParser('t', TimingLine.fromSdpLine);\r\n this.addParser('b', BandwidthLine.fromSdpLine);\r\n this.addParser('a', RtpMapLine.fromSdpLine);\r\n this.addParser('a', RtcpFbLine.fromSdpLine);\r\n this.addParser('a', FmtpLine.fromSdpLine);\r\n this.addParser('a', DirectionLine.fromSdpLine);\r\n this.addParser('a', ExtMapLine.fromSdpLine);\r\n this.addParser('a', MidLine.fromSdpLine);\r\n this.addParser('a', IceUfragLine.fromSdpLine);\r\n this.addParser('a', IcePwdLine.fromSdpLine);\r\n this.addParser('a', IceOptionsLine.fromSdpLine);\r\n this.addParser('a', FingerprintLine.fromSdpLine);\r\n this.addParser('a', SetupLine.fromSdpLine);\r\n this.addParser('a', SctpPortLine.fromSdpLine);\r\n this.addParser('a', MaxMessageSizeLine.fromSdpLine);\r\n this.addParser('a', RtcpMuxLine.fromSdpLine);\r\n this.addParser('a', BundleGroupLine.fromSdpLine);\r\n this.addParser('a', ContentLine.fromSdpLine);\r\n this.addParser('a', RidLine.fromSdpLine);\r\n this.addParser('a', CandidateLine.fromSdpLine);\r\n this.addParser('a', SimulcastLine.fromSdpLine);\r\n this.addParser('a', SsrcLine.fromSdpLine);\r\n this.addParser('a', SsrcGroupLine.fromSdpLine);\r\n }\r\n}\r\nconst DefaultSdpGrammar = new SdpGrammar();\r\nfunction isValidLine(line) {\r\n return line.length > 2;\r\n}\r\nfunction parseToModel(lines) {\r\n const sdp = new Sdp();\r\n let currBlock = sdp.session;\r\n lines.forEach((l) => {\r\n if (l instanceof MediaLine) {\r\n let mediaInfo;\r\n if (l.type === 'audio' || l.type === 'video') {\r\n mediaInfo = new AvMediaDescription(l);\r\n }\r\n else if (l.type === 'application') {\r\n mediaInfo = new ApplicationMediaDescription(l);\r\n }\r\n else {\r\n throw new Error(`Unhandled media type: ${l.type}`);\r\n }\r\n sdp.media.push(mediaInfo);\r\n currBlock = mediaInfo;\r\n }\r\n else {\r\n currBlock.addLine(l);\r\n }\r\n });\r\n return sdp;\r\n}\r\nfunction parseToLines(sdp, grammar) {\r\n const lines = [];\r\n sdp\r\n .split(/(\\r\\n|\\r|\\n)/)\r\n .filter(isValidLine)\r\n .forEach((l) => {\r\n const lineType = l[0];\r\n const lineValue = l.slice(2);\r\n const parsers = grammar.getParsers(lineType);\r\n for (const parser of parsers) {\r\n const result = parser(lineValue);\r\n if (result) {\r\n lines.push(result);\r\n return;\r\n }\r\n }\r\n const result = UnknownLine.fromSdpLine(l);\r\n lines.push(result);\r\n });\r\n return lines;\r\n}\r\nfunction parse(sdp, grammar = DefaultSdpGrammar) {\r\n const lines = parseToLines(sdp, grammar);\r\n const parsed = parseToModel(lines);\r\n return parsed;\r\n}\n\nfunction disableRtcpFbValue(sdp, rtcpFbValue) {\r\n sdp.avMedia.forEach((media) => {\r\n media.codecs.forEach((codec) => {\r\n codec.feedback = codec.feedback.filter((fb) => fb !== rtcpFbValue);\r\n });\r\n });\r\n}\r\nfunction disableRemb(sdp) {\r\n disableRtcpFbValue(sdp, 'goog-remb');\r\n}\r\nfunction removeCodec(sdp, codecName) {\r\n sdp.avMedia.forEach((media) => {\r\n const codecInfos = [...media.codecs.entries()].filter(([, ci]) => { var _a; return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase(); });\r\n codecInfos.forEach(([pt]) => media.removePt(pt));\r\n });\r\n}\n\nfunction hasCodec(codecName, mLine) {\r\n return [...mLine.codecs.values()].some((ci) => { var _a; return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase(); });\r\n}\n\nexport { ANY_NON_WS, ApplicationMediaDescription, AvMediaDescription, BandwidthLine, BundleGroupLine, CandidateLine, CodecInfo, ConnectionLine, ContentLine, DefaultSdpGrammar, DirectionLine, ExtMapLine, FingerprintLine, FmtpLine, Grammar, IceInfo, IceOptionsLine, IcePwdLine, IceUfragLine, Line, MaxMessageSizeLine, MediaDescription, MediaLine, MidLine, NUM, OriginLine, REST, RidLine, RtcpFbLine, RtcpMuxLine, RtpMapLine, SDP_TOKEN, SP, SctpPortLine, Sdp, SessionDescription, SessionInformationLine, SessionNameLine, SetupLine, SimulcastLayer, SimulcastLayerList, SimulcastLine, SsrcGroupLine, SsrcLine, TimingLine, VersionLine, WS, disableRemb, disableRtcpFbValue, hasCodec, parse, parseFmtpParams, parseToLines, parseToModel, removeCodec };\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]<u[1][a])return-1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];\"object\"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||\"\"},e}();t.default=i,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];\"string\"==typeof a?(i[t]=a,s+=1):\"object\"==typeof a&&(r[t]=a,n+=1)})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})}));","/**\n * Creates a continuation function with some arguments already applied.\n *\n * Useful as a shorthand when combined with other control flow functions. Any\n * arguments passed to the returned function are added to the arguments\n * originally passed to apply.\n *\n * @name apply\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function you want to eventually apply all\n * arguments to. Invokes with (arguments...).\n * @param {...*} arguments... - Any number of arguments to automatically apply\n * when the continuation is called.\n * @returns {Function} the partially-applied function\n * @example\n *\n * // using apply\n * async.parallel([\n * async.apply(fs.writeFile, 'testfile1', 'test1'),\n * async.apply(fs.writeFile, 'testfile2', 'test2')\n * ]);\n *\n *\n * // the same process without using apply\n * async.parallel([\n * function(callback) {\n * fs.writeFile('testfile1', 'test1', callback);\n * },\n * function(callback) {\n * fs.writeFile('testfile2', 'test2', callback);\n * }\n * ]);\n *\n * // It's possible to pass any number of additional arguments when calling the\n * // continuation:\n *\n * node> var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */\nfunction apply(fn, ...args) {\n return (...callArgs) => fn(...args,...callArgs);\n}\n\nfunction initialParams (fn) {\n return function (...args/*, callback*/) {\n var callback = args.pop();\n return fn.call(this, args, callback);\n };\n}\n\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n return (fn, ...args) => defer(() => fn(...args));\n}\n\nvar _defer;\n\nif (hasQueueMicrotask) {\n _defer = queueMicrotask;\n} else if (hasSetImmediate) {\n _defer = setImmediate;\n} else if (hasNextTick) {\n _defer = process.nextTick;\n} else {\n _defer = fallback;\n}\n\nvar setImmediate$1 = wrap(_defer);\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n if (isAsync(func)) {\n return function (...args/*, callback*/) {\n const callback = args.pop();\n const promise = func.apply(this, args);\n return handlePromise(promise, callback)\n }\n }\n\n return initialParams(function (args, callback) {\n var result;\n try {\n result = func.apply(this, args);\n } catch (e) {\n return callback(e);\n }\n // if result is Promise object\n if (result && typeof result.then === 'function') {\n return handlePromise(result, callback)\n } else {\n callback(null, result);\n }\n });\n}\n\nfunction handlePromise(promise, callback) {\n return promise.then(value => {\n invokeCallback(callback, null, value);\n }, err => {\n invokeCallback(callback, err && err.message ? err : new Error(err));\n });\n}\n\nfunction invokeCallback(callback, error, value) {\n try {\n callback(error, value);\n } catch (err) {\n setImmediate$1(e => { throw e }, err);\n }\n}\n\nfunction isAsync(fn) {\n return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n if (typeof asyncFn !== 'function') throw new Error('expected a function')\n return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n}\n\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify (asyncFn, arity = asyncFn.length) {\n if (!arity) throw new Error('arity is undefined')\n function awaitable (...args) {\n if (typeof args[arity - 1] === 'function') {\n return asyncFn.apply(this, args)\n }\n\n return new Promise((resolve, reject) => {\n args[arity - 1] = (err, ...cbArgs) => {\n if (err) return reject(err)\n resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n };\n asyncFn.apply(this, args);\n })\n }\n\n return awaitable\n}\n\nfunction applyEach (eachfn) {\n return function applyEach(fns, ...callArgs) {\n const go = awaitify(function (callback) {\n var that = this;\n return eachfn(fns, (fn, cb) => {\n wrapAsync(fn).apply(that, callArgs.concat(cb));\n }, callback);\n });\n return go;\n };\n}\n\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n arr = arr || [];\n var results = [];\n var counter = 0;\n var _iteratee = wrapAsync(iteratee);\n\n return eachfn(arr, (value, _, iterCb) => {\n var index = counter++;\n _iteratee(value, (err, v) => {\n results[index] = v;\n iterCb(err);\n });\n }, err => {\n callback(err, results);\n });\n}\n\nfunction isArrayLike(value) {\n return value &&\n typeof value.length === 'number' &&\n value.length >= 0 &&\n value.length % 1 === 0;\n}\n\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nconst breakLoop = {};\n\nfunction once(fn) {\n function wrapper (...args) {\n if (fn === null) return;\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n }\n Object.assign(wrapper, fn);\n return wrapper\n}\n\nfunction getIterator (coll) {\n return coll[Symbol.iterator] && coll[Symbol.iterator]();\n}\n\nfunction createArrayIterator(coll) {\n var i = -1;\n var len = coll.length;\n return function next() {\n return ++i < len ? {value: coll[i], key: i} : null;\n }\n}\n\nfunction createES2015Iterator(iterator) {\n var i = -1;\n return function next() {\n var item = iterator.next();\n if (item.done)\n return null;\n i++;\n return {value: item.value, key: i};\n }\n}\n\nfunction createObjectIterator(obj) {\n var okeys = obj ? Object.keys(obj) : [];\n var i = -1;\n var len = okeys.length;\n return function next() {\n var key = okeys[++i];\n if (key === '__proto__') {\n return next();\n }\n return i < len ? {value: obj[key], key} : null;\n };\n}\n\nfunction createIterator(coll) {\n if (isArrayLike(coll)) {\n return createArrayIterator(coll);\n }\n\n var iterator = getIterator(coll);\n return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\n\nfunction onlyOnce(fn) {\n return function (...args) {\n if (fn === null) throw new Error(\"Callback was already called.\");\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n };\n}\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n let done = false;\n let canceled = false;\n let awaiting = false;\n let running = 0;\n let idx = 0;\n\n function replenish() {\n //console.log('replenish')\n if (running >= limit || awaiting || done) return\n //console.log('replenish awaiting')\n awaiting = true;\n generator.next().then(({value, done: iterDone}) => {\n //console.log('got value', value)\n if (canceled || done) return\n awaiting = false;\n if (iterDone) {\n done = true;\n if (running <= 0) {\n //console.log('done nextCb')\n callback(null);\n }\n return;\n }\n running++;\n iteratee(value, idx, iterateeCallback);\n idx++;\n replenish();\n }).catch(handleError);\n }\n\n function iterateeCallback(err, result) {\n //console.log('iterateeCallback')\n running -= 1;\n if (canceled) return\n if (err) return handleError(err)\n\n if (err === false) {\n done = true;\n canceled = true;\n return\n }\n\n if (result === breakLoop || (done && running <= 0)) {\n done = true;\n //console.log('done iterCb')\n return callback(null);\n }\n replenish();\n }\n\n function handleError(err) {\n if (canceled) return\n awaiting = false;\n done = true;\n callback(err);\n }\n\n replenish();\n}\n\nvar eachOfLimit = (limit) => {\n return (obj, iteratee, callback) => {\n callback = once(callback);\n if (limit <= 0) {\n throw new RangeError('concurrency limit cannot be less than 1')\n }\n if (!obj) {\n return callback(null);\n }\n if (isAsyncGenerator(obj)) {\n return asyncEachOfLimit(obj, limit, iteratee, callback)\n }\n if (isAsyncIterable(obj)) {\n return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback)\n }\n var nextElem = createIterator(obj);\n var done = false;\n var canceled = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n if (canceled) return\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n }\n else if (err === false) {\n done = true;\n canceled = true;\n }\n else if (value === breakLoop || (done && running <= 0)) {\n done = true;\n return callback(null);\n }\n else if (!looping) {\n replenish();\n }\n }\n\n function replenish () {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n};\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfLimit$1(coll, limit, iteratee, callback) {\n return eachOfLimit(limit)(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOfLimit$2 = awaitify(eachOfLimit$1, 4);\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n callback = once(callback);\n var index = 0,\n completed = 0,\n {length} = coll,\n canceled = false;\n if (length === 0) {\n callback(null);\n }\n\n function iteratorCallback(err, value) {\n if (err === false) {\n canceled = true;\n }\n if (canceled === true) return\n if (err) {\n callback(err);\n } else if ((++completed === length) || value === breakLoop) {\n callback(null);\n }\n }\n\n for (; index < length; index++) {\n iteratee(coll[index], index, onlyOnce(iteratorCallback));\n }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nfunction eachOfGeneric (coll, iteratee, callback) {\n return eachOfLimit$2(coll, Infinity, iteratee, callback);\n}\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dev.json is a file containing a valid json object config for dev environment\n * // dev.json is a file containing a valid json object config for test environment\n * // prod.json is a file containing a valid json object config for prod environment\n * // invalid.json is a file with a malformed json object\n *\n * let configs = {}; //global variable\n * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};\n * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};\n *\n * // asynchronous function that reads a json file and parses the contents as json object\n * function parseFile(file, key, callback) {\n * fs.readFile(file, \"utf8\", function(err, data) {\n * if (err) return calback(err);\n * try {\n * configs[key] = JSON.parse(data);\n * } catch (e) {\n * return callback(e);\n * }\n * callback();\n * });\n * }\n *\n * // Using callbacks\n * async.forEachOf(validConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * } else {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * // JSON parse error exception\n * } else {\n * console.log(configs);\n * }\n * });\n *\n * // Using Promises\n * async.forEachOf(validConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n * console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * }).catch( err => {\n * console.error(err);\n * // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.forEachOf(validConfigFileMap, parseFile);\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * //Error handing\n * async () => {\n * try {\n * let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n * console.log(configs);\n * }\n * catch (err) {\n * console.log(err);\n * // JSON parse error exception\n * }\n * }\n *\n */\nfunction eachOf(coll, iteratee, callback) {\n var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n return eachOfImplementation(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOf$1 = awaitify(eachOf, 3);\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callbacks\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array. The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.map(fileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.map(fileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.map(fileList, getFileSizeInBytes);\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.map(withMissingFileList, getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction map (coll, iteratee, callback) {\n return _asyncMap(eachOf$1, coll, iteratee, callback)\n}\nvar map$1 = awaitify(map, 3);\n\n/**\n * Applies the provided arguments to each function in the array, calling\n * `callback` after all functions have completed. If you only provide the first\n * argument, `fns`, then it will return a function which lets you pass in the\n * arguments as if it were a single function call. If more arguments are\n * provided, `callback` is required while `args` is still optional. The results\n * for each of the applied async functions are passed to the final callback\n * as an array.\n *\n * @name applyEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s\n * to all call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - Returns a function that takes no args other than\n * an optional callback, that is the result of applying the `args` to each\n * of the functions.\n * @example\n *\n * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket')\n *\n * appliedFn((err, results) => {\n * // results[0] is the results for `enableSearch`\n * // results[1] is the results for `updateSchema`\n * });\n *\n * // partial application example:\n * async.each(\n * buckets,\n * async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(),\n * callback\n * );\n */\nvar applyEach$1 = applyEach(map$1);\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfSeries(coll, iteratee, callback) {\n return eachOfLimit$2(coll, 1, iteratee, callback)\n}\nvar eachOfSeries$1 = awaitify(eachOfSeries, 3);\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapSeries (coll, iteratee, callback) {\n return _asyncMap(eachOfSeries$1, coll, iteratee, callback)\n}\nvar mapSeries$1 = awaitify(mapSeries, 3);\n\n/**\n * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n *\n * @name applyEachSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all\n * call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - A function, that when called, is the result of\n * appling the `args` to the list of functions. It takes no args, other than\n * a callback.\n */\nvar applyEachSeries = applyEach(mapSeries$1);\n\nconst PROMISE_SYMBOL = Symbol('promiseCallback');\n\nfunction promiseCallback () {\n let resolve, reject;\n function callback (err, ...args) {\n if (err) return reject(err)\n resolve(args.length > 1 ? args : args[0]);\n }\n\n callback[PROMISE_SYMBOL] = new Promise((res, rej) => {\n resolve = res,\n reject = rej;\n });\n\n return callback\n}\n\n/**\n * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on\n * their requirements. Each function can optionally depend on other functions\n * being completed first, and each function is run as soon as its requirements\n * are satisfied.\n *\n * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence\n * will stop. Further tasks will not execute (so any other functions depending\n * on it will not run), and the main `callback` is immediately called with the\n * error.\n *\n * {@link AsyncFunction}s also receive an object containing the results of functions which\n * have completed so far as the first argument, if they have dependencies. If a\n * task function has no dependencies, it will only be passed a callback.\n *\n * @name auto\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object} tasks - An object. Each of its properties is either a\n * function or an array of requirements, with the {@link AsyncFunction} itself the last item\n * in the array. The object's key of a property serves as the name of the task\n * defined by that property, i.e. can be used when specifying requirements for\n * other tasks. The function receives one or two arguments:\n * * a `results` object, containing the results of the previously executed\n * functions, only passed if the task has any dependencies,\n * * a `callback(err, result)` function, which must be called when finished,\n * passing an `error` (which can be `null`) and the result of the function's\n * execution.\n * @param {number} [concurrency=Infinity] - An optional `integer` for\n * determining the maximum number of tasks that can be run in parallel. By\n * default, as many as possible.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback. Results are always returned; however, if an\n * error occurs, no further `tasks` will be performed, and the results object\n * will only contain partial results. Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n * @example\n *\n * //Using Callbacks\n * async.auto({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * }, function(err, results) {\n * if (err) {\n * console.log('err = ', err);\n * }\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * });\n *\n * //Using Promises\n * async.auto({\n * get_data: function(callback) {\n * console.log('in get_data');\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * console.log('in make_folder');\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * }).then(results => {\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * }).catch(err => {\n * console.log('err = ', err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.auto({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * });\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction auto(tasks, concurrency, callback) {\n if (typeof concurrency !== 'number') {\n // concurrency is optional, shift the args.\n callback = concurrency;\n concurrency = null;\n }\n callback = once(callback || promiseCallback());\n var numTasks = Object.keys(tasks).length;\n if (!numTasks) {\n return callback(null);\n }\n if (!concurrency) {\n concurrency = numTasks;\n }\n\n var results = {};\n var runningTasks = 0;\n var canceled = false;\n var hasError = false;\n\n var listeners = Object.create(null);\n\n var readyTasks = [];\n\n // for cycle detection:\n var readyToCheck = []; // tasks that have been identified as reachable\n // without the possibility of returning to an ancestor task\n var uncheckedDependencies = {};\n\n Object.keys(tasks).forEach(key => {\n var task = tasks[key];\n if (!Array.isArray(task)) {\n // no dependencies\n enqueueTask(key, [task]);\n readyToCheck.push(key);\n return;\n }\n\n var dependencies = task.slice(0, task.length - 1);\n var remainingDependencies = dependencies.length;\n if (remainingDependencies === 0) {\n enqueueTask(key, task);\n readyToCheck.push(key);\n return;\n }\n uncheckedDependencies[key] = remainingDependencies;\n\n dependencies.forEach(dependencyName => {\n if (!tasks[dependencyName]) {\n throw new Error('async.auto task `' + key +\n '` has a non-existent dependency `' +\n dependencyName + '` in ' +\n dependencies.join(', '));\n }\n addListener(dependencyName, () => {\n remainingDependencies--;\n if (remainingDependencies === 0) {\n enqueueTask(key, task);\n }\n });\n });\n });\n\n checkForDeadlocks();\n processQueue();\n\n function enqueueTask(key, task) {\n readyTasks.push(() => runTask(key, task));\n }\n\n function processQueue() {\n if (canceled) return\n if (readyTasks.length === 0 && runningTasks === 0) {\n return callback(null, results);\n }\n while(readyTasks.length && runningTasks < concurrency) {\n var run = readyTasks.shift();\n run();\n }\n\n }\n\n function addListener(taskName, fn) {\n var taskListeners = listeners[taskName];\n if (!taskListeners) {\n taskListeners = listeners[taskName] = [];\n }\n\n taskListeners.push(fn);\n }\n\n function taskComplete(taskName) {\n var taskListeners = listeners[taskName] || [];\n taskListeners.forEach(fn => fn());\n processQueue();\n }\n\n\n function runTask(key, task) {\n if (hasError) return;\n\n var taskCallback = onlyOnce((err, ...result) => {\n runningTasks--;\n if (err === false) {\n canceled = true;\n return\n }\n if (result.length < 2) {\n [result] = result;\n }\n if (err) {\n var safeResults = {};\n Object.keys(results).forEach(rkey => {\n safeResults[rkey] = results[rkey];\n });\n safeResults[key] = result;\n hasError = true;\n listeners = Object.create(null);\n if (canceled) return\n callback(err, safeResults);\n } else {\n results[key] = result;\n taskComplete(key);\n }\n });\n\n runningTasks++;\n var taskFn = wrapAsync(task[task.length - 1]);\n if (task.length > 1) {\n taskFn(results, taskCallback);\n } else {\n taskFn(taskCallback);\n }\n }\n\n function checkForDeadlocks() {\n // Kahn's algorithm\n // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n var currentTask;\n var counter = 0;\n while (readyToCheck.length) {\n currentTask = readyToCheck.pop();\n counter++;\n getDependents(currentTask).forEach(dependent => {\n if (--uncheckedDependencies[dependent] === 0) {\n readyToCheck.push(dependent);\n }\n });\n }\n\n if (counter !== numTasks) {\n throw new Error(\n 'async.auto cannot execute tasks due to a recursive dependency'\n );\n }\n }\n\n function getDependents(taskName) {\n var result = [];\n Object.keys(tasks).forEach(key => {\n const task = tasks[key];\n if (Array.isArray(task) && task.indexOf(taskName) >= 0) {\n result.push(key);\n }\n });\n return result;\n }\n\n return callback[PROMISE_SYMBOL]\n}\n\nvar FN_ARGS = /^(?:async\\s+)?(?:function)?\\s*\\w*\\s*\\(\\s*([^)]+)\\s*\\)(?:\\s*{)/;\nvar ARROW_FN_ARGS = /^(?:async\\s+)?\\(?\\s*([^)=]+)\\s*\\)?(?:\\s*=>)/;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /(=.+)?(\\s*)$/;\n\nfunction stripComments(string) {\n let stripped = '';\n let index = 0;\n let endBlockComment = string.indexOf('*/');\n while (index < string.length) {\n if (string[index] === '/' && string[index+1] === '/') {\n // inline comment\n let endIndex = string.indexOf('\\n', index);\n index = (endIndex === -1) ? string.length : endIndex;\n } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {\n // block comment\n let endIndex = string.indexOf('*/', index);\n if (endIndex !== -1) {\n index = endIndex + 2;\n endBlockComment = string.indexOf('*/', index);\n } else {\n stripped += string[index];\n index++;\n }\n } else {\n stripped += string[index];\n index++;\n }\n }\n return stripped;\n}\n\nfunction parseParams(func) {\n const src = stripComments(func.toString());\n let match = src.match(FN_ARGS);\n if (!match) {\n match = src.match(ARROW_FN_ARGS);\n }\n if (!match) throw new Error('could not parse args in autoInject\\nSource:\\n' + src)\n let [, args] = match;\n return args\n .replace(/\\s/g, '')\n .split(FN_ARG_SPLIT)\n .map((arg) => arg.replace(FN_ARG, '').trim());\n}\n\n/**\n * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n * tasks are specified as parameters to the function, after the usual callback\n * parameter, with the parameter names matching the names of the tasks it\n * depends on. This can provide even more readable task graphs which can be\n * easier to maintain.\n *\n * If a final callback is specified, the task results are similarly injected,\n * specified as named parameters after the initial error parameter.\n *\n * The autoInject function is purely syntactic sugar and its semantics are\n * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n *\n * @name autoInject\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.auto]{@link module:ControlFlow.auto}\n * @category Control Flow\n * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of\n * the form 'func([dependencies...], callback). The object's key of a property\n * serves as the name of the task defined by that property, i.e. can be used\n * when specifying requirements for other tasks.\n * * The `callback` parameter is a `callback(err, result)` which must be called\n * when finished, passing an `error` (which can be `null`) and the result of\n * the function's execution. The remaining parameters name other tasks on\n * which the task is dependent, and the results from those tasks are the\n * arguments of those parameters.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback, and a `results` object with any completed\n * task results, similar to `auto`.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // The example from `auto` can be rewritten as follows:\n * async.autoInject({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: function(get_data, make_folder, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * },\n * email_link: function(write_file, callback) {\n * // once the file is written let's email a link to it...\n * // write_file contains the filename returned by write_file.\n * callback(null, {'file':write_file, 'email':'user@example.com'});\n * }\n * }, function(err, results) {\n * console.log('err = ', err);\n * console.log('email_link = ', results.email_link);\n * });\n *\n * // If you are using a JS minifier that mangles parameter names, `autoInject`\n * // will not work with plain functions, since the parameter names will be\n * // collapsed to a single letter identifier. To work around this, you can\n * // explicitly specify the names of the parameters your task function needs\n * // in an array, similar to Angular.js dependency injection.\n *\n * // This still has an advantage over plain `auto`, since the results a task\n * // depends on are still spread into arguments.\n * async.autoInject({\n * //...\n * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(write_file, callback) {\n * callback(null, {'file':write_file, 'email':'user@example.com'});\n * }]\n * //...\n * }, function(err, results) {\n * console.log('err = ', err);\n * console.log('email_link = ', results.email_link);\n * });\n */\nfunction autoInject(tasks, callback) {\n var newTasks = {};\n\n Object.keys(tasks).forEach(key => {\n var taskFn = tasks[key];\n var params;\n var fnIsAsync = isAsync(taskFn);\n var hasNoDeps =\n (!fnIsAsync && taskFn.length === 1) ||\n (fnIsAsync && taskFn.length === 0);\n\n if (Array.isArray(taskFn)) {\n params = [...taskFn];\n taskFn = params.pop();\n\n newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n } else if (hasNoDeps) {\n // no dependencies, use the function as-is\n newTasks[key] = taskFn;\n } else {\n params = parseParams(taskFn);\n if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) {\n throw new Error(\"autoInject task functions require explicit parameters.\");\n }\n\n // remove callback param\n if (!fnIsAsync) params.pop();\n\n newTasks[key] = params.concat(newTask);\n }\n\n function newTask(results, taskCb) {\n var newArgs = params.map(name => results[name]);\n newArgs.push(taskCb);\n wrapAsync(taskFn)(...newArgs);\n }\n });\n\n return auto(newTasks, callback);\n}\n\n// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nclass DLL {\n constructor() {\n this.head = this.tail = null;\n this.length = 0;\n }\n\n removeLink(node) {\n if (node.prev) node.prev.next = node.next;\n else this.head = node.next;\n if (node.next) node.next.prev = node.prev;\n else this.tail = node.prev;\n\n node.prev = node.next = null;\n this.length -= 1;\n return node;\n }\n\n empty () {\n while(this.head) this.shift();\n return this;\n }\n\n insertAfter(node, newNode) {\n newNode.prev = node;\n newNode.next = node.next;\n if (node.next) node.next.prev = newNode;\n else this.tail = newNode;\n node.next = newNode;\n this.length += 1;\n }\n\n insertBefore(node, newNode) {\n newNode.prev = node.prev;\n newNode.next = node;\n if (node.prev) node.prev.next = newNode;\n else this.head = newNode;\n node.prev = newNode;\n this.length += 1;\n }\n\n unshift(node) {\n if (this.head) this.insertBefore(this.head, node);\n else setInitial(this, node);\n }\n\n push(node) {\n if (this.tail) this.insertAfter(this.tail, node);\n else setInitial(this, node);\n }\n\n shift() {\n return this.head && this.removeLink(this.head);\n }\n\n pop() {\n return this.tail && this.removeLink(this.tail);\n }\n\n toArray() {\n return [...this]\n }\n\n *[Symbol.iterator] () {\n var cur = this.head;\n while (cur) {\n yield cur.data;\n cur = cur.next;\n }\n }\n\n remove (testFn) {\n var curr = this.head;\n while(curr) {\n var {next} = curr;\n if (testFn(curr)) {\n this.removeLink(curr);\n }\n curr = next;\n }\n return this;\n }\n}\n\nfunction setInitial(dll, node) {\n dll.length = 1;\n dll.head = dll.tail = node;\n}\n\nfunction queue(worker, concurrency, payload) {\n if (concurrency == null) {\n concurrency = 1;\n }\n else if(concurrency === 0) {\n throw new RangeError('Concurrency must not be zero');\n }\n\n var _worker = wrapAsync(worker);\n var numRunning = 0;\n var workersList = [];\n const events = {\n error: [],\n drain: [],\n saturated: [],\n unsaturated: [],\n empty: []\n };\n\n function on (event, handler) {\n events[event].push(handler);\n }\n\n function once (event, handler) {\n const handleAndRemove = (...args) => {\n off(event, handleAndRemove);\n handler(...args);\n };\n events[event].push(handleAndRemove);\n }\n\n function off (event, handler) {\n if (!event) return Object.keys(events).forEach(ev => events[ev] = [])\n if (!handler) return events[event] = []\n events[event] = events[event].filter(ev => ev !== handler);\n }\n\n function trigger (event, ...args) {\n events[event].forEach(handler => handler(...args));\n }\n\n var processingScheduled = false;\n function _insert(data, insertAtFront, rejectOnError, callback) {\n if (callback != null && typeof callback !== 'function') {\n throw new Error('task callback must be a function');\n }\n q.started = true;\n\n var res, rej;\n function promiseCallback (err, ...args) {\n // we don't care about the error, let the global error handler\n // deal with it\n if (err) return rejectOnError ? rej(err) : res()\n if (args.length <= 1) return res(args[0])\n res(args);\n }\n\n var item = q._createTaskItem(\n data,\n rejectOnError ? promiseCallback :\n (callback || promiseCallback)\n );\n\n if (insertAtFront) {\n q._tasks.unshift(item);\n } else {\n q._tasks.push(item);\n }\n\n if (!processingScheduled) {\n processingScheduled = true;\n setImmediate$1(() => {\n processingScheduled = false;\n q.process();\n });\n }\n\n if (rejectOnError || !callback) {\n return new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n })\n }\n }\n\n function _createCB(tasks) {\n return function (err, ...args) {\n numRunning -= 1;\n\n for (var i = 0, l = tasks.length; i < l; i++) {\n var task = tasks[i];\n\n var index = workersList.indexOf(task);\n if (index === 0) {\n workersList.shift();\n } else if (index > 0) {\n workersList.splice(index, 1);\n }\n\n task.callback(err, ...args);\n\n if (err != null) {\n trigger('error', err, task.data);\n }\n }\n\n if (numRunning <= (q.concurrency - q.buffer) ) {\n trigger('unsaturated');\n }\n\n if (q.idle()) {\n trigger('drain');\n }\n q.process();\n };\n }\n\n function _maybeDrain(data) {\n if (data.length === 0 && q.idle()) {\n // call drain immediately if there are no tasks\n setImmediate$1(() => trigger('drain'));\n return true\n }\n return false\n }\n\n const eventMethod = (name) => (handler) => {\n if (!handler) {\n return new Promise((resolve, reject) => {\n once(name, (err, data) => {\n if (err) return reject(err)\n resolve(data);\n });\n })\n }\n off(name);\n on(name, handler);\n\n };\n\n var isProcessing = false;\n var q = {\n _tasks: new DLL(),\n _createTaskItem (data, callback) {\n return {\n data,\n callback\n };\n },\n *[Symbol.iterator] () {\n yield* q._tasks[Symbol.iterator]();\n },\n concurrency,\n payload,\n buffer: concurrency / 4,\n started: false,\n paused: false,\n push (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, false, false, callback))\n }\n return _insert(data, false, false, callback);\n },\n pushAsync (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, false, true, callback))\n }\n return _insert(data, false, true, callback);\n },\n kill () {\n off();\n q._tasks.empty();\n },\n unshift (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, true, false, callback))\n }\n return _insert(data, true, false, callback);\n },\n unshiftAsync (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, true, true, callback))\n }\n return _insert(data, true, true, callback);\n },\n remove (testFn) {\n q._tasks.remove(testFn);\n },\n process () {\n // Avoid trying to start too many processing operations. This can occur\n // when callbacks resolve synchronously (#1267).\n if (isProcessing) {\n return;\n }\n isProcessing = true;\n while(!q.paused && numRunning < q.concurrency && q._tasks.length){\n var tasks = [], data = [];\n var l = q._tasks.length;\n if (q.payload) l = Math.min(l, q.payload);\n for (var i = 0; i < l; i++) {\n var node = q._tasks.shift();\n tasks.push(node);\n workersList.push(node);\n data.push(node.data);\n }\n\n numRunning += 1;\n\n if (q._tasks.length === 0) {\n trigger('empty');\n }\n\n if (numRunning === q.concurrency) {\n trigger('saturated');\n }\n\n var cb = onlyOnce(_createCB(tasks));\n _worker(data, cb);\n }\n isProcessing = false;\n },\n length () {\n return q._tasks.length;\n },\n running () {\n return numRunning;\n },\n workersList () {\n return workersList;\n },\n idle() {\n return q._tasks.length + numRunning === 0;\n },\n pause () {\n q.paused = true;\n },\n resume () {\n if (q.paused === false) { return; }\n q.paused = false;\n setImmediate$1(q.process);\n }\n };\n // define these as fixed properties, so people get useful errors when updating\n Object.defineProperties(q, {\n saturated: {\n writable: false,\n value: eventMethod('saturated')\n },\n unsaturated: {\n writable: false,\n value: eventMethod('unsaturated')\n },\n empty: {\n writable: false,\n value: eventMethod('empty')\n },\n drain: {\n writable: false,\n value: eventMethod('drain')\n },\n error: {\n writable: false,\n value: eventMethod('error')\n },\n });\n return q;\n}\n\n/**\n * Creates a `cargo` object with the specified payload. Tasks added to the\n * cargo will be processed altogether (up to the `payload` limit). If the\n * `worker` is in progress, the task is queued until it becomes available. Once\n * the `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, cargo passes an array of tasks to a single worker, repeating\n * when the worker is finished.\n *\n * @name cargo\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargo and inner queue.\n * @example\n *\n * // create a cargo object with payload 2\n * var cargo = async.cargo(function(tasks, callback) {\n * for (var i=0; i<tasks.length; i++) {\n * console.log('hello ' + tasks[i].name);\n * }\n * callback();\n * }, 2);\n *\n * // add some items\n * cargo.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * cargo.push({name: 'bar'}, function(err) {\n * console.log('finished processing bar');\n * });\n * await cargo.push({name: 'baz'});\n * console.log('finished processing baz');\n */\nfunction cargo(worker, payload) {\n return queue(worker, 1, payload);\n}\n\n/**\n * Creates a `cargoQueue` object with the specified payload. Tasks added to the\n * cargoQueue will be processed together (up to the `payload` limit) in `concurrency` parallel workers.\n * If the all `workers` are in progress, the task is queued until one becomes available. Once\n * a `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, and [`cargo`]{@link module:ControlFlow.cargo} passes an array of tasks to a single worker,\n * the cargoQueue passes an array of tasks to multiple parallel workers.\n *\n * @name cargoQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @see [async.cargo]{@link module:ControlFLow.cargo}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargoQueue object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargoQueue and inner queue.\n * @example\n *\n * // create a cargoQueue object with payload 2 and concurrency 2\n * var cargoQueue = async.cargoQueue(function(tasks, callback) {\n * for (var i=0; i<tasks.length; i++) {\n * console.log('hello ' + tasks[i].name);\n * }\n * callback();\n * }, 2, 2);\n *\n * // add some items\n * cargoQueue.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * cargoQueue.push({name: 'bar'}, function(err) {\n * console.log('finished processing bar');\n * });\n * cargoQueue.push({name: 'baz'}, function(err) {\n * console.log('finished processing baz');\n * });\n * cargoQueue.push({name: 'boo'}, function(err) {\n * console.log('finished processing boo');\n * });\n */\nfunction cargo$1(worker, concurrency, payload) {\n return queue(worker, concurrency, payload);\n}\n\n/**\n * Reduces `coll` into a single value using an async `iteratee` to return each\n * successive step. `memo` is the initial state of the reduction. This function\n * only operates in series.\n *\n * For performance reasons, it may make sense to split a call to this function\n * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n * results. This function is for situations where each step in the reduction\n * needs to be async; if you can get the data before reducing it, then it's\n * probably a good idea to do so.\n *\n * @name reduce\n * @static\n * @memberOf module:Collections\n * @method\n * @alias inject\n * @alias foldl\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt'];\n *\n * // asynchronous function that computes the file size in bytes\n * // file size is added to the memoized value, then returned\n * function getFileSizeInBytes(memo, file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, memo + stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(result);\n * }\n * });\n *\n * // Using Promises\n * async.reduce(fileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction reduce(coll, memo, iteratee, callback) {\n callback = once(callback);\n var _iteratee = wrapAsync(iteratee);\n return eachOfSeries$1(coll, (x, i, iterCb) => {\n _iteratee(memo, x, (err, v) => {\n memo = v;\n iterCb(err);\n });\n }, err => callback(err, memo));\n}\nvar reduce$1 = awaitify(reduce, 4);\n\n/**\n * Version of the compose function that is more natural to read. Each function\n * consumes the return value of the previous function. It is the equivalent of\n * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name seq\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.compose]{@link module:ControlFlow.compose}\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} a function that composes the `functions` in order\n * @example\n *\n * // Requires lodash (or underscore), express3 and dresende's orm2.\n * // Part of an app, that fetches cats of the logged user.\n * // This example uses `seq` function to avoid overnesting and error\n * // handling clutter.\n * app.get('/cats', function(request, response) {\n * var User = request.models.User;\n * async.seq(\n * User.get.bind(User), // 'User.get' has signature (id, callback(err, data))\n * function(user, fn) {\n * user.getCats(fn); // 'getCats' has signature (callback(err, data))\n * }\n * )(req.session.user_id, function (err, cats) {\n * if (err) {\n * console.error(err);\n * response.json({ status: 'error', message: err.message });\n * } else {\n * response.json({ status: 'ok', message: 'Cats found', data: cats });\n * }\n * });\n * });\n */\nfunction seq(...functions) {\n var _functions = functions.map(wrapAsync);\n return function (...args) {\n var that = this;\n\n var cb = args[args.length - 1];\n if (typeof cb == 'function') {\n args.pop();\n } else {\n cb = promiseCallback();\n }\n\n reduce$1(_functions, args, (newargs, fn, iterCb) => {\n fn.apply(that, newargs.concat((err, ...nextargs) => {\n iterCb(err, nextargs);\n }));\n },\n (err, results) => cb(err, ...results));\n\n return cb[PROMISE_SYMBOL]\n };\n}\n\n/**\n * Creates a function which is a composition of the passed asynchronous\n * functions. Each function consumes the return value of the function that\n * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n *\n * If the last argument to the composed function is not a function, a promise\n * is returned when you call it.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name compose\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} an asynchronous function that is the composed\n * asynchronous `functions`\n * @example\n *\n * function add1(n, callback) {\n * setTimeout(function () {\n * callback(null, n + 1);\n * }, 10);\n * }\n *\n * function mul3(n, callback) {\n * setTimeout(function () {\n * callback(null, n * 3);\n * }, 10);\n * }\n *\n * var add1mul3 = async.compose(mul3, add1);\n * add1mul3(4, function (err, result) {\n * // result now equals 15\n * });\n */\nfunction compose(...args) {\n return seq(...args.reverse());\n}\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapLimit (coll, limit, iteratee, callback) {\n return _asyncMap(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar mapLimit$1 = awaitify(mapLimit, 4);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapLimit\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatLimit(coll, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(coll, limit, (val, iterCb) => {\n _iteratee(val, (err, ...args) => {\n if (err) return iterCb(err);\n return iterCb(err, args);\n });\n }, (err, mapResults) => {\n var result = [];\n for (var i = 0; i < mapResults.length; i++) {\n if (mapResults[i]) {\n result = result.concat(...mapResults[i]);\n }\n }\n\n return callback(err, result);\n });\n}\nvar concatLimit$1 = awaitify(concatLimit, 4);\n\n/**\n * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n * the concatenated list. The `iteratee`s are called in parallel, and the\n * results are concatenated as they return. The results array will be returned in\n * the original order of `coll` passed to the `iteratee` function.\n *\n * @name concat\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @alias flatMap\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * let directoryList = ['dir1','dir2','dir3'];\n * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4'];\n *\n * // Using callbacks\n * async.concat(directoryList, fs.readdir, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.concat(directoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * }).catch(err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.concat(directoryList, fs.readdir);\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * } catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.concat(withMissingDirectoryList, fs.readdir);\n * console.log(results);\n * } catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * }\n * }\n *\n */\nfunction concat(coll, iteratee, callback) {\n return concatLimit$1(coll, Infinity, iteratee, callback)\n}\nvar concat$1 = awaitify(concat, 3);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapSeries\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatSeries(coll, iteratee, callback) {\n return concatLimit$1(coll, 1, iteratee, callback)\n}\nvar concatSeries$1 = awaitify(concatSeries, 3);\n\n/**\n * Returns a function that when called, calls-back with the values provided.\n * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n * [`auto`]{@link module:ControlFlow.auto}.\n *\n * @name constant\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {...*} arguments... - Any number of arguments to automatically invoke\n * callback with.\n * @returns {AsyncFunction} Returns a function that when invoked, automatically\n * invokes the callback with the previous given arguments.\n * @example\n *\n * async.waterfall([\n * async.constant(42),\n * function (value, next) {\n * // value === 42\n * },\n * //...\n * ], callback);\n *\n * async.waterfall([\n * async.constant(filename, \"utf8\"),\n * fs.readFile,\n * function (fileData, next) {\n * //...\n * }\n * //...\n * ], callback);\n *\n * async.auto({\n * hostname: async.constant(\"https://server.net/\"),\n * port: findFreePort,\n * launchServer: [\"hostname\", \"port\", function (options, cb) {\n * startServer(options, cb);\n * }],\n * //...\n * }, callback);\n */\nfunction constant(...args) {\n return function (...ignoredArgs/*, callback*/) {\n var callback = ignoredArgs.pop();\n return callback(null, ...args);\n };\n}\n\nfunction _createTester(check, getResult) {\n return (eachfn, arr, _iteratee, cb) => {\n var testPassed = false;\n var testResult;\n const iteratee = wrapAsync(_iteratee);\n eachfn(arr, (value, _, callback) => {\n iteratee(value, (err, result) => {\n if (err || err === false) return callback(err);\n\n if (check(result) && !testResult) {\n testPassed = true;\n testResult = getResult(true, value);\n return callback(null, breakLoop);\n }\n callback();\n });\n }, err => {\n if (err) return cb(err);\n cb(null, testPassed ? testResult : getResult(false));\n });\n };\n}\n\n/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }\n *);\n *\n * // Using Promises\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n * .then(result => {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the file in the list that exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction detect(coll, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback)\n}\nvar detect$1 = awaitify(detect, 3);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectLimit(coll, limit, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar detectLimit$1 = awaitify(detectLimit, 4);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectSeries(coll, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOfLimit(1), coll, iteratee, callback)\n}\n\nvar detectSeries$1 = awaitify(detectSeries, 3);\n\nfunction consoleFunc(name) {\n return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => {\n /* istanbul ignore else */\n if (typeof console === 'object') {\n /* istanbul ignore else */\n if (err) {\n /* istanbul ignore else */\n if (console.error) {\n console.error(err);\n }\n } else if (console[name]) { /* istanbul ignore else */\n resultArgs.forEach(x => console[name](x));\n }\n }\n })\n}\n\n/**\n * Logs the result of an [`async` function]{@link AsyncFunction} to the\n * `console` using `console.dir` to display the properties of the resulting object.\n * Only works in Node.js or in browsers that support `console.dir` and\n * `console.error` (such as FF and Chrome).\n * If multiple arguments are returned from the async function,\n * `console.dir` is called on each argument in order.\n *\n * @name dir\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n * setTimeout(function() {\n * callback(null, {hello: name});\n * }, 1000);\n * };\n *\n * // in the node repl\n * node> async.dir(hello, 'world');\n * {hello: 'world'}\n */\nvar dir = consoleFunc('dir');\n\n/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doWhilst(iteratee, test, callback) {\n callback = onlyOnce(callback);\n var _fn = wrapAsync(iteratee);\n var _test = wrapAsync(test);\n var results;\n\n function next(err, ...args) {\n if (err) return callback(err);\n if (err === false) return;\n results = args;\n _test(...args, check);\n }\n\n function check(err, truth) {\n if (err) return callback(err);\n if (err === false) return;\n if (!truth) return callback(null, ...results);\n _fn(next);\n }\n\n return check(null, true);\n}\n\nvar doWhilst$1 = awaitify(doWhilst, 3);\n\n/**\n * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n * argument ordering differs from `until`.\n *\n * @name doUntil\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doUntil(iteratee, test, callback) {\n const _test = wrapAsync(test);\n return doWhilst$1(iteratee, (...args) => {\n const cb = args.pop();\n _test(...args, (err, truth) => cb (err, !truth));\n }, callback);\n}\n\nfunction _withoutIndex(iteratee) {\n return (value, index, callback) => iteratee(value, callback);\n}\n\n/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n *\n * // asynchronous function that deletes a file\n * const deleteFile = function(file, callback) {\n * fs.unlink(file, callback);\n * };\n *\n * // Using callbacks\n * async.each(fileList, deleteFile, function(err) {\n * if( err ) {\n * console.log(err);\n * } else {\n * console.log('All files have been deleted successfully');\n * }\n * });\n *\n * // Error Handling\n * async.each(withMissingFileList, deleteFile, function(err){\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using Promises\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * await async.each(files, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * await async.each(withMissingFileList, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * }\n * }\n *\n */\nfunction eachLimit(coll, iteratee, callback) {\n return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\n\nvar each = awaitify(eachLimit, 3);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachLimit$1(coll, limit, iteratee, callback) {\n return eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\nvar eachLimit$2 = awaitify(eachLimit$1, 4);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachSeries(coll, iteratee, callback) {\n return eachLimit$2(coll, 1, iteratee, callback)\n}\nvar eachSeries$1 = awaitify(eachSeries, 3);\n\n/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop. If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n * if (cache[arg]) {\n * return callback(null, cache[arg]); // this would be synchronous!!\n * } else {\n * doSomeIO(arg, callback); // this IO would be asynchronous\n * }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */\nfunction ensureAsync(fn) {\n if (isAsync(fn)) return fn;\n return function (...args/*, callback*/) {\n var callback = args.pop();\n var sync = true;\n args.push((...innerArgs) => {\n if (sync) {\n setImmediate$1(() => callback(...innerArgs));\n } else {\n callback(...innerArgs);\n }\n });\n fn.apply(this, args);\n sync = false;\n };\n}\n\n/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.every(fileList, fileExists, function(err, result) {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * });\n *\n * async.every(withMissingFileList, fileExists, function(err, result) {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * });\n *\n * // Using Promises\n * async.every(fileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.every(withMissingFileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.every(fileList, fileExists);\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.every(withMissingFileList, fileExists);\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction every(coll, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback)\n}\nvar every$1 = awaitify(every, 3);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everyLimit(coll, limit, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar everyLimit$1 = awaitify(everyLimit, 4);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everySeries(coll, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar everySeries$1 = awaitify(everySeries, 3);\n\nfunction filterArray(eachfn, arr, iteratee, callback) {\n var truthValues = new Array(arr.length);\n eachfn(arr, (x, index, iterCb) => {\n iteratee(x, (err, v) => {\n truthValues[index] = !!v;\n iterCb(err);\n });\n }, err => {\n if (err) return callback(err);\n var results = [];\n for (var i = 0; i < arr.length; i++) {\n if (truthValues[i]) results.push(arr[i]);\n }\n callback(null, results);\n });\n}\n\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n var results = [];\n eachfn(coll, (x, index, iterCb) => {\n iteratee(x, (err, v) => {\n if (err) return iterCb(err);\n if (v) {\n results.push({index, value: x});\n }\n iterCb(err);\n });\n }, err => {\n if (err) return callback(err);\n callback(null, results\n .sort((a, b) => a.index - b.index)\n .map(v => v.value));\n });\n}\n\nfunction _filter(eachfn, coll, iteratee, callback) {\n var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n return filter(eachfn, coll, wrapAsync(iteratee), callback);\n}\n\n/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.filter(files, fileExists, function(err, results) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * });\n *\n * // Using Promises\n * async.filter(files, fileExists)\n * .then(results => {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.filter(files, fileExists);\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction filter (coll, iteratee, callback) {\n return _filter(eachOf$1, coll, iteratee, callback)\n}\nvar filter$1 = awaitify(filter, 3);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterLimit (coll, limit, iteratee, callback) {\n return _filter(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar filterLimit$1 = awaitify(filterLimit, 4);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterSeries (coll, iteratee, callback) {\n return _filter(eachOfSeries$1, coll, iteratee, callback)\n}\nvar filterSeries$1 = awaitify(filterSeries, 3);\n\n/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @returns {Promise} a promise that rejects if an error occurs and an errback\n * is not passed\n * @example\n *\n * async.forever(\n * function(next) {\n * // next is suitable for passing to things that need a callback(err [, whatever]);\n * // it will result in this function being called again.\n * },\n * function(err) {\n * // if next is called with a value in its first parameter, it will appear\n * // in here as 'err', and execution will stop.\n * }\n * );\n */\nfunction forever(fn, errback) {\n var done = onlyOnce(errback);\n var task = wrapAsync(ensureAsync(fn));\n\n function next(err) {\n if (err) return done(err);\n if (err === false) return;\n task(next);\n }\n return next();\n}\nvar forever$1 = awaitify(forever, 2);\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupByLimit(coll, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(coll, limit, (val, iterCb) => {\n _iteratee(val, (err, key) => {\n if (err) return iterCb(err);\n return iterCb(err, {key, val});\n });\n }, (err, mapResults) => {\n var result = {};\n // from MDN, handle object having an `hasOwnProperty` prop\n var {hasOwnProperty} = Object.prototype;\n\n for (var i = 0; i < mapResults.length; i++) {\n if (mapResults[i]) {\n var {key} = mapResults[i];\n var {val} = mapResults[i];\n\n if (hasOwnProperty.call(result, key)) {\n result[key].push(val);\n } else {\n result[key] = [val];\n }\n }\n }\n\n return callback(err, result);\n });\n}\n\nvar groupByLimit$1 = awaitify(groupByLimit, 4);\n\n/**\n * Returns a new object, where each value corresponds to an array of items, from\n * `coll`, that returned the corresponding key. That is, the keys of the object\n * correspond to the values passed to the `iteratee` callback.\n *\n * Note: Since this function applies the `iteratee` to each item in parallel,\n * there is no guarantee that the `iteratee` functions will complete in order.\n * However, the values for each key in the `result` will be in the same order as\n * the original `coll`. For Objects, the values will roughly be in the order of\n * the original Objects' keys (but this can vary across JavaScript engines).\n *\n * @name groupBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const files = ['dir1/file1.txt','dir2','dir4']\n *\n * // asynchronous function that detects file type as none, file, or directory\n * function detectFile(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(null, 'none');\n * }\n * callback(null, stat.isDirectory() ? 'directory' : 'file');\n * });\n * }\n *\n * //Using callbacks\n * async.groupBy(files, detectFile, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n *\t console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }\n * });\n *\n * // Using Promises\n * async.groupBy(files, detectFile)\n * .then( result => {\n * console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.groupBy(files, detectFile);\n * console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction groupBy (coll, iteratee, callback) {\n return groupByLimit$1(coll, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n *\n * @name groupBySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whose\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupBySeries (coll, iteratee, callback) {\n return groupByLimit$1(coll, 1, iteratee, callback)\n}\n\n/**\n * Logs the result of an `async` function to the `console`. Only works in\n * Node.js or in browsers that support `console.log` and `console.error` (such\n * as FF and Chrome). If multiple arguments are returned from the async\n * function, `console.log` is called on each argument in order.\n *\n * @name log\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n * setTimeout(function() {\n * callback(null, 'hello ' + name);\n * }, 1000);\n * };\n *\n * // in the node repl\n * node> async.log(hello, 'world');\n * 'hello world'\n */\nvar log = consoleFunc('log');\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name mapValuesLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n callback = once(callback);\n var newObj = {};\n var _iteratee = wrapAsync(iteratee);\n return eachOfLimit(limit)(obj, (val, key, next) => {\n _iteratee(val, key, (err, result) => {\n if (err) return next(err);\n newObj[key] = result;\n next(err);\n });\n }, err => callback(err, newObj));\n}\n\nvar mapValuesLimit$1 = awaitify(mapValuesLimit, 4);\n\n/**\n * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n *\n * Produces a new Object by mapping each value of `obj` through the `iteratee`\n * function. The `iteratee` is called each `value` and `key` from `obj` and a\n * callback for when it has finished processing. Each of these callbacks takes\n * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n * passes an error to its callback, the main `callback` (for the `mapValues`\n * function) is immediately called with the error.\n *\n * Note, the order of the keys in the result is not guaranteed. The keys will\n * be roughly in the order they complete, (but this is very engine-specific)\n *\n * @name mapValues\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileMap = {\n * f1: 'file1.txt',\n * f2: 'file2.txt',\n * f3: 'file3.txt'\n * };\n *\n * const withMissingFileMap = {\n * f1: 'file1.txt',\n * f2: 'file2.txt',\n * f3: 'file4.txt'\n * };\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, key, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }\n * });\n *\n * // Error handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(result);\n * }\n * });\n *\n * // Using Promises\n * async.mapValues(fileMap, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }).catch (err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch (err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.mapValues(fileMap, getFileSizeInBytes);\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction mapValues(obj, iteratee, callback) {\n return mapValuesLimit$1(obj, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n *\n * @name mapValuesSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesSeries(obj, iteratee, callback) {\n return mapValuesLimit$1(obj, 1, iteratee, callback)\n}\n\n/**\n * Caches the results of an async function. When creating a hash to store\n * function results against, the callback is omitted from the hash and an\n * optional hash function can be used.\n *\n * **Note: if the async function errs, the result will not be cached and\n * subsequent calls will call the wrapped function.**\n *\n * If no hash function is specified, the first argument is used as a hash key,\n * which may work reasonably if it is a string or a data type that converts to a\n * distinct string. Note that objects and arrays will not behave reasonably.\n * Neither will cases where the other arguments are significant. In such cases,\n * specify your own hash function.\n *\n * The cache of results is exposed as the `memo` property of the function\n * returned by `memoize`.\n *\n * @name memoize\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function to proxy and cache results from.\n * @param {Function} hasher - An optional function for generating a custom hash\n * for storing results. It has all the arguments applied to it apart from the\n * callback, and must be synchronous.\n * @returns {AsyncFunction} a memoized version of `fn`\n * @example\n *\n * var slow_fn = function(name, callback) {\n * // do something\n * callback(null, result);\n * };\n * var fn = async.memoize(slow_fn);\n *\n * // fn can now be used as if it were slow_fn\n * fn('some name', function() {\n * // callback\n * });\n */\nfunction memoize(fn, hasher = v => v) {\n var memo = Object.create(null);\n var queues = Object.create(null);\n var _fn = wrapAsync(fn);\n var memoized = initialParams((args, callback) => {\n var key = hasher(...args);\n if (key in memo) {\n setImmediate$1(() => callback(null, ...memo[key]));\n } else if (key in queues) {\n queues[key].push(callback);\n } else {\n queues[key] = [callback];\n _fn(...args, (err, ...resultArgs) => {\n // #1465 don't memoize if an error occurred\n if (!err) {\n memo[key] = resultArgs;\n }\n var q = queues[key];\n delete queues[key];\n for (var i = 0, l = q.length; i < l; i++) {\n q[i](err, ...resultArgs);\n }\n });\n }\n });\n memoized.memo = memo;\n memoized.unmemoized = fn;\n return memoized;\n}\n\n/* istanbul ignore file */\n\n/**\n * Calls `callback` on a later loop around the event loop. In Node.js this just\n * calls `process.nextTick`. In the browser it will use `setImmediate` if\n * available, otherwise `setTimeout(callback, 0)`, which means other higher\n * priority events may precede the execution of `callback`.\n *\n * This is used internally for browser-compatibility purposes.\n *\n * @name nextTick\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.setImmediate]{@link module:Utils.setImmediate}\n * @category Util\n * @param {Function} callback - The function to call on a later loop around\n * the event loop. Invoked with (args...).\n * @param {...*} args... - any number of additional arguments to pass to the\n * callback on the next tick.\n * @example\n *\n * var call_order = [];\n * async.nextTick(function() {\n * call_order.push('two');\n * // call_order now equals ['one','two']\n * });\n * call_order.push('one');\n *\n * async.setImmediate(function (a, b, c) {\n * // a, b, and c equal 1, 2, and 3\n * }, 1, 2, 3);\n */\nvar _defer$1;\n\nif (hasNextTick) {\n _defer$1 = process.nextTick;\n} else if (hasSetImmediate) {\n _defer$1 = setImmediate;\n} else {\n _defer$1 = fallback;\n}\n\nvar nextTick = wrap(_defer$1);\n\nvar parallel = awaitify((eachfn, tasks, callback) => {\n var results = isArrayLike(tasks) ? [] : {};\n\n eachfn(tasks, (task, key, taskCb) => {\n wrapAsync(task)((err, ...result) => {\n if (result.length < 2) {\n [result] = result;\n }\n results[key] = result;\n taskCb(err);\n });\n }, err => callback(err, results));\n}, 3);\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code. If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series. Any synchronous setup\n * sections for each task will happen one after the other. JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n *\n * //Using Callbacks\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction parallel$1(tasks, callback) {\n return parallel(eachOf$1, tasks, callback);\n}\n\n/**\n * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name parallelLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.parallel]{@link module:ControlFlow.parallel}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n */\nfunction parallelLimit(tasks, limit, callback) {\n return parallel(eachOfLimit(limit), tasks, callback);\n}\n\n/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Iterable} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {number} payload - an integer that specifies how many items are\n * passed to the worker function at a time. only applies if this is a\n * [cargo]{@link module:ControlFlow.cargo} object\n * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n * a promise that rejects if an error occurs.\n * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n * a promise that rejects if an error occurs.\n * @property {Function} remove - remove items from the queue that match a test\n * function. The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a function that sets a callback that is\n * called when the number of running workers hits the `concurrency` limit, and\n * further tasks will be queued. If the callback is omitted, `q.saturated()`\n * returns a promise for the next occurrence.\n * @property {Function} unsaturated - a function that sets a callback that is\n * called when the number of running workers is less than the `concurrency` &\n * `buffer` limits, and further tasks will not be queued. If the callback is\n * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a function that sets a callback that is called\n * when the last item from the `queue` is given to a `worker`. If the callback\n * is omitted, `q.empty()` returns a promise for the next occurrence.\n * @property {Function} drain - a function that sets a callback that is called\n * when the last item from the `queue` has returned from the `worker`. If the\n * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n * @property {Function} error - a function that sets a callback that is called\n * when a task errors. Has the signature `function(error, task)`. If the\n * callback is omitted, `error()` returns a promise that rejects on the next\n * error.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n *\n * @example\n * const q = async.queue(worker, 2)\n * q.push(item1)\n * q.push(item2)\n * q.push(item3)\n * // queues are iterable, spread into an array to inspect\n * const items = [...q] // [item1, item2, item3]\n * // or use for of\n * for (let item of q) {\n * console.log(item)\n * }\n *\n * q.drain(() => {\n * console.log('all done')\n * })\n * // or\n * await q.drain()\n */\n\n/**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n * console.log('hello ' + task.name);\n * callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain(function() {\n * console.log('all items have been processed');\n * });\n * // or await the end\n * await q.drain()\n *\n * // assign an error callback\n * q.error(function(err, task) {\n * console.error('task experienced an error');\n * });\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * // callback is optional\n * q.push({name: 'bar'});\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n * console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n * console.log('finished processing bar');\n * });\n */\nfunction queue$1 (worker, concurrency) {\n var _worker = wrapAsync(worker);\n return queue((items, cb) => {\n _worker(items[0], cb);\n }, concurrency, 1);\n}\n\n// Binary min-heap implementation used for priority queue.\n// Implementation is stable, i.e. push time is considered for equal priorities\nclass Heap {\n constructor() {\n this.heap = [];\n this.pushCount = Number.MIN_SAFE_INTEGER;\n }\n\n get length() {\n return this.heap.length;\n }\n\n empty () {\n this.heap = [];\n return this;\n }\n\n percUp(index) {\n let p;\n\n while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) {\n let t = this.heap[index];\n this.heap[index] = this.heap[p];\n this.heap[p] = t;\n\n index = p;\n }\n }\n\n percDown(index) {\n let l;\n\n while ((l=leftChi(index)) < this.heap.length) {\n if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) {\n l = l+1;\n }\n\n if (smaller(this.heap[index], this.heap[l])) {\n break;\n }\n\n let t = this.heap[index];\n this.heap[index] = this.heap[l];\n this.heap[l] = t;\n\n index = l;\n }\n }\n\n push(node) {\n node.pushCount = ++this.pushCount;\n this.heap.push(node);\n this.percUp(this.heap.length-1);\n }\n\n unshift(node) {\n return this.heap.push(node);\n }\n\n shift() {\n let [top] = this.heap;\n\n this.heap[0] = this.heap[this.heap.length-1];\n this.heap.pop();\n this.percDown(0);\n\n return top;\n }\n\n toArray() {\n return [...this];\n }\n\n *[Symbol.iterator] () {\n for (let i = 0; i < this.heap.length; i++) {\n yield this.heap[i].data;\n }\n }\n\n remove (testFn) {\n let j = 0;\n for (let i = 0; i < this.heap.length; i++) {\n if (!testFn(this.heap[i])) {\n this.heap[j] = this.heap[i];\n j++;\n }\n }\n\n this.heap.splice(j);\n\n for (let i = parent(this.heap.length-1); i >= 0; i--) {\n this.percDown(i);\n }\n\n return this;\n }\n}\n\nfunction leftChi(i) {\n return (i<<1)+1;\n}\n\nfunction parent(i) {\n return ((i+1)>>1)-1;\n}\n\nfunction smaller(x, y) {\n if (x.priority !== y.priority) {\n return x.priority < y.priority;\n }\n else {\n return x.pushCount < y.pushCount;\n }\n}\n\n/**\n * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n * completed in ascending priority order.\n *\n * @name priorityQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`.\n * Invoked with (task, callback).\n * @param {number} concurrency - An `integer` for determining how many `worker`\n * functions should be run in parallel. If omitted, the concurrency defaults to\n * `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three\n * differences between `queue` and `priorityQueue` objects:\n * * `push(task, priority, [callback])` - `priority` should be a number. If an\n * array of `tasks` is given, all tasks will be assigned the same priority.\n * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`,\n * except this returns a promise that rejects if an error occurs.\n * * The `unshift` and `unshiftAsync` methods were removed.\n */\nfunction priorityQueue(worker, concurrency) {\n // Start with a normal queue\n var q = queue$1(worker, concurrency);\n\n var {\n push,\n pushAsync\n } = q;\n\n q._tasks = new Heap();\n q._createTaskItem = ({data, priority}, callback) => {\n return {\n data,\n priority,\n callback\n };\n };\n\n function createDataItems(tasks, priority) {\n if (!Array.isArray(tasks)) {\n return {data: tasks, priority};\n }\n return tasks.map(data => { return {data, priority}; });\n }\n\n // Override push to accept second parameter representing priority\n q.push = function(data, priority = 0, callback) {\n return push(createDataItems(data, priority), callback);\n };\n\n q.pushAsync = function(data, priority = 0, callback) {\n return pushAsync(createDataItems(data, priority), callback);\n };\n\n // Remove unshift functions\n delete q.unshift;\n delete q.unshiftAsync;\n\n return q;\n}\n\n/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.race([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ],\n * // main callback\n * function(err, result) {\n * // the result will be equal to 'two' as it finishes earlier\n * });\n */\nfunction race(tasks, callback) {\n callback = once(callback);\n if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n if (!tasks.length) return callback();\n for (var i = 0, l = tasks.length; i < l; i++) {\n wrapAsync(tasks[i])(callback);\n }\n}\n\nvar race$1 = awaitify(race, 2);\n\n/**\n * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n *\n * @name reduceRight\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reduce]{@link module:Collections.reduce}\n * @alias foldr\n * @category Collection\n * @param {Array} array - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction reduceRight (array, memo, iteratee, callback) {\n var reversed = [...array].reverse();\n return reduce$1(reversed, memo, iteratee, callback);\n}\n\n/**\n * Wraps the async function in another function that always completes with a\n * result object, even when it errors.\n *\n * The result object has either the property `error` or `value`.\n *\n * @name reflect\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function you want to wrap\n * @returns {Function} - A function that always passes null to it's callback as\n * the error. The second argument to the callback will be an `object` with\n * either an `error` or a `value` property.\n * @example\n *\n * async.parallel([\n * async.reflect(function(callback) {\n * // do some stuff ...\n * callback(null, 'one');\n * }),\n * async.reflect(function(callback) {\n * // do some more stuff but error ...\n * callback('bad stuff happened');\n * }),\n * async.reflect(function(callback) {\n * // do some more stuff ...\n * callback(null, 'two');\n * })\n * ],\n * // optional callback\n * function(err, results) {\n * // values\n * // results[0].value = 'one'\n * // results[1].error = 'bad stuff happened'\n * // results[2].value = 'two'\n * });\n */\nfunction reflect(fn) {\n var _fn = wrapAsync(fn);\n return initialParams(function reflectOn(args, reflectCallback) {\n args.push((error, ...cbArgs) => {\n let retVal = {};\n if (error) {\n retVal.error = error;\n }\n if (cbArgs.length > 0){\n var value = cbArgs;\n if (cbArgs.length <= 1) {\n [value] = cbArgs;\n }\n retVal.value = value;\n }\n reflectCallback(null, retVal);\n });\n\n return _fn.apply(this, args);\n });\n}\n\n/**\n * A helper function that wraps an array or an object of functions with `reflect`.\n *\n * @name reflectAll\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.reflect]{@link module:Utils.reflect}\n * @category Util\n * @param {Array|Object|Iterable} tasks - The collection of\n * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.\n * @returns {Array} Returns an array of async functions, each wrapped in\n * `async.reflect`\n * @example\n *\n * let tasks = [\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * // do some more stuff but error ...\n * callback(new Error('bad stuff happened'));\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ];\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n * // values\n * // results[0].value = 'one'\n * // results[1].error = Error('bad stuff happened')\n * // results[2].value = 'two'\n * });\n *\n * // an example using an object instead of an array\n * let tasks = {\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * two: function(callback) {\n * callback('two');\n * },\n * three: function(callback) {\n * setTimeout(function() {\n * callback(null, 'three');\n * }, 100);\n * }\n * };\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n * // values\n * // results.one.value = 'one'\n * // results.two.error = 'two'\n * // results.three.value = 'three'\n * });\n */\nfunction reflectAll(tasks) {\n var results;\n if (Array.isArray(tasks)) {\n results = tasks.map(reflect);\n } else {\n results = {};\n Object.keys(tasks).forEach(key => {\n results[key] = reflect.call(this, tasks[key]);\n });\n }\n return results;\n}\n\nfunction reject(eachfn, arr, _iteratee, callback) {\n const iteratee = wrapAsync(_iteratee);\n return _filter(eachfn, arr, (value, cb) => {\n iteratee(value, (err, v) => {\n cb(err, !v);\n });\n }, callback);\n}\n\n/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.reject(fileList, fileExists, function(err, results) {\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * });\n *\n * // Using Promises\n * async.reject(fileList, fileExists)\n * .then( results => {\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.reject(fileList, fileExists);\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction reject$1 (coll, iteratee, callback) {\n return reject(eachOf$1, coll, iteratee, callback)\n}\nvar reject$2 = awaitify(reject$1, 3);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectLimit (coll, limit, iteratee, callback) {\n return reject(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar rejectLimit$1 = awaitify(rejectLimit, 4);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectSeries (coll, iteratee, callback) {\n return reject(eachOfSeries$1, coll, iteratee, callback)\n}\nvar rejectSeries$1 = awaitify(rejectSeries, 3);\n\nfunction constant$1(value) {\n return function () {\n return value;\n }\n}\n\n/**\n * Attempts to get a successful response from `task` no more than `times` times\n * before returning an error. If the task is successful, the `callback` will be\n * passed the result of the successful task. If all attempts fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name retry\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @see [async.retryable]{@link module:ControlFlow.retryable}\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n * object with `times` and `interval` or a number.\n * * `times` - The number of attempts to make before giving up. The default\n * is `5`.\n * * `interval` - The time to wait between retries, in milliseconds. The\n * default is `0`. The interval may also be specified as a function of the\n * retry count (see example).\n * * `errorFilter` - An optional synchronous function that is invoked on\n * erroneous result. If it returns `true` the retry attempts will continue;\n * if the function returns `false` the retry flow is aborted with the current\n * attempt's error and result being returned to the final callback.\n * Invoked with (err).\n * * If `opts` is a number, the number specifies the number of times to retry,\n * with the default interval of `0`.\n * @param {AsyncFunction} task - An async function to retry.\n * Invoked with (callback).\n * @param {Function} [callback] - An optional callback which is called when the\n * task has succeeded, or after the final failed attempt. It receives the `err`\n * and `result` arguments of the last attempt at completing the `task`. Invoked\n * with (err, results).\n * @returns {Promise} a promise if no callback provided\n *\n * @example\n *\n * // The `retry` function can be used as a stand-alone control flow by passing\n * // a callback, as shown below:\n *\n * // try calling apiMethod 3 times\n * async.retry(3, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod 3 times, waiting 200 ms between each retry\n * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod 10 times with exponential backoff\n * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n * async.retry({\n * times: 10,\n * interval: function(retryCount) {\n * return 50 * Math.pow(2, retryCount);\n * }\n * }, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod the default 5 times no delay between each retry\n * async.retry(apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod only when error condition satisfies, all other\n * // errors will abort the retry control flow and return to final callback\n * async.retry({\n * errorFilter: function(err) {\n * return err.message === 'Temporary error'; // only retry on a specific error\n * }\n * }, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // to retry individual methods that are not as reliable within other\n * // control flow functions, use the `retryable` wrapper:\n * async.auto({\n * users: api.getUsers.bind(api),\n * payments: async.retryable(3, api.getPayments.bind(api))\n * }, function(err, results) {\n * // do something with the results\n * });\n *\n */\nconst DEFAULT_TIMES = 5;\nconst DEFAULT_INTERVAL = 0;\n\nfunction retry(opts, task, callback) {\n var options = {\n times: DEFAULT_TIMES,\n intervalFunc: constant$1(DEFAULT_INTERVAL)\n };\n\n if (arguments.length < 3 && typeof opts === 'function') {\n callback = task || promiseCallback();\n task = opts;\n } else {\n parseTimes(options, opts);\n callback = callback || promiseCallback();\n }\n\n if (typeof task !== 'function') {\n throw new Error(\"Invalid arguments for async.retry\");\n }\n\n var _task = wrapAsync(task);\n\n var attempt = 1;\n function retryAttempt() {\n _task((err, ...args) => {\n if (err === false) return\n if (err && attempt++ < options.times &&\n (typeof options.errorFilter != 'function' ||\n options.errorFilter(err))) {\n setTimeout(retryAttempt, options.intervalFunc(attempt - 1));\n } else {\n callback(err, ...args);\n }\n });\n }\n\n retryAttempt();\n return callback[PROMISE_SYMBOL]\n}\n\nfunction parseTimes(acc, t) {\n if (typeof t === 'object') {\n acc.times = +t.times || DEFAULT_TIMES;\n\n acc.intervalFunc = typeof t.interval === 'function' ?\n t.interval :\n constant$1(+t.interval || DEFAULT_INTERVAL);\n\n acc.errorFilter = t.errorFilter;\n } else if (typeof t === 'number' || typeof t === 'string') {\n acc.times = +t || DEFAULT_TIMES;\n } else {\n throw new Error(\"Invalid arguments for async.retry\");\n }\n}\n\n/**\n * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method\n * wraps a task and makes it retryable, rather than immediately calling it\n * with retries.\n *\n * @name retryable\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.retry]{@link module:ControlFlow.retry}\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n * options, exactly the same as from `retry`, except for a `opts.arity` that\n * is the arity of the `task` function, defaulting to `task.length`\n * @param {AsyncFunction} task - the asynchronous function to wrap.\n * This function will be passed any arguments passed to the returned wrapper.\n * Invoked with (...args, callback).\n * @returns {AsyncFunction} The wrapped function, which when invoked, will\n * retry on an error, based on the parameters specified in `opts`.\n * This function will accept the same parameters as `task`.\n * @example\n *\n * async.auto({\n * dep1: async.retryable(3, getFromFlakyService),\n * process: [\"dep1\", async.retryable(3, function (results, cb) {\n * maybeProcessData(results.dep1, cb);\n * })]\n * }, callback);\n */\nfunction retryable (opts, task) {\n if (!task) {\n task = opts;\n opts = null;\n }\n let arity = (opts && opts.arity) || task.length;\n if (isAsync(task)) {\n arity += 1;\n }\n var _task = wrapAsync(task);\n return initialParams((args, callback) => {\n if (args.length < arity - 1 || callback == null) {\n args.push(callback);\n callback = promiseCallback();\n }\n function taskFn(cb) {\n _task(...args, cb);\n }\n\n if (opts) retry(opts, taskFn, callback);\n else retry(taskFn, callback);\n\n return callback[PROMISE_SYMBOL]\n });\n}\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing\n * [async functions]{@link AsyncFunction} to run in series.\n * Each function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @return {Promise} a promise, if no callback is passed\n * @example\n *\n * //Using Callbacks\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two']\n * });\n *\n * // an example using objects instead of arrays\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two']\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction series(tasks, callback) {\n return parallel(eachOfSeries$1, tasks, callback);\n}\n\n/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n *);\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n *);\n *\n * // Using Promises\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction some(coll, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback)\n}\nvar some$1 = awaitify(some, 3);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someLimit(coll, limit, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar someLimit$1 = awaitify(someLimit, 4);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someSeries(coll, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar someSeries$1 = awaitify(someSeries, 3);\n\n/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback passed\n * @example\n *\n * // bigfile.txt is a file that is 251100 bytes in size\n * // mediumfile.txt is a file that is 11000 bytes in size\n * // smallfile.txt is a file that is 121 bytes in size\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) return callback(getFileSizeErr);\n * callback(null, fileSize);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // descending order\n * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) {\n * return callback(getFileSizeErr);\n * }\n * callback(null, fileSize * -1);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n * }\n * }\n * );\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * }\n * );\n *\n * // Using Promises\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * // Error handling\n * async () => {\n * try {\n * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction sortBy (coll, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return map$1(coll, (x, iterCb) => {\n _iteratee(x, (err, criteria) => {\n if (err) return iterCb(err);\n iterCb(err, {value: x, criteria});\n });\n }, (err, results) => {\n if (err) return callback(err);\n callback(null, results.sort(comparator).map(v => v.value));\n });\n\n function comparator(left, right) {\n var a = left.criteria, b = right.criteria;\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\nvar sortBy$1 = awaitify(sortBy, 3);\n\n/**\n * Sets a time limit on an asynchronous function. If the function does not call\n * its callback within the specified milliseconds, it will be called with a\n * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n *\n * @name timeout\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} asyncFn - The async function to limit in time.\n * @param {number} milliseconds - The specified time limit.\n * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n * to timeout Error for more information..\n * @returns {AsyncFunction} Returns a wrapped function that can be used with any\n * of the control flow functions.\n * Invoke this function with the same parameters as you would `asyncFunc`.\n * @example\n *\n * function myFunction(foo, callback) {\n * doAsyncTask(foo, function(err, data) {\n * // handle errors\n * if (err) return callback(err);\n *\n * // do some stuff ...\n *\n * // return processed data\n * return callback(null, data);\n * });\n * }\n *\n * var wrapped = async.timeout(myFunction, 1000);\n *\n * // call `wrapped` as you would `myFunction`\n * wrapped({ bar: 'bar' }, function(err, data) {\n * // if `myFunction` takes < 1000 ms to execute, `err`\n * // and `data` will have their expected values\n *\n * // else `err` will be an Error with the code 'ETIMEDOUT'\n * });\n */\nfunction timeout(asyncFn, milliseconds, info) {\n var fn = wrapAsync(asyncFn);\n\n return initialParams((args, callback) => {\n var timedOut = false;\n var timer;\n\n function timeoutCallback() {\n var name = asyncFn.name || 'anonymous';\n var error = new Error('Callback function \"' + name + '\" timed out.');\n error.code = 'ETIMEDOUT';\n if (info) {\n error.info = info;\n }\n timedOut = true;\n callback(error);\n }\n\n args.push((...cbArgs) => {\n if (!timedOut) {\n callback(...cbArgs);\n clearTimeout(timer);\n }\n });\n\n // setup timer and call original function\n timer = setTimeout(timeoutCallback, milliseconds);\n fn(...args);\n });\n}\n\nfunction range(size) {\n var result = Array(size);\n while (size--) {\n result[size] = size;\n }\n return result;\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name timesLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} count - The number of times to run the function.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesLimit(count, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(range(count), limit, _iteratee, callback);\n}\n\n/**\n * Calls the `iteratee` function `n` times, and accumulates results in the same\n * manner you would use with [map]{@link module:Collections.map}.\n *\n * @name times\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n * @example\n *\n * // Pretend this is some complicated async factory\n * var createUser = function(id, callback) {\n * callback(null, {\n * id: 'user' + id\n * });\n * };\n *\n * // generate 5 users\n * async.times(5, function(n, next) {\n * createUser(n, function(err, user) {\n * next(err, user);\n * });\n * }, function(err, users) {\n * // we should now have 5 users\n * });\n */\nfunction times (n, iteratee, callback) {\n return timesLimit(n, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n *\n * @name timesSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesSeries (n, iteratee, callback) {\n return timesLimit(n, 1, iteratee, callback)\n}\n\n/**\n * A relative of `reduce`. Takes an Object or Array, and iterates over each\n * element in parallel, each step potentially mutating an `accumulator` value.\n * The type of the accumulator defaults to the type of collection passed in.\n *\n * @name transform\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} [accumulator] - The initial state of the transform. If omitted,\n * it will default to an empty Object or Array, depending on the type of `coll`\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * collection that potentially modifies the accumulator.\n * Invoked with (accumulator, item, key, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the transformed accumulator.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n * // implementation not included for brevity\n * return humanReadbleFilesize;\n * }\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n * fs.stat(value, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * acc[key] = formatBytes(stat.size);\n * callback(null);\n * });\n * }\n *\n * // Using callbacks\n * async.transform(fileList, transformFileSize, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }\n * });\n *\n * // Using Promises\n * async.transform(fileList, transformFileSize)\n * .then(result => {\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let result = await async.transform(fileList, transformFileSize);\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n * // implementation not included for brevity\n * return humanReadbleFilesize;\n * }\n *\n * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' };\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n * fs.stat(value, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * acc[key] = formatBytes(stat.size);\n * callback(null);\n * });\n * }\n *\n * // Using callbacks\n * async.transform(fileMap, transformFileSize, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }\n * });\n *\n * // Using Promises\n * async.transform(fileMap, transformFileSize)\n * .then(result => {\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.transform(fileMap, transformFileSize);\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction transform (coll, accumulator, iteratee, callback) {\n if (arguments.length <= 3 && typeof accumulator === 'function') {\n callback = iteratee;\n iteratee = accumulator;\n accumulator = Array.isArray(coll) ? [] : {};\n }\n callback = once(callback || promiseCallback());\n var _iteratee = wrapAsync(iteratee);\n\n eachOf$1(coll, (v, k, cb) => {\n _iteratee(accumulator, v, k, cb);\n }, err => callback(err, accumulator));\n return callback[PROMISE_SYMBOL]\n}\n\n/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n * async.tryEach([\n * function getDataFromFirstWebsite(callback) {\n * // Try getting the data from the first website\n * callback(err, data);\n * },\n * function getDataFromSecondWebsite(callback) {\n * // First website failed,\n * // Try getting the data from the backup website\n * callback(err, data);\n * }\n * ],\n * // optional callback\n * function(err, results) {\n * Now do something with the data.\n * });\n *\n */\nfunction tryEach(tasks, callback) {\n var error = null;\n var result;\n return eachSeries$1(tasks, (task, taskCb) => {\n wrapAsync(task)((err, ...args) => {\n if (err === false) return taskCb(err);\n\n if (args.length < 2) {\n [result] = args;\n } else {\n result = args;\n }\n error = err;\n taskCb(err ? null : {});\n });\n }, () => callback(error, result));\n}\n\nvar tryEach$1 = awaitify(tryEach);\n\n/**\n * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n * unmemoized form. Handy for testing.\n *\n * @name unmemoize\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.memoize]{@link module:Utils.memoize}\n * @category Util\n * @param {AsyncFunction} fn - the memoized function\n * @returns {AsyncFunction} a function that calls the original unmemoized function\n */\nfunction unmemoize(fn) {\n return (...args) => {\n return (fn.unmemoized || fn)(...args);\n };\n}\n\n/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * var count = 0;\n * async.whilst(\n * function test(cb) { cb(null, count < 5); },\n * function iter(callback) {\n * count++;\n * setTimeout(function() {\n * callback(null, count);\n * }, 1000);\n * },\n * function (err, n) {\n * // 5 seconds have passed, n = 5\n * }\n * );\n */\nfunction whilst(test, iteratee, callback) {\n callback = onlyOnce(callback);\n var _fn = wrapAsync(iteratee);\n var _test = wrapAsync(test);\n var results = [];\n\n function next(err, ...rest) {\n if (err) return callback(err);\n results = rest;\n if (err === false) return;\n _test(check);\n }\n\n function check(err, truth) {\n if (err) return callback(err);\n if (err === false) return;\n if (!truth) return callback(null, ...results);\n _fn(next);\n }\n\n return _test(check);\n}\nvar whilst$1 = awaitify(whilst, 3);\n\n/**\n * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs. `callback` will be passed an error and any\n * arguments passed to the final `iteratee`'s callback.\n *\n * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n *\n * @name until\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with (callback).\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n * const results = []\n * let finished = false\n * async.until(function test(cb) {\n * cb(null, finished)\n * }, function iter(next) {\n * fetchPage(url, (err, body) => {\n * if (err) return next(err)\n * results = results.concat(body.objects)\n * finished = !!body.next\n * next(err)\n * })\n * }, function done (err) {\n * // all pages have been fetched\n * })\n */\nfunction until(test, iteratee, callback) {\n const _test = wrapAsync(test);\n return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback);\n}\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */\nfunction waterfall (tasks, callback) {\n callback = once(callback);\n if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n if (!tasks.length) return callback();\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = wrapAsync(tasks[taskIndex++]);\n task(...args, onlyOnce(next));\n }\n\n function next(err, ...args) {\n if (err === false) return\n if (err || taskIndex === tasks.length) {\n return callback(err, ...args);\n }\n nextTask(args);\n }\n\n nextTask([]);\n}\n\nvar waterfall$1 = awaitify(waterfall);\n\n/**\n * An \"async function\" in the context of Async is an asynchronous function with\n * a variable number of parameters, with the final parameter being a callback.\n * (`function (arg1, arg2, ..., callback) {}`)\n * The final callback is of the form `callback(err, results...)`, which must be\n * called once the function is completed. The callback should be called with a\n * Error as its first argument to signal that an error occurred.\n * Otherwise, if no error occurred, it should be called with `null` as the first\n * argument, and any additional `result` arguments that may apply, to signal\n * successful completion.\n * The callback must be called exactly once, ideally on a later tick of the\n * JavaScript event loop.\n *\n * This type of function is also referred to as a \"Node-style async function\",\n * or a \"continuation passing-style function\" (CPS). Most of the methods of this\n * library are themselves CPS/Node-style async functions, or functions that\n * return CPS/Node-style async functions.\n *\n * Wherever we accept a Node-style async function, we also directly accept an\n * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.\n * In this case, the `async` function will not be passed a final callback\n * argument, and any thrown error will be used as the `err` argument of the\n * implicit callback, and the return value will be used as the `result` value.\n * (i.e. a `rejected` of the returned Promise becomes the `err` callback\n * argument, and a `resolved` value becomes the `result`.)\n *\n * Note, due to JavaScript limitations, we can only detect native `async`\n * functions and not transpilied implementations.\n * Your environment must have `async`/`await` support for this to work.\n * (e.g. Node > v7.6, or a recent version of a modern browser).\n * If you are using `async` functions through a transpiler (e.g. Babel), you\n * must still wrap the function with [asyncify]{@link module:Utils.asyncify},\n * because the `async function` will be compiled to an ordinary function that\n * returns a promise.\n *\n * @typedef {Function} AsyncFunction\n * @static\n */\n\nvar index = {\n apply,\n applyEach: applyEach$1,\n applyEachSeries,\n asyncify,\n auto,\n autoInject,\n cargo,\n cargoQueue: cargo$1,\n compose,\n concat: concat$1,\n concatLimit: concatLimit$1,\n concatSeries: concatSeries$1,\n constant,\n detect: detect$1,\n detectLimit: detectLimit$1,\n detectSeries: detectSeries$1,\n dir,\n doUntil,\n doWhilst: doWhilst$1,\n each,\n eachLimit: eachLimit$2,\n eachOf: eachOf$1,\n eachOfLimit: eachOfLimit$2,\n eachOfSeries: eachOfSeries$1,\n eachSeries: eachSeries$1,\n ensureAsync,\n every: every$1,\n everyLimit: everyLimit$1,\n everySeries: everySeries$1,\n filter: filter$1,\n filterLimit: filterLimit$1,\n filterSeries: filterSeries$1,\n forever: forever$1,\n groupBy,\n groupByLimit: groupByLimit$1,\n groupBySeries,\n log,\n map: map$1,\n mapLimit: mapLimit$1,\n mapSeries: mapSeries$1,\n mapValues,\n mapValuesLimit: mapValuesLimit$1,\n mapValuesSeries,\n memoize,\n nextTick,\n parallel: parallel$1,\n parallelLimit,\n priorityQueue,\n queue: queue$1,\n race: race$1,\n reduce: reduce$1,\n reduceRight,\n reflect,\n reflectAll,\n reject: reject$2,\n rejectLimit: rejectLimit$1,\n rejectSeries: rejectSeries$1,\n retry,\n retryable,\n seq,\n series,\n setImmediate: setImmediate$1,\n some: some$1,\n someLimit: someLimit$1,\n someSeries: someSeries$1,\n sortBy: sortBy$1,\n timeout,\n times,\n timesLimit,\n timesSeries,\n transform,\n tryEach: tryEach$1,\n unmemoize,\n until,\n waterfall: waterfall$1,\n whilst: whilst$1,\n\n // aliases\n all: every$1,\n allLimit: everyLimit$1,\n allSeries: everySeries$1,\n any: some$1,\n anyLimit: someLimit$1,\n anySeries: someSeries$1,\n find: detect$1,\n findLimit: detectLimit$1,\n findSeries: detectSeries$1,\n flatMap: concat$1,\n flatMapLimit: concatLimit$1,\n flatMapSeries: concatSeries$1,\n forEach: each,\n forEachSeries: eachSeries$1,\n forEachLimit: eachLimit$2,\n forEachOf: eachOf$1,\n forEachOfSeries: eachOfSeries$1,\n forEachOfLimit: eachOfLimit$2,\n inject: reduce$1,\n foldl: reduce$1,\n foldr: reduceRight,\n select: filter$1,\n selectLimit: filterLimit$1,\n selectSeries: filterSeries$1,\n wrapSync: asyncify,\n during: whilst$1,\n doDuring: doWhilst$1\n};\n\nexport default index;\nexport { apply, applyEach$1 as applyEach, applyEachSeries, asyncify, auto, autoInject, cargo, cargo$1 as cargoQueue, compose, concat$1 as concat, concatLimit$1 as concatLimit, concatSeries$1 as concatSeries, constant, detect$1 as detect, detectLimit$1 as detectLimit, detectSeries$1 as detectSeries, dir, doUntil, doWhilst$1 as doWhilst, each, eachLimit$2 as eachLimit, eachOf$1 as eachOf, eachOfLimit$2 as eachOfLimit, eachOfSeries$1 as eachOfSeries, eachSeries$1 as eachSeries, ensureAsync, every$1 as every, everyLimit$1 as everyLimit, everySeries$1 as everySeries, filter$1 as filter, filterLimit$1 as filterLimit, filterSeries$1 as filterSeries, forever$1 as forever, groupBy, groupByLimit$1 as groupByLimit, groupBySeries, log, map$1 as map, mapLimit$1 as mapLimit, mapSeries$1 as mapSeries, mapValues, mapValuesLimit$1 as mapValuesLimit, mapValuesSeries, memoize, nextTick, parallel$1 as parallel, parallelLimit, priorityQueue, queue$1 as queue, race$1 as race, reduce$1 as reduce, reduceRight, reflect, reflectAll, reject$2 as reject, rejectLimit$1 as rejectLimit, rejectSeries$1 as rejectSeries, retry, retryable, seq, series, setImmediate$1 as setImmediate, some$1 as some, someLimit$1 as someLimit, someSeries$1 as someSeries, sortBy$1 as sortBy, timeout, times, timesLimit, timesSeries, transform, tryEach$1 as tryEach, unmemoize, until, waterfall$1 as waterfall, whilst$1 as whilst, every$1 as all, everyLimit$1 as allLimit, everySeries$1 as allSeries, some$1 as any, someLimit$1 as anyLimit, someSeries$1 as anySeries, detect$1 as find, detectLimit$1 as findLimit, detectSeries$1 as findSeries, concat$1 as flatMap, concatLimit$1 as flatMapLimit, concatSeries$1 as flatMapSeries, each as forEach, eachSeries$1 as forEachSeries, eachLimit$2 as forEachLimit, eachOf$1 as forEachOf, eachOfSeries$1 as forEachOfSeries, eachOfLimit$2 as forEachOfLimit, reduce$1 as inject, reduce$1 as foldl, reduceRight as foldr, filter$1 as select, filterLimit$1 as selectLimit, filterSeries$1 as selectSeries, asyncify as wrapSync, whilst$1 as during, doWhilst$1 as doDuring };\n","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n"],"names":["__awaiter","commonjsGlobal","logger$1","Logger","DEFAULT_LOGGER_NAME","logger","events","R","ReflectApply","ReflectOwnKeys","ProcessEmitWarning","NumberIsNaN","EventEmitter$1","once","defaultMaxListeners","checkListener","_getMaxListeners","arrayClone","_addListener","onceWrapper","_onceWrap","spliceOne","_listeners","unwrapListeners","listenerCount","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","EventEmitter","StreamRequest","parse","deepCopy","eventsModule","this"],"mappings":"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AACA,IAAI,OAAO,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;AACpC,QAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjE,KAAK;AACL,CAAC;AACD;AACA;AACA,SAAS,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAClD,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC1C,IAAI,IAAI,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,GAAG,aAAa,CAAC;AACnF,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AACD;AACA,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACxC,IAAI,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxD,CAAC;AACD,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AA0C7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChD,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrD,CAAC;AACD,IAAI,cAAc,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC9C,IAAI,OAAO,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC9D,CA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EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AACD;AACiB,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;AA8BvC;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE;AACjC,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7C,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AACD;AACW,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACtD,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC;AACD,IAAI,WAAW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AACX,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC,EAAE,CAAC,EAAE;AA4LN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;AACvC,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK;AAChC,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9B,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACvB,CAAC;AAsLD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,QAAQ,CAAC,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC,CAAC;AACtH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ,EAAE,CAAC;AACzC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,QAAQ,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtC,KAAK;AACL,CAAC;AACD;AACa,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE;AA0K/B;AACA,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE;AAClD,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1C,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK;AAC/C,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;AACpC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,SAAS,CAAC,CAAC;AACX,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7C,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrD,CAAC;AACc,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACvD,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC/D,CAAC;AACmB,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjD,IAAI,OAAO,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC3D,CAAC;AACoB,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE;AAqX/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../node_modules/@webex/webrtc-core/dist/esm/index.js","../../node_modules/@webex/json-multistream/dist/esm/index.js","../../node_modules/@webex/rtcstats/dist/rtcstats.js","../../node_modules/@webex/ts-sdp/dist/esm/index.js","../../node_modules/events/events.js","../../node_modules/bowser/es5.js","../../node_modules/async/dist/async.mjs","../../node_modules/js-logger/src/logger.js"],"sourcesContent":["function _mergeNamespaces(n, m) {\n m.forEach(function (e) {\n e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {\n if (k !== 'default' && !(k in n)) {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n });\n return Object.freeze(n);\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar logger$1 = {exports: {}};\n\n/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\n\n(function (module) {\n(function (global) {\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(commonjsGlobal));\n}(logger$1));\n\nvar Logger = logger$1.exports;\n\nconst DEFAULT_LOGGER_NAME = 'webrtc-core';\r\nconst logger = Logger.get(DEFAULT_LOGGER_NAME);\r\nLogger.useDefaults({\r\n defaultLevel: Logger.DEBUG,\r\n /* eslint-disable-next-line jsdoc/require-jsdoc */\r\n formatter: (messages, context) => {\r\n messages.unshift(`[${context.name}]`);\r\n },\r\n});\n\nvar DeviceKind;\r\n(function (DeviceKind) {\r\n DeviceKind[\"AudioInput\"] = \"audioinput\";\r\n DeviceKind[\"AudioOutput\"] = \"audiooutput\";\r\n DeviceKind[\"VideoInput\"] = \"videoinput\";\r\n})(DeviceKind || (DeviceKind = {}));\r\n/**\r\n * Prompts the user for permission to use a media input which produces a MediaStream with tracks\r\n * containing the requested types of media.\r\n *\r\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\r\n * along with any requirements for each type.\r\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\r\n * media has successfully been obtained.\r\n */\r\nfunction getUserMedia(constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return navigator.mediaDevices.getUserMedia(constraints);\r\n });\r\n}\r\n/**\r\n * Prompts the user for permission to use a user's display media and audio. If a video track is\r\n * absent from the constraints argument, one will still be provided.\r\n *\r\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\r\n * along with any requirements for each type.\r\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\r\n * media has successfully been obtained.\r\n */\r\nfunction getDisplayMedia(constraints) {\r\n return navigator.mediaDevices.getDisplayMedia(constraints);\r\n}\r\n/**\r\n * Requests a list of the available media input and output devices, such as microphones, cameras,\r\n * headsets, and so forth.\r\n *\r\n * @returns A Promise that receives an array of MediaDeviceInfo objects when the promise is\r\n * fulfilled.\r\n */\r\nfunction enumerateDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return navigator.mediaDevices.enumerateDevices();\r\n });\r\n}\r\n/**\r\n * Adds the callback handler to be notified of a media device change (for example, a headset is\r\n * unplugged from the user's computer).\r\n *\r\n * @param handler - The callback function to execute.\r\n */\r\nfunction setOnDeviceChangeHandler$1(handler) {\r\n navigator.mediaDevices.ondevicechange = handler;\r\n}\r\n/**\r\n * Checks permissions using the navigator's permissions api.\r\n *\r\n * @param deviceKinds - Array of DeviceKind items.\r\n * @throws An error if camera or microphone aren't available options for query() (Firefox), or if\r\n * navigator.permissions is undefined (Safari and others).\r\n * @returns Array of Permission Status objects.\r\n */\r\nfunction checkNavigatorPermissions(deviceKinds) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const permissionRequests = [];\r\n if (deviceKinds.includes(DeviceKind.VideoInput)) {\r\n permissionRequests.push(navigator.permissions.query({ name: 'camera' }));\r\n }\r\n if (deviceKinds.includes(DeviceKind.AudioInput)) {\r\n permissionRequests.push(navigator.permissions.query({ name: 'microphone' }));\r\n }\r\n return Promise.all(permissionRequests);\r\n });\r\n}\r\n/**\r\n * Check to see if the user has granted the application permission to use their devices.\r\n *\r\n * @param deviceKinds - Array of DeviceKind items.\r\n * @returns True if device permissions exist, false if otherwise.\r\n */\r\nfunction checkDevicePermissions(deviceKinds) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const permissions = yield checkNavigatorPermissions(deviceKinds);\r\n if (permissions.every((permission) => permission.state === 'granted')) {\r\n return true;\r\n }\r\n // eslint-disable-next-line no-empty\r\n }\r\n catch (e) { }\r\n try {\r\n const devices = yield enumerateDevices();\r\n // If permissions are granted, the MediaDeviceInfo objects will have labels.\r\n return devices\r\n .filter((device) => deviceKinds.includes(device.kind))\r\n .every((device) => device.label);\r\n // eslint-disable-next-line no-empty\r\n }\r\n catch (e) { }\r\n return false;\r\n });\r\n}\r\n/**\r\n * Ensures that the user has granted permissions to the microphone and camera.\r\n *\r\n * @param deviceKinds - Array of DeviceKind items.\r\n * @param callback - Function that will be executed while device permissions are granted. After this\r\n * returns, permissions (for example device labels in Firefox) may not be available anymore.\r\n * @returns The callback's response.\r\n */\r\nfunction ensureDevicePermissions(deviceKinds, callback) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n const hasDevicePermissions = yield checkDevicePermissions(deviceKinds);\r\n if (!hasDevicePermissions) {\r\n const stream = yield getUserMedia({\r\n audio: deviceKinds.includes(DeviceKind.AudioInput),\r\n video: deviceKinds.includes(DeviceKind.VideoInput),\r\n });\r\n // Callback is here to call a function while an active capture exists, so that the browser\r\n // (Firefox) will allow the user to access device information.\r\n const callbackRes = yield callback();\r\n // Stop tracks in the stream so the browser (Safari) will know that there is not an active\r\n // stream running.\r\n stream.getTracks().forEach((track) => track.stop());\r\n return callbackRes;\r\n }\r\n return callback();\r\n }\r\n catch (e) {\r\n logger.error(e);\r\n throw new Error('Failed to ensure device permissions.');\r\n }\r\n });\r\n}\n\nvar media = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get DeviceKind () { return DeviceKind; },\n getUserMedia: getUserMedia,\n getDisplayMedia: getDisplayMedia,\n enumerateDevices: enumerateDevices,\n setOnDeviceChangeHandler: setOnDeviceChangeHandler$1,\n checkDevicePermissions: checkDevicePermissions,\n ensureDevicePermissions: ensureDevicePermissions\n});\n\nvar ErrorTypes;\r\n(function (ErrorTypes) {\r\n ErrorTypes[\"DEVICE_PERMISSION_DENIED\"] = \"DEVICE_PERMISSION_DENIED\";\r\n ErrorTypes[\"CREATE_CAMERA_TRACK_FAILED\"] = \"CREATE_CAMERA_TRACK_FAILED\";\r\n ErrorTypes[\"CREATE_MICROPHONE_TRACK_FAILED\"] = \"CREATE_MICROPHONE_TRACK_FAILED\";\r\n})(ErrorTypes || (ErrorTypes = {}));\r\n/**\r\n * Represents a WCME error, which contains error type and error message.\r\n */\r\nclass WcmeError {\r\n /**\r\n * Creates new error.\r\n *\r\n * @param type - Error type.\r\n * @param message - Error message.\r\n */\r\n constructor(type, message = '') {\r\n this.type = type;\r\n this.message = message;\r\n }\r\n}\r\n/**\r\n * Creates a camera video track. Please note that the constraint params in second getUserMedia call would NOT take effect when:\r\n *\r\n * 1. Previous captured video track from the same device is not stopped .\r\n * 2. Previous createCameraTrack() call for the same device is in progress.\r\n *\r\n * @param constructor - Constructor for the local camera track.\r\n * @param constraints - Video device constraints.\r\n * @returns A LocalTrack object or an error.\r\n */\r\nfunction createCameraTrack(constructor, constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let stream;\r\n try {\r\n stream = yield getUserMedia({ video: Object.assign({}, constraints) });\r\n }\r\n catch (error) {\r\n throw new WcmeError(ErrorTypes.CREATE_CAMERA_TRACK_FAILED, `Failed to create camera track ${error}`);\r\n }\r\n return new constructor(stream);\r\n });\r\n}\r\n/**\r\n * Creates a microphone audio track.\r\n *\r\n * @param constructor - Constructor for the local microphone track.\r\n * @param constraints - Audio device constraints.\r\n * @returns A LocalTrack object or an error.\r\n */\r\nfunction createMicrophoneTrack(constructor, constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let stream;\r\n try {\r\n stream = yield getUserMedia({ audio: Object.assign({}, constraints) });\r\n }\r\n catch (error) {\r\n throw new WcmeError(ErrorTypes.CREATE_MICROPHONE_TRACK_FAILED, `Failed to create microphone track ${error}`);\r\n }\r\n return new constructor(stream);\r\n });\r\n}\r\n/**\r\n * Creates a display video track.\r\n *\r\n * @param constructor - Constructor for the local display track.\r\n * @param videoContentHint - An optional parameters to give a hint for the content of the track.\r\n * @returns A Promise that resolves to a LocalDisplayTrack.\r\n */\r\nfunction createDisplayTrack(constructor, videoContentHint) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const stream = yield getDisplayMedia({ video: true });\r\n return new constructor(stream, videoContentHint);\r\n });\r\n}\r\n/**\r\n * Creates a display video track and a system audio track.\r\n *\r\n * @param videoTrackConstructor - Constructor for the local display track.\r\n * @param audioTrackConstructor - Constructor for the local system audio track.\r\n * @param videoContentHint - An optional parameter to give a hint for the content of the track.\r\n * @returns A Promise that resolves to a LocalDisplayTrack and a LocalSystemAudioTrack. If no system\r\n * audio is available, the LocalSystemAudioTrack will be resolved as null instead.\r\n */\r\nfunction createDisplayTrackWithAudio(videoTrackConstructor, audioTrackConstructor, videoContentHint) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const stream = yield getDisplayMedia({ video: true, audio: true });\r\n // eslint-disable-next-line new-cap\r\n const videoTrack = new videoTrackConstructor(new MediaStream(stream.getVideoTracks()), videoContentHint);\r\n let audioTrack = null;\r\n if (stream.getAudioTracks().length > 0) {\r\n // eslint-disable-next-line new-cap\r\n audioTrack = new audioTrackConstructor(new MediaStream(stream.getAudioTracks()));\r\n }\r\n return [videoTrack, audioTrack];\r\n });\r\n}\r\n/**\r\n * Enumerates the media input and output devices available.\r\n *\r\n * @param deviceKind - Optional filter to return a specific device kind.\r\n * @returns List of media devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getDevices(deviceKind) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let devices;\r\n try {\r\n devices = yield ensureDevicePermissions([DeviceKind.AudioInput, DeviceKind.VideoInput], enumerateDevices);\r\n }\r\n catch (error) {\r\n throw new WcmeError(ErrorTypes.DEVICE_PERMISSION_DENIED, 'Failed to ensure device permissions');\r\n }\r\n return devices.filter((v) => (deviceKind ? v.kind === deviceKind : true));\r\n });\r\n}\r\n/**\r\n * Helper function to get a list of microphone devices.\r\n *\r\n * @returns List of microphone devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getAudioInputDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return getDevices(DeviceKind.AudioInput);\r\n });\r\n}\r\n/**\r\n * Helper function to get a list of speaker devices.\r\n *\r\n * @returns List of speaker devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getAudioOutputDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return getDevices(DeviceKind.AudioOutput);\r\n });\r\n}\r\n/**\r\n * Helper function to get a list of camera devices.\r\n *\r\n * @returns List of camera devices in an array of MediaDeviceInfo objects.\r\n */\r\nfunction getVideoInputDevices() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return getDevices(DeviceKind.VideoInput);\r\n });\r\n}\r\n/**\r\n * Export the setOnDeviceChangeHandler method directly from the core lib.\r\n */\r\nconst { setOnDeviceChangeHandler } = media;\n\nvar events = {exports: {}};\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter$1() {\n EventEmitter$1.init.call(this);\n}\nevents.exports = EventEmitter$1;\nevents.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter$1.EventEmitter = EventEmitter$1;\n\nEventEmitter$1.prototype._events = undefined;\nEventEmitter$1.prototype._eventsCount = 0;\nEventEmitter$1.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter$1, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter$1.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter$1.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter$1.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter$1.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter$1.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter$1.prototype.on = EventEmitter$1.prototype.addListener;\n\nEventEmitter$1.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter$1.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter$1.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter$1.prototype.off = EventEmitter$1.prototype.removeListener;\n\nEventEmitter$1.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter$1.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter$1.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter$1.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter$1.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter$1.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\n/**\r\n * Typed event emitter class.\r\n */\r\nclass EventEmitter extends events.exports.EventEmitter {\r\n}\n\nvar LocalTrackEvents;\r\n(function (LocalTrackEvents) {\r\n LocalTrackEvents[\"Ended\"] = \"ended\";\r\n LocalTrackEvents[\"Muted\"] = \"muted\";\r\n /**\r\n * Fires when the published state of a LocalTrack changes. A value of 'true' indicates the\r\n * track has been published, and 'false' indicates that it is no longer published. Tracks are\r\n * unpublished by default, and must be published explicitly (no event will be fired to indicate\r\n * the initial state of 'unpublished').\r\n */\r\n LocalTrackEvents[\"PublishedStateUpdate\"] = \"published-state-update\";\r\n /**\r\n * Fires when there has been a change in the underlying track.\r\n */\r\n LocalTrackEvents[\"UnderlyingTrackChange\"] = \"underlying-track-change\";\r\n /**\r\n * Fires when the applyConstraints() has been called for the track.\r\n */\r\n LocalTrackEvents[\"TrackConstraintsChange\"] = \"track-constraints-change\";\r\n})(LocalTrackEvents || (LocalTrackEvents = {}));\r\n// TBD: Fix this once types are published separately\r\n// export type TrackEffect = BaseMicrophoneEffect | BaseCameraEffect;\r\n/**\r\n * Basic Track class. Wrapper for LocalTrack from 'webrtc-core'.\r\n */\r\nclass LocalTrack extends EventEmitter {\r\n /**\r\n * Constructor for the Track class. Creates an empty CoreLocalTrack or uses an existing one.\r\n *\r\n * @param stream - The MediaStream for this LocalTrack.\r\n */\r\n constructor(stream) {\r\n super();\r\n this.isPublished = false;\r\n this.loadingEffects = new Map();\r\n this.effects = new Map();\r\n this.originalStream = stream;\r\n this.underlyingStream = stream;\r\n // Effects create a new label but we want to retain the original one.\r\n this.label = this.underlyingStream.getTracks()[0].label;\r\n /**\r\n * Emit ended event when the underlying track ends.\r\n */\r\n this.underlyingTrack.onended = () => {\r\n this.emit(LocalTrackEvents.Ended, { trackState: this.trackState });\r\n };\r\n }\r\n /**\r\n * Get the kind of this track.\r\n * NOTE(brian): the need for this will likely go away once we get the rest of the track hierarchy\r\n * done, as we can use something like instanceof instead.\r\n *\r\n * @returns - The kind of this track, as a MediaStreamTrackKind.\r\n */\r\n get kind() {\r\n return this.underlyingTrack.kind;\r\n }\r\n /**\r\n * Get id of this track.\r\n *\r\n * @returns The id of this track.\r\n */\r\n get id() {\r\n return this.underlyingTrack.id;\r\n }\r\n /**\r\n * Get muted state of this track.\r\n *\r\n * @returns The muted state of this track.\r\n */\r\n get muted() {\r\n return !this.underlyingTrack.enabled;\r\n }\r\n /**\r\n * Get published state of this track.\r\n *\r\n * @returns The published state of this track.\r\n */\r\n get published() {\r\n return this.isPublished;\r\n }\r\n /**\r\n * Get the underlying MediaStream.\r\n *\r\n * @returns The underlying MediaStream.\r\n */\r\n get underlyingStream() {\r\n return this._underlyingStream;\r\n }\r\n /**\r\n * Set the underlying MediaStream.\r\n */\r\n set underlyingStream(stream) {\r\n this._underlyingStream = stream;\r\n }\r\n /**\r\n * Get current state of this track.\r\n *\r\n * @returns Current state of this track.\r\n */\r\n get trackState() {\r\n return { id: this.id, label: this.label, type: this.kind, muted: this.muted };\r\n }\r\n /**\r\n * Get the underlying MediaStreamTrack.\r\n *\r\n * @returns The underlying MediaStreamTrack.\r\n */\r\n get underlyingTrack() {\r\n return this._underlyingStream.getTracks()[0];\r\n }\r\n /**\r\n * Get the original MediaStreamTrack. We retain a reference to the stream obtained through\r\n * `getUserMedia()` to ensure it's updated alongside the `underlyingStream`. These two streams may\r\n * be different if effects have been added to the original stream.\r\n *\r\n * @returns The original MediaStreamTrack.\r\n */\r\n get originalTrack() {\r\n return this.originalStream.getTracks()[0];\r\n }\r\n /**\r\n * Set the mute state of this track.\r\n *\r\n * @param muted - True to mute, false to unmute.\r\n * @fires LocalTrackEvents.Muted\r\n */\r\n setMuted(muted) {\r\n // Only change state if it's different, where \"enabled\" means \"unmuted.\"\r\n if (this.underlyingTrack.enabled === muted) {\r\n this.originalTrack.enabled = !muted;\r\n this.underlyingTrack.enabled = !muted;\r\n this.emit(LocalTrackEvents.Muted, { trackState: this.trackState });\r\n logger.log(`Local track ${muted ? 'muted' : 'unmuted'}:`, { trackState: this.trackState });\r\n }\r\n }\r\n /**\r\n * Set the published state of this LocalTrack.\r\n *\r\n * @param isPublished - True if this track has been published, false otherwise.\r\n * @fires LocalTrackEvents.PublishedStateUpdate\r\n */\r\n setPublished(isPublished) {\r\n if (this.isPublished !== isPublished) {\r\n this.isPublished = isPublished;\r\n this.emit(LocalTrackEvents.PublishedStateUpdate, {\r\n trackState: this.trackState,\r\n isPublished,\r\n });\r\n logger.log(`Local track ${isPublished ? 'published' : 'unpublished'}:`, {\r\n trackState: this.trackState,\r\n });\r\n }\r\n }\r\n /**\r\n * Stop this track.\r\n *\r\n * @fires LocalTrackEvents.Ended\r\n */\r\n stop() {\r\n this.originalTrack.stop();\r\n this.underlyingTrack.stop();\r\n this.emit(LocalTrackEvents.Ended, { trackState: this.trackState });\r\n logger.log(`Local track stopped:`, { trackState: this.trackState });\r\n }\r\n /**\r\n * Adds an effect to a local track.\r\n *\r\n * @param name - The name of the effect.\r\n * @param effect - The effect to add.\r\n */\r\n addEffect(name, effect) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n // Load the effect\r\n this.loadingEffects.set(name, effect);\r\n yield effect.load(this.underlyingStream);\r\n // Check that the loaded effect is the latest one and dispose if not\r\n if (effect !== this.loadingEffects.get(name)) {\r\n yield effect.dispose();\r\n throw new Error(`Effect \"${name}\" not required after loading`);\r\n }\r\n // Use the loaded effect\r\n this.underlyingStream = effect.getUnderlyingStream();\r\n this.effects.set(name, effect);\r\n this.loadingEffects.delete(name);\r\n this.emit(LocalTrackEvents.UnderlyingTrackChange);\r\n });\r\n }\r\n /**\r\n * Get an effect by name.\r\n *\r\n * @param name - The effect name.\r\n * @returns A MicrophoneEffect.\r\n */\r\n getEffect(name) {\r\n const effect = this.effects.get(name);\r\n if (!effect) {\r\n logger.log(`No effect found with name '${name}'`);\r\n }\r\n return effect;\r\n }\r\n /**\r\n * Get a copy of the effects Map.\r\n *\r\n * @returns A copy of the effects map.\r\n */\r\n getEffects() {\r\n return new Map(this.effects);\r\n }\r\n /**\r\n * Cleanup the local microphone track.\r\n */\r\n disposeEffects() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n // Clear effects that are loading to indicate that they are not needed\r\n this.loadingEffects.clear();\r\n // Dispose of any effects currently in use\r\n if (this.effects.size > 0) {\r\n yield Promise.all(Array.from(this.effects.values(), (effect) => effect.dispose()));\r\n this.effects.clear();\r\n this.underlyingStream = this.originalStream;\r\n this.emit(LocalTrackEvents.UnderlyingTrackChange);\r\n }\r\n });\r\n }\r\n /**\r\n * Apply constraints to the track.\r\n *\r\n * @param constraints - The constraints to apply to the track.\r\n * @returns A promise which resolves when the constraints have been successfully applied.\r\n */\r\n applyConstraints(constraints) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n logger.log(`Applying constraints to local track:`, constraints);\r\n const ret = this.underlyingTrack.applyConstraints(constraints).then(() => {\r\n this.emit(LocalTrackEvents.TrackConstraintsChange);\r\n });\r\n return ret;\r\n });\r\n }\r\n /**\r\n * Get the current constraints of the track.\r\n *\r\n * @returns The constraints of the track.\r\n */\r\n getConstraints() {\r\n return this.underlyingTrack.getConstraints();\r\n }\r\n /**\r\n * Get the current settings of the track.\r\n *\r\n * @returns The settings of the track.\r\n */\r\n getSettings() {\r\n return this.underlyingTrack.getSettings();\r\n }\r\n /**\r\n * Check the resolution and then return how many layers will be active.\r\n *\r\n * @returns The active layers count.\r\n */\r\n getNumActiveSimulcastLayers() {\r\n let activeSimulcastLayersNumber = 0;\r\n if (this.trackState.type === 'audio') {\r\n return activeSimulcastLayersNumber;\r\n }\r\n const videoHeight = this.underlyingTrack.getSettings().height;\r\n if (videoHeight <= 180) {\r\n activeSimulcastLayersNumber = 1;\r\n }\r\n else if (videoHeight <= 360) {\r\n activeSimulcastLayersNumber = 2;\r\n }\r\n else {\r\n activeSimulcastLayersNumber = 3;\r\n }\r\n return activeSimulcastLayersNumber;\r\n }\r\n}\r\nLocalTrack.Events = LocalTrackEvents;\n\n/**\r\n * Represents a local track for a camera source.\r\n */\r\nclass LocalCameraTrack extends LocalTrack {\r\n}\n\n/**\r\n * Represents a local track for a display source.\r\n */\r\nclass LocalDisplayTrack extends LocalTrack {\r\n /**\r\n * Create a LocalDisplayTrack from the given values.\r\n *\r\n * @param stream - The MediaStream for this track.\r\n * @param videoContentHint - An optional content hint, describing the content of the track.\r\n */\r\n constructor(stream, videoContentHint) {\r\n super(stream);\r\n this._videoContentHint = videoContentHint;\r\n this.underlyingTrack.contentHint = videoContentHint || '';\r\n }\r\n /**\r\n * Get the VideoContentHint for this track.\r\n *\r\n * @returns The VideoContentHint for this track.\r\n */\r\n get videoContentHint() {\r\n return this._videoContentHint;\r\n }\r\n}\n\n/**\r\n * Represents a local track for a microphone source.\r\n */\r\nclass LocalMicrophoneTrack extends LocalTrack {\r\n}\n\n/**\r\n * Represents a local track for system audio.\r\n */\r\nclass LocalSystemAudioTrack extends LocalTrack {\r\n}\n\n// Overall connection state (based on the ICE and DTLS connection states)\r\nvar ConnectionState;\r\n(function (ConnectionState) {\r\n ConnectionState[\"New\"] = \"New\";\r\n ConnectionState[\"Closed\"] = \"Closed\";\r\n ConnectionState[\"Connected\"] = \"Connected\";\r\n ConnectionState[\"Connecting\"] = \"Connecting\";\r\n ConnectionState[\"Disconnected\"] = \"Disconnected\";\r\n ConnectionState[\"Failed\"] = \"Failed\";\r\n})(ConnectionState || (ConnectionState = {}));\r\nvar ConnectionStateEvents;\r\n(function (ConnectionStateEvents) {\r\n ConnectionStateEvents[\"ConnectionStateChanged\"] = \"ConnectionStateChanged\";\r\n})(ConnectionStateEvents || (ConnectionStateEvents = {}));\r\n/**\r\n * Listens on the connection's ICE and DTLS state changes and emits a single\r\n * event that summarizes all the internal states into a single overall connection state.\r\n */\r\nclass ConnectionStateHandler extends EventEmitter {\r\n /**\r\n * Creates an instance of ConnectionStateHandler.\r\n *\r\n * @param getCurrentStatesCallback - Callback for getting the connection state information\r\n * from the peer connection.\r\n */\r\n constructor(getCurrentStatesCallback) {\r\n super();\r\n this.getCurrentStatesCallback = getCurrentStatesCallback;\r\n this.mediaConnectionState = this.evaluateMediaConnectionState();\r\n }\r\n /**\r\n * Handler for connection state change.\r\n */\r\n onConnectionStateChange() {\r\n this.handleAnyConnectionStateChange();\r\n }\r\n /**\r\n * Handler for ice connection state change.\r\n */\r\n onIceConnectionStateChange() {\r\n this.handleAnyConnectionStateChange();\r\n }\r\n /**\r\n * Method to be called whenever ice connection or dtls connection state is changed.\r\n */\r\n handleAnyConnectionStateChange() {\r\n const newConnectionState = this.evaluateMediaConnectionState();\r\n if (newConnectionState !== this.mediaConnectionState) {\r\n this.mediaConnectionState = newConnectionState;\r\n this.emit(ConnectionStateEvents.ConnectionStateChanged, this.mediaConnectionState);\r\n }\r\n }\r\n /**\r\n * Evaluates the overall connection state based on peer connection's\r\n * connectionState and iceConnectionState.\r\n *\r\n * @returns Current overall connection state.\r\n */\r\n evaluateMediaConnectionState() {\r\n const { connectionState, iceState } = this.getCurrentStatesCallback();\r\n const connectionStates = [connectionState, iceState];\r\n let mediaConnectionState;\r\n if (connectionStates.every((value) => value === 'new')) {\r\n mediaConnectionState = ConnectionState.New;\r\n }\r\n else if (connectionStates.some((value) => value === 'closed')) {\r\n mediaConnectionState = ConnectionState.Closed;\r\n }\r\n else if (connectionStates.some((value) => value === 'failed')) {\r\n mediaConnectionState = ConnectionState.Failed;\r\n }\r\n else if (connectionStates.some((value) => value === 'disconnected')) {\r\n mediaConnectionState = ConnectionState.Disconnected;\r\n }\r\n else if (connectionStates.every((value) => value === 'connected' || value === 'completed')) {\r\n mediaConnectionState = ConnectionState.Connected;\r\n }\r\n else {\r\n mediaConnectionState = ConnectionState.Connecting;\r\n }\r\n logger.log(`iceConnectionState=${iceState} connectionState=${connectionState} => ${mediaConnectionState}`);\r\n return mediaConnectionState;\r\n }\r\n /**\r\n * Gets current connection state.\r\n *\r\n * @returns Current connection state.\r\n */\r\n getConnectionState() {\r\n return this.mediaConnectionState;\r\n }\r\n}\r\nConnectionStateHandler.Events = ConnectionStateEvents;\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nfunction log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nconst logging = log;\n\nfunction shimGetUserMedia$2(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimGetDisplayMedia$1(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nfunction shimOnTrack$1(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nfunction shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nfunction shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nfunction shimPeerConnection$1(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n\nvar chromeShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimMediaStream: shimMediaStream,\n shimOnTrack: shimOnTrack$1,\n shimGetSendersWithDtmf: shimGetSendersWithDtmf,\n shimGetStats: shimGetStats,\n shimSenderReceiverGetStats: shimSenderReceiverGetStats,\n shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,\n shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,\n shimPeerConnection: shimPeerConnection$1,\n fixNegotiationNeeded: fixNegotiationNeeded,\n shimGetUserMedia: shimGetUserMedia$2,\n shimGetDisplayMedia: shimGetDisplayMedia$1\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetUserMedia$1(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nfunction shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nfunction shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nfunction shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nfunction shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\nvar firefoxShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimOnTrack: shimOnTrack,\n shimPeerConnection: shimPeerConnection,\n shimSenderGetStats: shimSenderGetStats,\n shimReceiverGetStats: shimReceiverGetStats,\n shimRemoveStream: shimRemoveStream,\n shimRTCDataChannel: shimRTCDataChannel,\n shimAddTransceiver: shimAddTransceiver,\n shimGetParameters: shimGetParameters,\n shimCreateOffer: shimCreateOffer,\n shimCreateAnswer: shimCreateAnswer,\n shimGetUserMedia: shimGetUserMedia$1,\n shimGetDisplayMedia: shimGetDisplayMedia\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nfunction shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nfunction shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nfunction shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nfunction shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\nvar safariShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimLocalStreamsAPI: shimLocalStreamsAPI,\n shimRemoteStreamsAPI: shimRemoteStreamsAPI,\n shimCallbacksAPI: shimCallbacksAPI,\n shimGetUserMedia: shimGetUserMedia,\n shimConstraints: shimConstraints,\n shimRTCIceServerUrls: shimRTCIceServerUrls,\n shimTrackEventTransceiver: shimTrackEventTransceiver,\n shimCreateOfferLegacy: shimCreateOfferLegacy,\n shimAudioContext: shimAudioContext\n});\n\nvar sdp$1 = {exports: {}};\n\n/* eslint-env node */\n\n(function (module) {\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substr(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\n{\n module.exports = SDPUtils;\n}\n}(sdp$1));\n\nvar SDPUtils = sdp$1.exports;\n\nvar sdp = /*#__PURE__*/_mergeNamespaces({\n __proto__: null,\n 'default': SDPUtils\n}, [sdp$1.exports]);\n\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n\nvar commonShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimRTCIceCandidate: shimRTCIceCandidate,\n shimMaxMessageSize: shimMaxMessageSize,\n shimSendThrowTypeError: shimSendThrowTypeError,\n shimConnectionState: shimConnectionState,\n removeExtmapAllowMixed: removeExtmapAllowMixed,\n shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty,\n shimParameterlessSetLocalDescription: shimParameterlessSetLocalDescription\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = log;\n const browserDetails = detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: extractVersion,\n disableLog: disableLog,\n disableWarnings: disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !shimPeerConnection$1 ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n\n shimGetUserMedia$2(window, browserDetails);\n shimMediaStream(window);\n shimPeerConnection$1(window, browserDetails);\n shimOnTrack$1(window);\n shimAddTrackRemoveTrack(window, browserDetails);\n shimGetSendersWithDtmf(window);\n shimGetStats(window);\n shimSenderReceiverGetStats(window);\n fixNegotiationNeeded(window, browserDetails);\n\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n\n shimGetUserMedia$1(window, browserDetails);\n shimPeerConnection(window, browserDetails);\n shimOnTrack(window);\n shimRemoveStream(window);\n shimSenderGetStats(window);\n shimReceiverGetStats(window);\n shimRTCDataChannel(window);\n shimAddTransceiver(window);\n shimGetParameters(window);\n shimCreateOffer(window);\n shimCreateAnswer(window);\n\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n\n shimRTCIceServerUrls(window);\n shimCreateOfferLegacy(window);\n shimCallbacksAPI(window);\n shimLocalStreamsAPI(window);\n shimRemoteStreamsAPI(window);\n shimTrackEventTransceiver(window);\n shimGetUserMedia(window);\n shimAudioContext(window);\n\n shimRTCIceCandidate(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nadapterFactory({window: typeof window === 'undefined' ? undefined : window});\n\n/**\r\n * Creates an RTCPeerConnection.\r\n *\r\n * @param configuration - Config to the RTCPeerConnection constructor.\r\n * @returns An RTCPeerConnection instance.\r\n */\r\nfunction createRTCPeerConnection(configuration) {\r\n return new RTCPeerConnection(configuration);\r\n}\n\n/**\r\n * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.\r\n */\r\nvar MediaStreamTrackKind;\r\n(function (MediaStreamTrackKind) {\r\n MediaStreamTrackKind[\"Audio\"] = \"audio\";\r\n MediaStreamTrackKind[\"Video\"] = \"video\";\r\n})(MediaStreamTrackKind || (MediaStreamTrackKind = {}));\r\nvar PeerConnectionEvents;\r\n(function (PeerConnectionEvents) {\r\n PeerConnectionEvents[\"IceGatheringStateChange\"] = \"icegatheringstatechange\";\r\n PeerConnectionEvents[\"ConnectionStateChange\"] = \"connectionstatechange\";\r\n})(PeerConnectionEvents || (PeerConnectionEvents = {}));\r\n/**\r\n * Manages a single RTCPeerConnection with the server.\r\n */\r\nclass PeerConnection extends EventEmitter {\r\n /**\r\n * Creates an instance of the RTCPeerConnection.\r\n *\r\n * @param configuration - Config to the RTCPeerConnection constructor.\r\n */\r\n constructor(configuration) {\r\n super();\r\n logger.log('PeerConnection init');\r\n this.pc = createRTCPeerConnection(configuration);\r\n this.connectionStateHandler = new ConnectionStateHandler(() => {\r\n return {\r\n connectionState: this.pc.connectionState,\r\n iceState: this.pc.iceConnectionState,\r\n };\r\n });\r\n this.connectionStateHandler.on(ConnectionStateHandler.Events.ConnectionStateChanged, (state) => {\r\n this.emit(PeerConnection.Events.ConnectionStateChange, state);\r\n });\r\n // Forward the connection state related events to connection state handler\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n this.pc.oniceconnectionstatechange = () => this.connectionStateHandler.onIceConnectionStateChange();\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n this.pc.onconnectionstatechange = () => this.connectionStateHandler.onConnectionStateChange();\r\n // Subscribe to underlying PeerConnection events and emit them via the EventEmitter\r\n /* eslint-disable jsdoc/require-jsdoc */\r\n this.pc.onicegatheringstatechange = (ev) => {\r\n this.emit(PeerConnection.Events.IceGatheringStateChange, ev);\r\n };\r\n }\r\n /**\r\n * Get the underlying RTCPeerConnection.\r\n *\r\n * @returns The underlying RTCPeerConnection.\r\n */\r\n getUnderlyingRTCPeerConnection() {\r\n return this.pc;\r\n }\r\n /**\r\n * Gets the overall connection state of the underlying RTCPeerConnection.\r\n *\r\n * @returns The underlying connection's overall state.\r\n */\r\n getConnectionState() {\r\n return this.connectionStateHandler.getConnectionState();\r\n }\r\n /**\r\n * Adds a new media track to the set of tracks which will be transmitted to the other peer.\r\n *\r\n * @param track - A MediaStreamTrack object representing the media track to add to the peer connection.\r\n * @param streams - (Optional) One or more local MediaStream objects to which the track should be\r\n * added.\r\n * @returns The RTCRtpSender object which will be used to transmit the media data, or null if\r\n * there is no underlying track when a track is added.\r\n */\r\n addTrack(track, ...streams) {\r\n return this.pc.addTrack(track, ...streams);\r\n }\r\n /**\r\n * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the\r\n * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender\r\n * and an RTCRtpReceiver associated with it.\r\n *\r\n * @param trackOrKind - A MediaStreamTrack to associate with the transceiver, or a string which is used\r\n * as the kind of the receiver's track, and by extension the RTCRtpReceiver itself.\r\n * @param init - Options that you may wish to specify when creating the new transceiver.\r\n * @returns - The created RTCRtpTransceiver object.\r\n */\r\n addTransceiver(trackOrKind, init) {\r\n return this.pc.addTransceiver(trackOrKind, init);\r\n }\r\n /**\r\n * Tell the local end of the connection to stop sending media from the specified track, without\r\n * actually removing the corresponding RTCRtpSender from the list of senders as reported by\r\n * RTCPeerConnection.getSenders(). If the track is already stopped, or is not in the connection's\r\n * senders list, the method has no effect.\r\n *\r\n * If the connection has already been negotiated (signalingState is set to 'stable'), it is marked\r\n * as needing to be negotiated again; the remote peer won't experience the change until this\r\n * negotiation occurs. A negotiatedneeded event is sent to the RTCPeerConnection to let the local\r\n * end know this negotiation must occur.\r\n *\r\n * @param sender - An RTCRtpSender specifying the sender to remove from the connection.\r\n */\r\n removeTrack(sender) {\r\n this.pc.removeTrack(sender);\r\n }\r\n /**\r\n * Creates a new data channel linked with the remote peer.\r\n *\r\n * @param label - A human-readable name for the channel. May not be longer than 65,535 bytes.\r\n * @param options - An object providing configuration options for the data channel.\r\n * @returns An RTCDataChannel object.\r\n */\r\n createDataChannel(label, options) {\r\n return this.pc.createDataChannel(label, options);\r\n }\r\n /**\r\n * Creates an SDP answer to an offer received from a remote peer during the offer/answer\r\n * negotiation of a WebRTC connection.\r\n *\r\n * @param options - (Optional) An object which contains options which customize the answer; this\r\n * is based on the RTCAnswerOptions dictionary.\r\n * @returns A Promise whose fulfillment handler is called with an object conforming to the\r\n * RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the\r\n * other peer.\r\n */\r\n createAnswer(options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.createAnswer(options);\r\n });\r\n }\r\n /**\r\n * Initiates the creation of an SDP offer for the purpose of starting a new WebRTC connection to a\r\n * remote peer.\r\n *\r\n * @param options - (Optional) An RTCOfferOptions dictionary providing options requested for the\r\n * offer.\r\n * @returns A Promise whose fulfillment handler will receive an object conforming to the\r\n * RTCSessionDescriptionInit dictionary which contains the SDP describing the generated offer.\r\n * That received offer should be delivered through the signaling server to a remote peer.\r\n */\r\n createOffer(options) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.createOffer(options);\r\n });\r\n }\r\n /**\r\n * Changes the local description associated with the connection.\r\n *\r\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\r\n * configuration to be applied to the local end of the connection.\r\n * @returns A Promise which is fulfilled once the value of RTCPeerConnection.localDescription is\r\n * successfully changed or rejected if the change cannot be applied.\r\n */\r\n setLocalDescription(description) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.setLocalDescription(description);\r\n });\r\n }\r\n /**\r\n * Sets the specified session description as the remote peer's current offer or answer.\r\n *\r\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\r\n * remote peer's current offer or answer.\r\n * @returns A Promise which is fulfilled once the value of the connection's remoteDescription is\r\n * successfully changed or rejected if the change cannot be applied (for example, if the\r\n * specified description is incompatible with one or both of the peers on the connection).\r\n */\r\n setRemoteDescription(description) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.pc.setRemoteDescription(description);\r\n });\r\n }\r\n /**\r\n * Closes the current peer connection.\r\n */\r\n close() {\r\n this.pc.close();\r\n }\r\n /**\r\n * Get the local description from this PeerConnection.\r\n *\r\n * @returns An RTCSessionDescription representing the local description, or null if none has been set.\r\n */\r\n getLocalDescription() {\r\n return this.pc.localDescription;\r\n }\r\n /**\r\n * Get the remote description from this PeerConnection.\r\n *\r\n * @returns An RTCSessionDescription representing the remote description, or null if none has been set.\r\n */\r\n getRemoteDescription() {\r\n return this.pc.remoteDescription;\r\n }\r\n /**\r\n * Returns an array of RTCRtpSender objects, each of which represents the RTP sender responsible\r\n * for transmitting one track's data. A sender object provides methods and properties for\r\n * examining and controlling the encoding and transmission of the track's data.\r\n *\r\n * @returns An array of RTCRtpSender objects, one for each track on the connection. The array is\r\n * empty if there are no RTP senders on the connection.\r\n */\r\n getSenders() {\r\n return this.pc.getSenders();\r\n }\r\n /**\r\n * Get the list of RTCRtpTransceiver objects being used to send and receive data on the\r\n * connection.\r\n *\r\n * @returns - An array of the RTCRtpTransceiver objects representing the transceivers handling\r\n * sending and receiving all media on the PeerConnection. The list is in the order in which the\r\n * transceivers were added to the connection.\r\n */\r\n getTransceivers() {\r\n return this.pc.getTransceivers();\r\n }\r\n /**\r\n * Get statistics about either the overall connection or about the specified MediaStreamTrack.\r\n *\r\n * @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,\r\n * statistics will be gathered for the entire underlying RTCPeerConnection.\r\n * @returns - A Promise which resolves with an RTCStatsReport object providing connection\r\n * statistics.\r\n */\r\n getStats(selector) {\r\n return this.pc.getStats(selector);\r\n }\r\n /**\r\n * Returns a string that describes the connections' ICE gathering state.\r\n *\r\n * @returns - The ICE gathering state.\r\n */\r\n get iceGatheringState() {\r\n return this.pc.iceGatheringState;\r\n }\r\n /**\r\n * Returns the type of a connection that has been established.\r\n *\r\n * @returns The connection type which would be `ConnectionType`.\r\n */\r\n getCurrentConnectionType() {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function* () {\r\n // make sure this method only can be called when the ice connection is established;\r\n const isIceConnected = this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';\r\n if (!isIceConnected) {\r\n throw new Error('Ice connection is not established');\r\n }\r\n const succeededLocalCandidateIds = new Set();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const localCandidateStatsReports = [];\r\n (yield this.pc.getStats()).forEach((report) => {\r\n var _a;\r\n // collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.\r\n if (report.type === 'candidate-pair' && ((_a = report.state) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'succeeded') {\r\n succeededLocalCandidateIds.add(report.localCandidateId);\r\n }\r\n // collect all `local-candidate` stats.\r\n if (report.type === 'local-candidate') {\r\n localCandidateStatsReports.push(report);\r\n }\r\n });\r\n // find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.\r\n const localCandidate = localCandidateStatsReports.find((report) => succeededLocalCandidateIds.has(report.id));\r\n if (!localCandidate) {\r\n return 'unknown';\r\n }\r\n if (localCandidate.relayProtocol) {\r\n return `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\r\n }\r\n return (_a = localCandidate.protocol) === null || _a === void 0 ? void 0 : _a.toUpperCase();\r\n });\r\n }\r\n}\r\nPeerConnection.Events = PeerConnectionEvents;\n\n/**\r\n * Wait until the given peer connection has finished gathering ICE candidates and, when it has,\r\n * return the local description with the candidates.\r\n *\r\n * @param peerConnection - The PeerConnection to use.\r\n * @returns A Promise that resolves with the local description with the ICE candidates in it.\r\n */\r\nfunction getLocalDescriptionWithIceCandidates(peerConnection) {\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * A helper method to retrieve the local description and resolve, if one is found, or reject\r\n * with an error if it's not.\r\n */\r\n const getLocalDescAndResolve = () => {\r\n const localDesc = peerConnection.getLocalDescription();\r\n if (localDesc) {\r\n resolve(localDesc);\r\n }\r\n else {\r\n reject(new Error('Local description was null'));\r\n }\r\n };\r\n peerConnection.on(PeerConnection.Events.IceGatheringStateChange, (e) => {\r\n if (e.target.iceGatheringState === 'complete') {\r\n getLocalDescAndResolve();\r\n }\r\n // TODO(brian): throw an error if we see an error iceGatheringState\r\n });\r\n // It's possible ICE gathering is already done\r\n if (peerConnection.iceGatheringState === 'complete') {\r\n getLocalDescAndResolve();\r\n }\r\n });\r\n}\n\nexport { ConnectionState, ErrorTypes, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalSystemAudioTrack, LocalTrack, LocalTrackEvents, Logger, MediaStreamTrackKind, PeerConnection, WcmeError, createCameraTrack, createDisplayTrack, createDisplayTrackWithAudio, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getLocalDescriptionWithIceCandidates, getVideoInputDevices, logger, media, setOnDeviceChangeHandler };\n","import { EventEmitter } from 'events';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar logger = {exports: {}};\n\n/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\n\n(function (module) {\n(function (global) {\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(commonjsGlobal));\n}(logger));\n\nvar Logger = logger.exports;\n\nLogger.useDefaults({\r\n defaultLevel: Logger.DEBUG,\r\n formatter: (messages, context) => {\r\n messages.unshift(`[${context.name}] `);\r\n },\r\n});\n\nclass ActiveSpeakerInfo {\r\n constructor(priority, crossPriorityDuplication, crossPolicyDuplication, preferLiveVideo, namedMediaGroups) {\r\n this.priority = priority;\r\n this.crossPriorityDuplication = crossPriorityDuplication;\r\n this.crossPolicyDuplication = crossPolicyDuplication;\r\n this.preferLiveVideo = preferLiveVideo;\r\n this.namedMediaGroups = namedMediaGroups;\r\n }\r\n toString() {\r\n return `ActiveSpeakerInfo(priority=${this.priority}, crossPriorityDuplication=${this.crossPriorityDuplication}, crossPolicyDuplication=${this.crossPolicyDuplication}, preferLiveVideo=${this.preferLiveVideo}), namedMediaGroups=${this.namedMediaGroups}`;\r\n }\r\n}\r\nfunction isValidActiveSpeakerInfo(msg) {\r\n const maybeActiveSpeakerInfo = msg;\r\n return Boolean('priority' in maybeActiveSpeakerInfo &&\r\n 'crossPriorityDuplication' in maybeActiveSpeakerInfo &&\r\n 'crossPolicyDuplication' in maybeActiveSpeakerInfo &&\r\n 'preferLiveVideo' in maybeActiveSpeakerInfo);\r\n}\r\nfunction areNamedMediaGroupArraysEqual(left, right) {\r\n if (left === undefined || right === undefined) {\r\n return left === right;\r\n }\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (left[i] !== right[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction areActiveSpeakerInfosEqual(left, right) {\r\n return (left.priority === right.priority &&\r\n left.crossPriorityDuplication === right.crossPriorityDuplication &&\r\n left.crossPolicyDuplication === right.crossPolicyDuplication &&\r\n left.preferLiveVideo === right.preferLiveVideo &&\r\n areNamedMediaGroupArraysEqual(left.namedMediaGroups, right.namedMediaGroups));\r\n}\n\nclass ActiveSpeakerNotificationMsg {\r\n constructor(seqNum, csis) {\r\n this.seqNum = seqNum;\r\n this.csis = csis;\r\n }\r\n toString() {\r\n return `ActiveSpeakerNotificationMsg(seqNum=${this.seqNum}, csis=[${this.csis}])`;\r\n }\r\n}\r\nfunction isValidActiveSpeakerNotificationMsg(msg) {\r\n const maybeActiveSpeakerNotificationMsg = msg;\r\n return Boolean(maybeActiveSpeakerNotificationMsg.seqNum && maybeActiveSpeakerNotificationMsg.csis);\r\n}\n\nvar HomerMsgType;\r\n(function (HomerMsgType) {\r\n HomerMsgType[\"Multistream\"] = \"multistream\";\r\n})(HomerMsgType || (HomerMsgType = {}));\r\nclass HomerMsg {\r\n constructor(msgType, payload) {\r\n this.msgType = msgType;\r\n this.payload = payload;\r\n }\r\n static fromJson(data) {\r\n if (!data.msgType || !data.payload) {\r\n return null;\r\n }\r\n return new HomerMsg(data.msgType, data.payload);\r\n }\r\n}\n\nvar JmpMsgType;\r\n(function (JmpMsgType) {\r\n JmpMsgType[\"MediaRequest\"] = \"mediaRequest\";\r\n JmpMsgType[\"MediaRequestAck\"] = \"mediaRequestAck\";\r\n JmpMsgType[\"MediaRequestStatus\"] = \"mediaRequestStatus\";\r\n JmpMsgType[\"MediaRequestStatusAck\"] = \"mediaRequestStatusAck\";\r\n JmpMsgType[\"SourceAdvertisement\"] = \"sourceAdvertisement\";\r\n JmpMsgType[\"SourceAdvertisementAck\"] = \"sourceAdvertisementAck\";\r\n JmpMsgType[\"ActiveSpeakerNotification\"] = \"activeSpeakerNotification\";\r\n})(JmpMsgType || (JmpMsgType = {}));\r\nclass JmpMsg {\r\n constructor(mediaFamily, mediaContent, payload) {\r\n this.mediaFamily = mediaFamily;\r\n this.mediaContent = mediaContent;\r\n this.payload = payload;\r\n }\r\n toString() {\r\n return `JmpMsg(mediaFamily=${this.mediaFamily}, mediaContent=${this.mediaContent}, payload=${this.payload})`;\r\n }\r\n}\r\nfunction isValidJmpMsgPayload(msg) {\r\n const maybeJmpMsgPayload = msg;\r\n return Boolean(maybeJmpMsgPayload.msgType && maybeJmpMsgPayload.payload);\r\n}\r\nfunction isValidJmpMsg(msg) {\r\n const maybeJmpMsg = msg;\r\n return Boolean(maybeJmpMsg.mediaContent &&\r\n maybeJmpMsg.mediaFamily &&\r\n maybeJmpMsg.payload &&\r\n isValidJmpMsgPayload(maybeJmpMsg.payload));\r\n}\n\nclass MediaRequestMsg {\r\n constructor(seqNum, requests) {\r\n this.seqNum = seqNum;\r\n this.requests = requests;\r\n }\r\n toString() {\r\n return `JmpMediaMsg(seqNum=${this.seqNum}, requests=[${this.requests}])`;\r\n }\r\n}\r\nfunction isValidMediaRequestMsg(msg) {\r\n const maybeMediaRequestMsg = msg;\r\n return Boolean(maybeMediaRequestMsg.seqNum && maybeMediaRequestMsg.requests);\r\n}\n\nclass MediaRequestAckMsg {\r\n constructor(mediaRequestSeqNum) {\r\n this.mediaRequestSeqNum = mediaRequestSeqNum;\r\n }\r\n toString() {\r\n return `MediaRequestAckMsg(seqNum=${this.mediaRequestSeqNum})`;\r\n }\r\n}\r\nfunction isValidMediaRequestAckMsg(msg) {\r\n const maybeMediaRequestAckMsg = msg;\r\n return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);\r\n}\n\nfunction isValidStreamId(obj) {\r\n const maybeStreamId = obj;\r\n if (maybeStreamId.mid && maybeStreamId.ssrc) {\r\n return false;\r\n }\r\n return Boolean(maybeStreamId.mid) || Boolean(maybeStreamId.ssrc);\r\n}\r\nfunction compareStreamIds(id1, id2) {\r\n const keys1 = Object.keys(id1);\r\n const keys2 = Object.keys(id2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n return keys1.every((key) => id1[key] === id2[key]);\r\n}\n\nfunction isValidStreamInfo(obj) {\r\n const maybeStreamInfo = obj;\r\n return Boolean(maybeStreamInfo.id &&\r\n isValidStreamId(maybeStreamInfo.id) &&\r\n ['no source', 'invalid source', 'live', 'avatar', 'bandwidth disabled'].includes(maybeStreamInfo.state));\r\n}\r\nclass MediaRequestStatusMsg {\r\n constructor(seqNum, streamStates) {\r\n this.seqNum = seqNum;\r\n this.streamStates = streamStates;\r\n }\r\n}\r\nfunction isValidMediaRequestStatusMsg(msg) {\r\n const maybeMediaRequestStatusMsg = msg;\r\n return (Boolean(maybeMediaRequestStatusMsg.seqNum) &&\r\n maybeMediaRequestStatusMsg.streamStates &&\r\n maybeMediaRequestStatusMsg.streamStates.every((streamInfo) => isValidStreamInfo(streamInfo)));\r\n}\r\nfunction compareStreamStateArrays(streamStates1, streamStates2) {\r\n var _a, _b;\r\n if (streamStates1.length !== streamStates2.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < streamStates1.length; i += 1) {\r\n if (!compareStreamIds(streamStates1[i].id, streamStates2[i].id)) {\r\n return false;\r\n }\r\n if (streamStates1[i].state !== streamStates2[i].state) {\r\n return false;\r\n }\r\n if (((_a = streamStates1[i]) === null || _a === void 0 ? void 0 : _a.csi) !== ((_b = streamStates2[i]) === null || _b === void 0 ? void 0 : _b.csi)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\n\nclass MediaRequestStatusAckMsg {\r\n constructor(mediaRequestStatusSeqNum) {\r\n this.mediaRequestStatusSeqNum = mediaRequestStatusSeqNum;\r\n }\r\n toString() {\r\n return `MediaRequestStatusAckMsg(seqNum=${this.mediaRequestStatusSeqNum})`;\r\n }\r\n}\r\nfunction isValidMediaRequestStatusAckMsg(msg) {\r\n const maybeMediaRequestStatusAckMsg = msg;\r\n return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);\r\n}\n\nclass H264Codec {\r\n constructor(maxFs, maxFps, maxMbps, maxWidth, maxHeight) {\r\n this.maxFs = maxFs;\r\n this.maxFps = maxFps;\r\n this.maxMbps = maxMbps;\r\n this.maxWidth = maxWidth;\r\n this.maxHeight = maxHeight;\r\n }\r\n}\r\nfunction isValidH264Codec(msg) {\r\n const maybeH264Codec = msg;\r\n return Boolean(maybeH264Codec.maxFs && maybeH264Codec.maxFps && maybeH264Codec.maxMbps);\r\n}\r\nfunction areH264CodecsEqual(left, right) {\r\n if (left === undefined || right === undefined) {\r\n return left === right;\r\n }\r\n return (left.maxFs === right.maxFs &&\r\n left.maxFps === right.maxFps &&\r\n left.maxMbps === right.maxMbps &&\r\n left.maxWidth === right.maxWidth &&\r\n left.maxHeight === right.maxHeight);\r\n}\n\nclass CodecInfo {\r\n constructor(payloadType, h264) {\r\n this.payloadType = payloadType;\r\n this.h264 = h264;\r\n }\r\n}\r\nfunction isValidCodecRequestInfo(msg) {\r\n const maybeCodecRequestInfo = msg;\r\n return Boolean(maybeCodecRequestInfo.payloadType && maybeCodecRequestInfo.h264);\r\n}\r\nfunction areCodecInfosEqual(left, right) {\r\n return left.payloadType === right.payloadType && areH264CodecsEqual(left.h264, right.h264);\r\n}\n\nclass ReceiverSelectedInfo {\r\n constructor(csi) {\r\n this.csi = csi;\r\n }\r\n toString() {\r\n return `ReceiverSelectedInfo(csi=${this.csi})`;\r\n }\r\n}\r\nfunction isValidReceiverSelectedInfo(msg) {\r\n const maybeReceiverSelectedInfo = msg;\r\n return Boolean(maybeReceiverSelectedInfo.csi);\r\n}\r\nfunction areReceiverSelectedInfosEqual(left, right) {\r\n return left.csi === right.csi;\r\n}\n\nvar MediaFamily;\r\n(function (MediaFamily) {\r\n MediaFamily[\"Audio\"] = \"AUDIO\";\r\n MediaFamily[\"Video\"] = \"VIDEO\";\r\n})(MediaFamily || (MediaFamily = {}));\r\nvar MediaContent;\r\n(function (MediaContent) {\r\n MediaContent[\"Main\"] = \"MAIN\";\r\n MediaContent[\"Slides\"] = \"SLIDES\";\r\n})(MediaContent || (MediaContent = {}));\r\nvar Policy;\r\n(function (Policy) {\r\n Policy[\"ActiveSpeaker\"] = \"active-speaker\";\r\n Policy[\"ReceiverSelected\"] = \"receiver-selected\";\r\n})(Policy || (Policy = {}));\r\nvar MediaType;\r\n(function (MediaType) {\r\n MediaType[\"VideoMain\"] = \"VIDEO-MAIN\";\r\n MediaType[\"VideoSlides\"] = \"VIDEO-SLIDES\";\r\n MediaType[\"AudioMain\"] = \"AUDIO-MAIN\";\r\n MediaType[\"AudioSlides\"] = \"AUDIO-SLIDES\";\r\n})(MediaType || (MediaType = {}));\n\nfunction randomInteger(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n}\r\nfunction generateSceneId() {\r\n return randomInteger(0, 0x7fffff);\r\n}\r\nfunction generateCsi(mediaFamily, sceneId) {\r\n let av;\r\n if (mediaFamily === MediaFamily.Audio) {\r\n av = 0;\r\n }\r\n else {\r\n av = 1;\r\n }\r\n return (sceneId << 8) | av;\r\n}\r\nfunction getMediaType(mediaFamily, mediaContent) {\r\n if (mediaFamily === MediaFamily.Video && mediaContent === MediaContent.Main) {\r\n return MediaType.VideoMain;\r\n }\r\n if (mediaFamily === MediaFamily.Video && mediaContent === MediaContent.Slides) {\r\n return MediaType.VideoSlides;\r\n }\r\n if (mediaFamily === MediaFamily.Audio && mediaContent === MediaContent.Main) {\r\n return MediaType.AudioMain;\r\n }\r\n return MediaType.AudioSlides;\r\n}\r\nfunction getMediaFamily(mediaType) {\r\n return [MediaType.VideoMain, MediaType.VideoSlides].includes(mediaType)\r\n ? MediaFamily.Video\r\n : MediaFamily.Audio;\r\n}\r\nfunction getMediaContent(mediaType) {\r\n return [MediaType.VideoMain, MediaType.AudioMain].includes(mediaType)\r\n ? MediaContent.Main\r\n : MediaContent.Slides;\r\n}\r\nconst truthyOrZero = (value) => value === 0 || value;\n\nclass SourceAdvertisementMsg {\r\n constructor(seqNum, numTotalSources, numLiveSources, namedMediaGroups, videoContentHint) {\r\n this.seqNum = seqNum;\r\n this.numTotalSources = numTotalSources;\r\n this.numLiveSources = numLiveSources;\r\n this.namedMediaGroups = namedMediaGroups;\r\n this.videoContentHint = videoContentHint;\r\n }\r\n toString() {\r\n return `SourceAdvertisement(seqNum=${this.seqNum}, numTotalSources=${this.numTotalSources}, numLiveSources=${this.numLiveSources}, namedMediaGroups=${this.namedMediaGroups}, videoContentHint=${this.videoContentHint}`;\r\n }\r\n}\r\nfunction isValidSourceAdvertisementMsg(msg) {\r\n const maybeSourceAdvertisementMsg = msg;\r\n return Boolean(maybeSourceAdvertisementMsg.seqNum &&\r\n truthyOrZero(maybeSourceAdvertisementMsg.numTotalSources) &&\r\n truthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));\r\n}\n\nclass SourceAdvertisementAckMsg {\r\n constructor(sourceAdvertisementSeqNum) {\r\n this.sourceAdvertisementSeqNum = sourceAdvertisementSeqNum;\r\n }\r\n toString() {\r\n return `SourceAdvertisementAckMsg(sourceAdvertisementSeqNum=${this.sourceAdvertisementSeqNum})`;\r\n }\r\n}\r\nfunction isValidSourceAdvertisementAckMsg(msg) {\r\n const maybeSourceAdvertisementAckMsg = msg;\r\n return Boolean(maybeSourceAdvertisementAckMsg.sourceAdvertisementSeqNum);\r\n}\n\nclass StreamRequest {\r\n constructor(policy, policySpecificInfo, ids, maxPayloadBitsPerSecond, codecInfos = []) {\r\n this.policy = policy;\r\n this.policySpecificInfo = policySpecificInfo;\r\n this.ids = ids;\r\n this.maxPayloadBitsPerSecond = maxPayloadBitsPerSecond;\r\n this.codecInfos = codecInfos;\r\n }\r\n toString() {\r\n return `Request(policy=${this.policy}, info=${this.policySpecificInfo}, ids=[${this.ids}], maxPayloadBitsPerSecond=[${this.maxPayloadBitsPerSecond}], codecInfos=[${this.codecInfos}])`;\r\n }\r\n}\r\nfunction isValidStreamRequest(msg) {\r\n const maybeStreamRequest = msg;\r\n return Boolean(maybeStreamRequest.policy &&\r\n maybeStreamRequest.policySpecificInfo &&\r\n maybeStreamRequest.ids &&\r\n maybeStreamRequest.maxPayloadBitsPerSecond &&\r\n maybeStreamRequest.codecInfos);\r\n}\r\nfunction arePolicySpecificInfosEqual(left, right) {\r\n if (isValidActiveSpeakerInfo(left)) {\r\n if (!isValidActiveSpeakerInfo(right)) {\r\n return false;\r\n }\r\n return areActiveSpeakerInfosEqual(left, right);\r\n }\r\n if (isValidReceiverSelectedInfo(left)) {\r\n if (!isValidReceiverSelectedInfo(right)) {\r\n return false;\r\n }\r\n return areReceiverSelectedInfosEqual(left, right);\r\n }\r\n throw new Error('Invalid PolicySpecificInfo');\r\n}\r\nfunction areCodecInfoArraysEqual(left, right) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (!areCodecInfosEqual(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction areStreamIdArraysEqual(left, right) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (!compareStreamIds(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction areStreamRequestsEqual(left, right) {\r\n if (left.policy !== right.policy) {\r\n return false;\r\n }\r\n if (!arePolicySpecificInfosEqual(left.policySpecificInfo, right.policySpecificInfo)) {\r\n return false;\r\n }\r\n if (!areStreamIdArraysEqual(left.ids, right.ids)) {\r\n return false;\r\n }\r\n if (left.maxPayloadBitsPerSecond !== right.maxPayloadBitsPerSecond) {\r\n return false;\r\n }\r\n if (!areCodecInfoArraysEqual(left.codecInfos, right.codecInfos)) {\r\n return false;\r\n }\r\n return true;\r\n}\n\nclass RetransmitHandler {\r\n constructor(msg, maxNumRetransmits, retransmitIntervalMs, transmitCallback, expirationCallback) {\r\n this.timerHandle = undefined;\r\n this.msg = msg;\r\n this.numRetransmitsLeft = maxNumRetransmits;\r\n this.retransmitIntervalMs = retransmitIntervalMs;\r\n this.transmitCallback = transmitCallback;\r\n this.expirationCallback = expirationCallback;\r\n this.scheduleTimer();\r\n }\r\n onTimer() {\r\n var _a;\r\n if (this.numRetransmitsLeft > 0) {\r\n --this.numRetransmitsLeft;\r\n this.transmitCallback(this.msg);\r\n this.scheduleTimer();\r\n }\r\n else {\r\n (_a = this.expirationCallback) === null || _a === void 0 ? void 0 : _a.call(this, this.msg);\r\n }\r\n }\r\n scheduleTimer() {\r\n this.timerHandle = window.setTimeout(() => this.onTimer(), this.retransmitIntervalMs);\r\n }\r\n cancel() {\r\n if (this.timerHandle) {\r\n clearTimeout(this.timerHandle);\r\n }\r\n this.timerHandle = undefined;\r\n }\r\n}\n\nvar JmpSessionEvents;\r\n(function (JmpSessionEvents) {\r\n JmpSessionEvents[\"ActiveSpeaker\"] = \"active-speaker\";\r\n JmpSessionEvents[\"MediaRequestReceived\"] = \"media-request-received\";\r\n JmpSessionEvents[\"MediaRequestStatusReceived\"] = \"media-request-status-received\";\r\n JmpSessionEvents[\"SourceAdvertisementReceived\"] = \"source-advertisement-received\";\r\n})(JmpSessionEvents || (JmpSessionEvents = {}));\r\nfunction areStreamRequestArraysEqual(left, right) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.length; i += 1) {\r\n if (!areStreamRequestsEqual(left[i], right[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nclass JmpSession extends EventEmitter {\r\n constructor(mediaFamily, mediaContent, maxNumRetransmits = 3, retransmitIntervalMs = 250) {\r\n super();\r\n this.currMediaRequestSeqNum = 1;\r\n this.currSourceAdvertisementSeqNum = 1;\r\n this.currMediaRequestStatusSeqNum = 1;\r\n this.txCallback = undefined;\r\n this.lastSentMediaRequest = undefined;\r\n this.lastSentMediaRequestAck = undefined;\r\n this.lastReceivedMediaRequest = undefined;\r\n this.mediaFamily = mediaFamily;\r\n this.mediaContent = mediaContent;\r\n this.logger = Logger.get(`JmpSession ${this.mediaFamily}-${this.mediaContent}`);\r\n this.maxNumRetransmits = maxNumRetransmits;\r\n this.retransmitIntervalMs = retransmitIntervalMs;\r\n }\r\n getLogger() {\r\n return this.logger;\r\n }\r\n sendRequests(requests) {\r\n var _a;\r\n const mediaRequestMsg = new MediaRequestMsg(this.currMediaRequestSeqNum, requests);\r\n if (!this.lastSentMediaRequest ||\r\n !areStreamRequestArraysEqual(this.lastSentMediaRequest.msg.requests, requests)) {\r\n this.sendJmpMsg(JmpMsgType.MediaRequest, mediaRequestMsg);\r\n (_a = this.lastSentMediaRequest) === null || _a === void 0 ? void 0 : _a.cancel();\r\n this.lastSentMediaRequest = new RetransmitHandler(mediaRequestMsg, this.maxNumRetransmits, this.retransmitIntervalMs, () => this.sendJmpMsg(JmpMsgType.MediaRequest, mediaRequestMsg), (expiredJmpMsg) => {\r\n this.logger.warn(`Retransmits for message expired: ${expiredJmpMsg}`);\r\n });\r\n this.currMediaRequestSeqNum++;\r\n }\r\n }\r\n sendSourceAdvertisement(numTotalSources, numLiveSources, namedMediaGroups, videoContentHint) {\r\n const sourceAdvertisementMsg = new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum++, numTotalSources, numLiveSources, namedMediaGroups, videoContentHint);\r\n this.sendJmpMsg(JmpMsgType.SourceAdvertisement, sourceAdvertisementMsg);\r\n this.lastSentSourceAdvertisement = new RetransmitHandler(sourceAdvertisementMsg, this.maxNumRetransmits, this.retransmitIntervalMs, () => this.sendJmpMsg(JmpMsgType.SourceAdvertisement, sourceAdvertisementMsg), (expiredMsg) => {\r\n this.logger.warn(`Retransmits for message expired: `, expiredMsg);\r\n });\r\n }\r\n sendMediaRequestStatus(streamStates) {\r\n var _a, _b;\r\n const filteredStreamStates = streamStates.filter((streamState) => {\r\n var _a;\r\n return (_a = this.lastReceivedMediaRequest) === null || _a === void 0 ? void 0 : _a.requests.some((req) => req.ids.find((streamId) => compareStreamIds(streamId, streamState.id)));\r\n });\r\n const mediaRequestStatus = new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum, filteredStreamStates);\r\n if (!((_a = this.lastSentMediaRequestStatus) === null || _a === void 0 ? void 0 : _a.msg.streamStates) ||\r\n !compareStreamStateArrays(filteredStreamStates, this.lastSentMediaRequestStatus.msg.streamStates)) {\r\n this.sendJmpMsg(JmpMsgType.MediaRequestStatus, mediaRequestStatus);\r\n (_b = this.lastSentMediaRequestStatus) === null || _b === void 0 ? void 0 : _b.cancel();\r\n this.lastSentMediaRequestStatus = new RetransmitHandler(mediaRequestStatus, this.maxNumRetransmits, this.retransmitIntervalMs, () => this.sendJmpMsg(JmpMsgType.MediaRequestStatus, mediaRequestStatus), (expiredMsg) => {\r\n this.logger.warn(`Retransmits for message expired: `, expiredMsg);\r\n });\r\n this.currMediaRequestStatusSeqNum++;\r\n }\r\n }\r\n receive(jmpMsg) {\r\n if (jmpMsg.mediaContent !== this.mediaContent || jmpMsg.mediaFamily !== this.mediaFamily) {\r\n this.logger.error(`JmpMsg ${jmpMsg} sent to incorrect JmpSession`);\r\n return;\r\n }\r\n this.logger.debug(`Received JmpMsg`, jmpMsg);\r\n const { payload } = jmpMsg;\r\n if (payload.msgType === JmpMsgType.MediaRequest) {\r\n const mediaRequestMsg = payload.payload;\r\n if (!isValidMediaRequestMsg(mediaRequestMsg)) {\r\n this.logger.error(`Received invalid MediaRequest:`, mediaRequestMsg);\r\n return;\r\n }\r\n this.handleIncomingMediaRequest(mediaRequestMsg);\r\n }\r\n else if (payload.msgType === JmpMsgType.MediaRequestAck) {\r\n const mediaRequestAckMsg = payload.payload;\r\n if (!isValidMediaRequestAckMsg(mediaRequestAckMsg)) {\r\n this.logger.error(`Received invalid MediaRequest ACK:`, mediaRequestAckMsg);\r\n return;\r\n }\r\n this.handleIncomingMediaRequestAck(mediaRequestAckMsg);\r\n }\r\n else if (payload.msgType === JmpMsgType.ActiveSpeakerNotification) {\r\n const activeSpeakerNotification = payload.payload;\r\n if (!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)) {\r\n this.logger.info(`Received invalid Active Speaker Notification:`, activeSpeakerNotification);\r\n return;\r\n }\r\n this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);\r\n }\r\n else if (payload.msgType === JmpMsgType.SourceAdvertisement) {\r\n const sourceAdvertisement = payload.payload;\r\n if (!isValidSourceAdvertisementMsg(sourceAdvertisement)) {\r\n this.logger.error(`Received invalid SourceAdvertisementMsg: `, sourceAdvertisement);\r\n return;\r\n }\r\n this.handleIncomingSourceAdvertisement(sourceAdvertisement);\r\n }\r\n else if (payload.msgType === JmpMsgType.SourceAdvertisementAck) {\r\n const sourceAdvertisementAck = payload.payload;\r\n if (!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)) {\r\n this.logger.error(`Received invalid SourceAdvertisementAckMsg: `, sourceAdvertisementAck);\r\n return;\r\n }\r\n this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);\r\n }\r\n else if (payload.msgType === JmpMsgType.MediaRequestStatus) {\r\n const mediaRequestStatus = payload.payload;\r\n if (!isValidMediaRequestStatusMsg(mediaRequestStatus)) {\r\n this.logger.error(`Received invalid MediaRequestStatusMsg: `, mediaRequestStatus);\r\n return;\r\n }\r\n this.handleIncomingMediaRequestStatus(mediaRequestStatus);\r\n }\r\n else if (payload.msgType === JmpMsgType.MediaRequestStatusAck) {\r\n const mediaRequestStatusAck = payload.payload;\r\n if (!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)) {\r\n this.logger.error(`Received invalid MediaRequestStatusAckMsg: `, mediaRequestStatusAck);\r\n return;\r\n }\r\n this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);\r\n }\r\n else {\r\n this.logger.error(`Received unknown JmpMsg`);\r\n }\r\n }\r\n setTxCallback(callback) {\r\n this.txCallback = callback;\r\n }\r\n close() {\r\n var _a;\r\n this.logger.info(`closing`);\r\n (_a = this.lastSentMediaRequest) === null || _a === void 0 ? void 0 : _a.cancel();\r\n }\r\n sendJmpMsg(msgType, payload) {\r\n var _a;\r\n const jmpMsg = new JmpMsg(this.mediaFamily, this.mediaContent, {\r\n msgType,\r\n payload,\r\n });\r\n const homerMsg = new HomerMsg(HomerMsgType.Multistream, jmpMsg);\r\n (_a = this.txCallback) === null || _a === void 0 ? void 0 : _a.call(this, JSON.stringify(homerMsg));\r\n }\r\n handleIncomingMediaRequest(mediaRequestMsg) {\r\n var _a;\r\n if (this.lastReceivedMediaRequest &&\r\n mediaRequestMsg.seqNum < ((_a = this.lastReceivedMediaRequest) === null || _a === void 0 ? void 0 : _a.seqNum)) {\r\n this.logger.info(`Received old MediaRequest, ignoring`);\r\n }\r\n else if (this.lastReceivedMediaRequest &&\r\n mediaRequestMsg.seqNum === this.lastReceivedMediaRequest.seqNum) {\r\n if (this.lastSentMediaRequestAck) {\r\n this.logger.info(`Received duplicate MediaRequest, re-sending ACK`);\r\n this.sendJmpMsg(JmpMsgType.MediaRequestAck, this.lastSentMediaRequestAck);\r\n }\r\n else {\r\n this.logger.warn(`Received duplicate MediaRequest, but there was no ACK previously sent`);\r\n }\r\n }\r\n else {\r\n this.logger.info(`Received new MediaRequest, sending ACK`);\r\n const mediaRequestAck = new MediaRequestAckMsg(mediaRequestMsg.seqNum);\r\n this.lastReceivedMediaRequest = mediaRequestMsg;\r\n this.lastSentMediaRequestAck = mediaRequestAck;\r\n this.sendJmpMsg(JmpMsgType.MediaRequestAck, mediaRequestAck);\r\n this.emit(JmpSessionEvents.MediaRequestReceived, mediaRequestMsg);\r\n }\r\n }\r\n handleIncomingMediaRequestAck(mediaRequestAckMsg) {\r\n var _a, _b, _c;\r\n if (mediaRequestAckMsg.mediaRequestSeqNum === ((_b = (_a = this.lastSentMediaRequest) === null || _a === void 0 ? void 0 : _a.msg) === null || _b === void 0 ? void 0 : _b.seqNum)) {\r\n this.logger.info(`Received ACK for last sent MediaRequest`);\r\n (_c = this.lastSentMediaRequest) === null || _c === void 0 ? void 0 : _c.cancel();\r\n }\r\n else {\r\n this.logger.info(`Received ACK for old MediaRequest`);\r\n }\r\n }\r\n handleIncomingActiveSpeakerNotification(activeSpeakerNotification) {\r\n this.logger.debug(`Received Active Speaker Notification:`, activeSpeakerNotification);\r\n this.emit(JmpSessionEvents.ActiveSpeaker, activeSpeakerNotification);\r\n }\r\n handleIncomingSourceAdvertisement(sourceAdvertisement) {\r\n if (this.lastReceivedSourceAdvertisement &&\r\n sourceAdvertisement.seqNum < this.lastReceivedSourceAdvertisement.seqNum) {\r\n this.logger.info(`Received old SourceAdvertisement, ignoring`);\r\n }\r\n else if (this.lastReceivedSourceAdvertisement &&\r\n sourceAdvertisement.seqNum === this.lastReceivedSourceAdvertisement.seqNum) {\r\n if (this.lastSentSourceAdvertisementAck) {\r\n this.logger.info(`Received duplicate SourceAdvertisement, re-sending ACK`);\r\n this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck, this.lastSentSourceAdvertisementAck);\r\n }\r\n else {\r\n this.logger.warn(`Received duplicate SourceAdvertisement, but there was no ACK previously sent`);\r\n }\r\n }\r\n else {\r\n this.logger.info(`Received new SourceAdvertisement, sending ACK`);\r\n const sourceAdvertisementAck = new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);\r\n this.lastReceivedSourceAdvertisement = sourceAdvertisement;\r\n this.lastSentSourceAdvertisementAck = sourceAdvertisementAck;\r\n this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck, sourceAdvertisementAck);\r\n this.emit(JmpSessionEvents.SourceAdvertisementReceived, sourceAdvertisement);\r\n }\r\n }\r\n handleIncomingSourceAdvertisementAck(sourceAdvertisementAck) {\r\n var _a, _b, _c;\r\n if (sourceAdvertisementAck.sourceAdvertisementSeqNum ===\r\n ((_b = (_a = this.lastSentSourceAdvertisement) === null || _a === void 0 ? void 0 : _a.msg) === null || _b === void 0 ? void 0 : _b.seqNum)) {\r\n this.logger.info(`Received ACK for last sent SourceAdvertisement`);\r\n (_c = this.lastSentSourceAdvertisement) === null || _c === void 0 ? void 0 : _c.cancel();\r\n }\r\n else {\r\n this.logger.info(`Received ACK for old SourceAdvertisement`);\r\n }\r\n }\r\n handleIncomingMediaRequestStatus(mediaRequestStatus) {\r\n if (this.lastReceivedMediaRequestStatus &&\r\n mediaRequestStatus.seqNum < this.lastReceivedMediaRequestStatus.seqNum) {\r\n this.logger.info(`Received old MediaRequestStatus, ignoring`);\r\n }\r\n else if (this.lastReceivedMediaRequestStatus &&\r\n mediaRequestStatus.seqNum === this.lastReceivedMediaRequestStatus.seqNum) {\r\n if (this.lastSentMediaRequestStatusAck) {\r\n this.logger.info(`Received duplicate MediaRequestStatus, re-sending ACK`);\r\n this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck, this.lastSentMediaRequestStatusAck);\r\n }\r\n else {\r\n this.logger.warn(`Received duplicate MediaRequestStatus, but there was no ACK previously sent`);\r\n }\r\n }\r\n else {\r\n this.logger.info(`Received new MediaRequestStatus, sending ACK`);\r\n const mediaRequestStatusAck = new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);\r\n this.lastReceivedMediaRequestStatus = mediaRequestStatus;\r\n this.lastSentMediaRequestStatusAck = mediaRequestStatusAck;\r\n this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck, mediaRequestStatusAck);\r\n this.emit(JmpSessionEvents.MediaRequestStatusReceived, mediaRequestStatus);\r\n }\r\n }\r\n handleIncomingMediaRequestStatusAck(mediaRequestStatusAck) {\r\n var _a, _b, _c;\r\n if (mediaRequestStatusAck.mediaRequestStatusSeqNum ===\r\n ((_b = (_a = this.lastSentMediaRequestStatus) === null || _a === void 0 ? void 0 : _a.msg) === null || _b === void 0 ? void 0 : _b.seqNum)) {\r\n this.logger.info(`Received ACK for last sent MediaRequestStatus`);\r\n (_c = this.lastSentMediaRequestStatus) === null || _c === void 0 ? void 0 : _c.cancel();\r\n }\r\n else {\r\n this.logger.info(`Received ACK for old MediaRequestStatus`);\r\n }\r\n }\r\n}\n\nexport { ActiveSpeakerInfo, ActiveSpeakerNotificationMsg, CodecInfo, H264Codec, HomerMsg, HomerMsgType, JmpMsg, JmpMsgType, JmpSession, JmpSessionEvents, Logger, MediaContent, MediaFamily, MediaRequestAckMsg, MediaRequestMsg, MediaRequestStatusAckMsg, MediaRequestStatusMsg, MediaType, Policy, ReceiverSelectedInfo, SourceAdvertisementAckMsg, SourceAdvertisementMsg, StreamRequest, areActiveSpeakerInfosEqual, areCodecInfosEqual, areH264CodecsEqual, areReceiverSelectedInfosEqual, areStreamRequestsEqual, compareStreamIds, compareStreamStateArrays, generateCsi, generateSceneId, getMediaContent, getMediaFamily, getMediaType, isValidActiveSpeakerInfo, isValidActiveSpeakerNotificationMsg, isValidCodecRequestInfo, isValidH264Codec, isValidJmpMsg, isValidJmpMsgPayload, isValidMediaRequestAckMsg, isValidMediaRequestMsg, isValidMediaRequestStatusAckMsg, isValidMediaRequestStatusMsg, isValidReceiverSelectedInfo, isValidSourceAdvertisementAckMsg, isValidSourceAdvertisementMsg, isValidStreamId, isValidStreamInfo, isValidStreamRequest, truthyOrZero };\n","\"use strict\";\nexports.__esModule = true;\nexports.rtcStats = void 0;\n/**\n * Copies values of any nested depth.\n *\n * @param value - The value to be copied.\n * @returns - Copied value.\n */\nvar deepCopy = function (value) { return JSON.parse(JSON.stringify(value)); };\n/**\n * Check deep equality between two values.\n *\n * @param value1 - First value to check.\n * @param value2 - Second value to check.\n * @returns True if values are deeply equal, false otherwise.\n */\nvar deepEqual = function (value1, value2) {\n // If both immutable values are equal, return true.\n if (value1 === value2) {\n return true;\n }\n // If both are objects, we check the length and properties of each.\n if (value1 && value2 && typeof value1 === 'object' && typeof value2 === 'object') {\n if (value1.constructor !== value2.constructor)\n return false;\n // Return false if the objects are of different sizes.\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n // Deep equal check each property in the object, returns true if we found no\n // differing properties.\n return Object.keys(value1).reduce(function (val, prop) {\n if (value2[prop]) {\n if (!deepEqual(value1[prop], value2[prop])) {\n return false;\n }\n }\n else {\n return false;\n }\n return val;\n }, true);\n }\n // Return false if no other conditions are met.\n return false;\n};\n/**\n * Translates a Map into an object.\n *\n * @param report - The report in Map form.\n * @returns - A deduped object.\n */\nvar map2obj = function (report) {\n if (!report.size) {\n return report;\n }\n var o = {};\n report.forEach(function (value, key) {\n o[key] = value;\n });\n return o;\n};\nvar persistedKeys = ['type', 'id', 'timestamp'];\n/**\n * Check to see if the report consists of more than just the persisted metadata.\n *\n * @param report - The report line being checked.\n * @returns True if the report item contains non-persisted keys, false otherwise.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar hasNonMetadata = function (report) {\n return !!Object.keys(report).filter(function (key) { return !persistedKeys.includes(key); }).length;\n};\n/**\n * Apply a delta compression to the stats report. Reduces size by ~90%.\n * To reduce further, report keys could be compressed.\n *\n * @param oldStats - Previous report items that we dedupe against.\n * @param newStats - New incoming stats.\n * @returns - Compressed Stats.\n */\nvar deltaCompression = function (oldStats, newStats) {\n var updatedStats = deepCopy(newStats);\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (!oldStats[id]) {\n return;\n }\n // Persist specific values beyond delta compression, as long as they\n // aren't the only non-deduped keys.\n Object.keys(report).forEach(function (name) {\n if (deepEqual(report[name], oldStats[id][name]) && !persistedKeys.includes(name)) {\n delete updatedStats[id][name];\n }\n if (!hasNonMetadata(report)) {\n delete updatedStats[id];\n }\n });\n });\n // Use the most recent timestamp.\n var timestamp = -Infinity;\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (report.timestamp > timestamp) {\n timestamp = report.timestamp;\n }\n });\n // Delete the timestamps on each item.\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (report.timestamp === timestamp) {\n delete report.timestamp;\n }\n });\n updatedStats.timestamp = timestamp;\n return updatedStats;\n};\n/**\n * Format the stats report into an array.\n *\n * @param report - A WebRTC stats report.\n * @returns - An array of Stats Report items.\n */\nvar formatStatsReport = function (report) {\n return Object.keys(report)\n .filter(function (name) { return name !== 'timestamp'; })\n .map(function (name) { return JSON.stringify(report[name]); });\n};\n/**\n * Parametrize a single string event to contain type and an (empty) id.\n *\n * @param value - The value to parametrize.\n * @returns An event object.\n */\nvar makeEvent = function (value) { return [JSON.stringify({ value: value, type: 'string', id: '' })]; };\n/**\n * Attach a Peer Connection to periodically get updated on events and stats.\n *\n * @param pc - Peer Connection in which we attach.\n * @param logger - Logging function to log events and stats.\n * @param intervalTime - Time between each `getStats` check.\n * @param statsPreProcessor - Optional function that modifies stats.\n */\nvar rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {\n if (statsPreProcessor === void 0) { statsPreProcessor = function () { return Promise.resolve(); }; }\n var prev = {};\n /**\n * Log stats or event data with additional tracking information.\n *\n * @param name - Name of the event to log.\n * @param payload - Log data pertaining to the event.\n * @param timestamp - Time the event happened in milliseconds.\n */\n var trace = function (name, payload, timestamp) {\n logger({ timestamp: timestamp ? Math.round(timestamp) : Date.now(), name: name, payload: payload });\n };\n pc.addEventListener('icecandidate', function (e) {\n if (e.candidate) {\n trace('onicecandidate', makeEvent(JSON.stringify(e.candidate)));\n }\n });\n pc.addEventListener('icecandidateerror', function (event) {\n var _a = event, errorCode = _a.errorCode, errorText = _a.errorText;\n trace('onicecandidateerror', makeEvent(\"\".concat(errorCode, \": \").concat(errorText)));\n });\n pc.addEventListener('track', function (e) {\n trace('ontrack', makeEvent(\"\".concat(e.track.kind, \":\").concat(e.track.id, \" \").concat(e.streams\n .map(function (stream) { return \"stream:\".concat(stream.id); })\n .join(' '))));\n });\n pc.addEventListener('signalingstatechange', function () {\n trace('onsignalingstatechange', makeEvent(pc.signalingState));\n });\n pc.addEventListener('iceconnectionstatechange', function () {\n trace('oniceconnectionstatechange', makeEvent(pc.iceConnectionState));\n });\n pc.addEventListener('icegatheringstatechange', function () {\n trace('onicegatheringstatechange', makeEvent(pc.iceGatheringState));\n });\n pc.addEventListener('connectionstatechange', function () {\n trace('onconnectionstatechange', makeEvent(pc.connectionState));\n });\n pc.addEventListener('negotiationneeded', function () {\n trace('onnegotiationneeded', makeEvent('negotiationneeded'));\n });\n pc.addEventListener('datachannel', function (event) {\n trace('ondatachannel', makeEvent(\"\".concat(event.channel.id, \": \").concat(event.channel.label)));\n });\n var interval = window.setInterval(function () {\n if (pc.signalingState === 'closed') {\n window.clearInterval(interval);\n return;\n }\n pc.getStats(null).then(function (res) {\n // Convert from stats report to js Map in order to have values set in `statsPreProcessor`\n var statsMap = new Map();\n res.forEach(function (stats, key) { return statsMap.set(key, stats); });\n statsPreProcessor(statsMap).then(function () {\n var now = map2obj(statsMap);\n var base = deepCopy(now); // our new prev\n var compressed = deltaCompression(prev, now);\n trace('stats-report', formatStatsReport(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);\n prev = base;\n });\n });\n }, intervalTime);\n};\nexports.rtcStats = rtcStats;\n","const NUM = '\\\\d+';\r\nconst SDP_TOKEN = \"[!#$%&'*+\\\\-.^_`{|}~a-zA-Z0-9]+\";\r\nconst ANY_NON_WS = '\\\\S+';\r\nconst SP = '\\\\s';\r\nconst WS = '\\\\w*';\r\nconst REST = '.+';\n\nclass Line {\r\n}\n\nvar _a$5;\r\nclass BandwidthLine extends Line {\r\n constructor(bandwidthType, bandwidth) {\r\n super();\r\n this.bandwidthType = bandwidthType;\r\n this.bandwidth = bandwidth;\r\n }\r\n static fromSdpLine(line) {\r\n if (!BandwidthLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(BandwidthLine.regex);\r\n const bandwidthType = tokens[1];\r\n const bandwidth = parseInt(tokens[2], 10);\r\n return new BandwidthLine(bandwidthType, bandwidth);\r\n }\r\n toSdpLine() {\r\n return `b=${this.bandwidthType}:${this.bandwidth}`;\r\n }\r\n}\r\n_a$5 = BandwidthLine;\r\nBandwidthLine.BW_TYPE_REGEX = 'CT|AS|TIAS';\r\nBandwidthLine.regex = new RegExp(`^(${_a$5.BW_TYPE_REGEX}):(${NUM})`);\n\nclass BundleGroupLine extends Line {\r\n constructor(mids) {\r\n super();\r\n this.mids = mids;\r\n }\r\n static fromSdpLine(line) {\r\n if (!BundleGroupLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(BundleGroupLine.regex);\r\n const mids = tokens[1].split(' ');\r\n return new BundleGroupLine(mids);\r\n }\r\n toSdpLine() {\r\n return `a=group:BUNDLE ${this.mids.join(' ')}`;\r\n }\r\n}\r\nBundleGroupLine.regex = new RegExp(`^group:BUNDLE (${REST})`);\n\nvar _a$4;\r\nclass CandidateLine extends Line {\r\n constructor(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions) {\r\n super();\r\n this.foundation = foundation;\r\n this.componentId = componentId;\r\n this.transport = transport;\r\n this.priority = priority;\r\n this.connectionAddress = connectionAddress;\r\n this.port = port;\r\n this.candidateType = candidateType;\r\n this.relAddr = relAddr;\r\n this.relPort = relPort;\r\n this.candidateExtensions = candidateExtensions;\r\n }\r\n static fromSdpLine(line) {\r\n if (!CandidateLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(CandidateLine.regex);\r\n const foundation = tokens[1];\r\n const componentId = parseInt(tokens[2], 10);\r\n const transport = tokens[3];\r\n const priority = parseInt(tokens[4], 10);\r\n const connectionAddress = tokens[5];\r\n const port = parseInt(tokens[6], 10);\r\n const candidateType = tokens[7];\r\n const relAddr = tokens[8];\r\n const relPort = tokens[9] ? parseInt(tokens[9], 10) : undefined;\r\n const candidateExtensions = tokens[10];\r\n return new CandidateLine(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=candidate:${this.foundation} ${this.componentId} ${this.transport} ${this.priority} ${this.connectionAddress} ${this.port} typ ${this.candidateType}`;\r\n if (this.relAddr) {\r\n str += ` raddr ${this.relAddr}`;\r\n }\r\n if (this.relPort) {\r\n str += ` rport ${this.relPort}`;\r\n }\r\n if (this.candidateExtensions) {\r\n str += ` ${this.candidateExtensions}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a$4 = CandidateLine;\r\nCandidateLine.ICE_CHARS = `[a-zA-Z0-9+/]+`;\r\nCandidateLine.regex = new RegExp(`^candidate:(${_a$4.ICE_CHARS}) (${NUM}) (${ANY_NON_WS}) (${NUM}) (${ANY_NON_WS}) (${NUM}) typ (${ANY_NON_WS})(?: raddr (${ANY_NON_WS}))?(?: rport (${NUM}))?(?: (${REST}))?`);\n\nclass ConnectionLine extends Line {\r\n constructor(netType, addrType, ipAddr) {\r\n super();\r\n this.netType = netType;\r\n this.addrType = addrType;\r\n this.ipAddr = ipAddr;\r\n }\r\n static fromSdpLine(line) {\r\n if (!ConnectionLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(ConnectionLine.regex);\r\n const netType = tokens[1];\r\n const addrType = tokens[2];\r\n const ipAddr = tokens[3];\r\n return new ConnectionLine(netType, addrType, ipAddr);\r\n }\r\n toSdpLine() {\r\n return `c=${this.netType} ${this.addrType} ${this.ipAddr}`;\r\n }\r\n}\r\nConnectionLine.regex = new RegExp(`^(${ANY_NON_WS}) (${ANY_NON_WS}) (${ANY_NON_WS})`);\n\nclass ContentLine extends Line {\r\n constructor(values) {\r\n super();\r\n this.values = values;\r\n }\r\n static fromSdpLine(line) {\r\n if (!ContentLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(ContentLine.regex);\r\n const values = tokens[1].split(',');\r\n return new ContentLine(values);\r\n }\r\n toSdpLine() {\r\n return `a=content:${this.values.join(',')}`;\r\n }\r\n}\r\nContentLine.regex = new RegExp(`^content:(${REST})$`);\n\nclass DirectionLine extends Line {\r\n constructor(direction) {\r\n super();\r\n this.direction = direction;\r\n }\r\n static fromSdpLine(line) {\r\n if (!DirectionLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(DirectionLine.regex);\r\n const direction = tokens[1];\r\n return new DirectionLine(direction);\r\n }\r\n toSdpLine() {\r\n return `a=${this.direction}`;\r\n }\r\n}\r\nDirectionLine.regex = /^(sendrecv|sendonly|recvonly|inactive)$/;\n\nvar _a$3;\r\nclass ExtMapLine extends Line {\r\n constructor(id, uri, direction, extensionAttributes) {\r\n super();\r\n this.id = id;\r\n this.uri = uri;\r\n this.direction = direction;\r\n this.extensionAttributes = extensionAttributes;\r\n }\r\n static fromSdpLine(line) {\r\n if (!ExtMapLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(ExtMapLine.regex);\r\n const id = parseInt(tokens[1], 10);\r\n const direction = tokens[2];\r\n const uri = tokens[3];\r\n const extensionAttributes = tokens[4];\r\n return new ExtMapLine(id, uri, direction, extensionAttributes);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=extmap:${this.id}`;\r\n if (this.direction) {\r\n str += `/${this.direction}`;\r\n }\r\n str += ` ${this.uri}`;\r\n if (this.extensionAttributes) {\r\n str += ` ${this.extensionAttributes}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a$3 = ExtMapLine;\r\nExtMapLine.EXTMAP_DIRECTION = `sendonly|recvonly|sendrecv|inactive`;\r\nExtMapLine.regex = new RegExp(`^extmap:(${NUM})(?:/(${_a$3.EXTMAP_DIRECTION}))? (${ANY_NON_WS})(?: (${REST}))?`);\n\nclass FingerprintLine extends Line {\r\n constructor(fingerprint) {\r\n super();\r\n this.fingerprint = fingerprint;\r\n }\r\n static fromSdpLine(line) {\r\n if (!FingerprintLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(FingerprintLine.regex);\r\n const fingerprint = tokens[1];\r\n return new FingerprintLine(fingerprint);\r\n }\r\n toSdpLine() {\r\n return `a=fingerprint:${this.fingerprint}`;\r\n }\r\n}\r\nFingerprintLine.regex = new RegExp(`^fingerprint:(${REST})`);\n\nfunction parseFmtpParams(fmtpParams) {\r\n fmtpParams = fmtpParams.replace(/^a=fmtp:\\d+\\x20/, '');\r\n const fmtpObj = new Map();\r\n if (/^\\d+([/-]\\d+)+$/.test(fmtpParams)) {\r\n fmtpObj.set(fmtpParams, undefined);\r\n return fmtpObj;\r\n }\r\n fmtpParams.split(';').forEach((param) => {\r\n const paramArr = param && param.split('=');\r\n if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {\r\n throw new Error(`Fmtp params is invalid with ${fmtpParams}`);\r\n }\r\n fmtpObj.set(paramArr[0], paramArr[1]);\r\n });\r\n return fmtpObj;\r\n}\r\nclass FmtpLine extends Line {\r\n constructor(payloadType, params) {\r\n super();\r\n this.payloadType = payloadType;\r\n this.params = params;\r\n }\r\n static fromSdpLine(line) {\r\n if (!FmtpLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(FmtpLine.regex);\r\n const payloadType = parseInt(tokens[1], 10);\r\n const params = tokens[2];\r\n return new FmtpLine(payloadType, parseFmtpParams(params));\r\n }\r\n toSdpLine() {\r\n const fmtParams = Array.from(this.params.keys())\r\n .map((key) => {\r\n if (this.params.get(key) !== undefined) {\r\n return `${key}=${this.params.get(key)}`;\r\n }\r\n return `${key}`;\r\n })\r\n .join(';');\r\n return `a=fmtp:${this.payloadType} ${fmtParams}`;\r\n }\r\n}\r\nFmtpLine.regex = new RegExp(`^fmtp:(${NUM}) (${REST})`);\n\nclass IceOptionsLine extends Line {\r\n constructor(options) {\r\n super();\r\n this.options = options;\r\n }\r\n static fromSdpLine(line) {\r\n if (!IceOptionsLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(IceOptionsLine.regex);\r\n const options = tokens[1].split(' ');\r\n return new IceOptionsLine(options);\r\n }\r\n toSdpLine() {\r\n return `a=ice-options:${this.options.join(' ')}`;\r\n }\r\n}\r\nIceOptionsLine.regex = new RegExp(`^ice-options:(${REST})$`);\n\nclass IcePwdLine extends Line {\r\n constructor(pwd) {\r\n super();\r\n this.pwd = pwd;\r\n }\r\n static fromSdpLine(line) {\r\n if (!IcePwdLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(IcePwdLine.regex);\r\n const pwd = tokens[1];\r\n return new IcePwdLine(pwd);\r\n }\r\n toSdpLine() {\r\n return `a=ice-pwd:${this.pwd}`;\r\n }\r\n}\r\nIcePwdLine.regex = new RegExp(`^ice-pwd:(${ANY_NON_WS})$`);\n\nclass IceUfragLine extends Line {\r\n constructor(ufrag) {\r\n super();\r\n this.ufrag = ufrag;\r\n }\r\n static fromSdpLine(line) {\r\n if (!IceUfragLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(IceUfragLine.regex);\r\n const ufrag = tokens[1];\r\n return new IceUfragLine(ufrag);\r\n }\r\n toSdpLine() {\r\n return `a=ice-ufrag:${this.ufrag}`;\r\n }\r\n}\r\nIceUfragLine.regex = new RegExp(`^ice-ufrag:(${ANY_NON_WS})$`);\n\nclass MaxMessageSizeLine extends Line {\r\n constructor(maxMessageSize) {\r\n super();\r\n this.maxMessageSize = maxMessageSize;\r\n }\r\n static fromSdpLine(line) {\r\n if (!MaxMessageSizeLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(MaxMessageSizeLine.regex);\r\n const maxMessageSize = parseInt(tokens[1], 10);\r\n return new MaxMessageSizeLine(maxMessageSize);\r\n }\r\n toSdpLine() {\r\n return `a=max-message-size:${this.maxMessageSize}`;\r\n }\r\n}\r\nMaxMessageSizeLine.regex = new RegExp(`^max-message-size:(${NUM})`);\n\nvar _a$2;\r\nclass MediaLine extends Line {\r\n constructor(type, port, protocol, formats) {\r\n super();\r\n this.type = type;\r\n this.port = port;\r\n this.protocol = protocol;\r\n this.formats = formats;\r\n }\r\n static fromSdpLine(line) {\r\n if (!MediaLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(MediaLine.regex);\r\n const type = tokens[1];\r\n const port = parseInt(tokens[2], 10);\r\n const protocol = tokens[3];\r\n const formats = tokens[4].split(' ');\r\n return new MediaLine(type, port, protocol, formats);\r\n }\r\n toSdpLine() {\r\n return `m=${this.type} ${this.port} ${this.protocol} ${this.formats.join(' ')}`;\r\n }\r\n}\r\n_a$2 = MediaLine;\r\nMediaLine.MEDIA_TYPE = 'audio|video|application';\r\nMediaLine.regex = new RegExp(`^(${_a$2.MEDIA_TYPE}) (${NUM}) (${ANY_NON_WS}) (${REST})`);\n\nclass MidLine extends Line {\r\n constructor(mid) {\r\n super();\r\n this.mid = mid;\r\n }\r\n static fromSdpLine(line) {\r\n if (!MidLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(MidLine.regex);\r\n const mid = tokens[1];\r\n return new MidLine(mid);\r\n }\r\n toSdpLine() {\r\n return `a=mid:${this.mid}`;\r\n }\r\n}\r\nMidLine.regex = new RegExp(`^mid:(${ANY_NON_WS})$`);\n\nclass OriginLine extends Line {\r\n constructor(username, sessionId, sessionVersion, netType, addrType, ipAddr) {\r\n super();\r\n this.username = username;\r\n this.sessionId = sessionId;\r\n this.sessionVersion = sessionVersion;\r\n this.netType = netType;\r\n this.addrType = addrType;\r\n this.ipAddr = ipAddr;\r\n }\r\n static fromSdpLine(line) {\r\n if (!OriginLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(OriginLine.regex);\r\n const username = tokens[1];\r\n const sessionId = tokens[2];\r\n const sessionVersion = parseInt(tokens[3], 10);\r\n const netType = tokens[4];\r\n const addrType = tokens[5];\r\n const ipAddr = tokens[6];\r\n return new OriginLine(username, sessionId, sessionVersion, netType, addrType, ipAddr);\r\n }\r\n toSdpLine() {\r\n return `o=${this.username} ${this.sessionId} ${this.sessionVersion} ${this.netType} ${this.addrType} ${this.ipAddr}`;\r\n }\r\n}\r\nOriginLine.regex = new RegExp(`^(${ANY_NON_WS}) (${ANY_NON_WS}) (${NUM}) (${ANY_NON_WS}) (${ANY_NON_WS}) (${ANY_NON_WS})`);\n\nvar _a$1;\r\nclass RidLine extends Line {\r\n constructor(id, direction, params) {\r\n super();\r\n this.id = id;\r\n this.direction = direction;\r\n this.params = params;\r\n }\r\n static fromSdpLine(line) {\r\n if (!RidLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(RidLine.regex);\r\n const id = tokens[1];\r\n const direction = tokens[2];\r\n const params = tokens[3];\r\n return new RidLine(id, direction, params);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=rid:${this.id} ${this.direction}`;\r\n if (this.params) {\r\n str += ` ${this.params}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a$1 = RidLine;\r\nRidLine.RID_ID = `[\\\\w-]+`;\r\nRidLine.RID_DIRECTION = `\\\\bsend\\\\b|\\\\brecv\\\\b`;\r\nRidLine.regex = new RegExp(`^rid:(${_a$1.RID_ID}) (${_a$1.RID_DIRECTION})(?:${SP}(${REST}))?`);\n\nclass RtcpMuxLine extends Line {\r\n static fromSdpLine(line) {\r\n if (!RtcpMuxLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n return new RtcpMuxLine();\r\n }\r\n toSdpLine() {\r\n return `a=rtcp-mux`;\r\n }\r\n}\r\nRtcpMuxLine.regex = /^rtcp-mux$/;\n\nclass RtcpFbLine extends Line {\r\n constructor(payloadType, feedback) {\r\n super();\r\n this.payloadType = payloadType;\r\n this.feedback = feedback;\r\n }\r\n static fromSdpLine(line) {\r\n if (!RtcpFbLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(RtcpFbLine.regex);\r\n const payloadType = parseInt(tokens[1], 10);\r\n const feedback = tokens[2];\r\n return new RtcpFbLine(payloadType, feedback);\r\n }\r\n toSdpLine() {\r\n return `a=rtcp-fb:${this.payloadType} ${this.feedback}`;\r\n }\r\n}\r\nRtcpFbLine.regex = new RegExp(`^rtcp-fb:(${NUM}) (${REST})`);\n\nvar _a;\r\nclass RtpMapLine extends Line {\r\n constructor(payloadType, encodingName, clockRate, encodingParams) {\r\n super();\r\n this.payloadType = payloadType;\r\n this.encodingName = encodingName;\r\n this.clockRate = clockRate;\r\n this.encodingParams = encodingParams;\r\n }\r\n static fromSdpLine(line) {\r\n if (!RtpMapLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(RtpMapLine.regex);\r\n const payloadType = parseInt(tokens[1], 10);\r\n const encodingName = tokens[2];\r\n const clockRate = parseInt(tokens[3], 10);\r\n const encodingParams = tokens[4];\r\n return new RtpMapLine(payloadType, encodingName, clockRate, encodingParams);\r\n }\r\n toSdpLine() {\r\n let str = '';\r\n str += `a=rtpmap:${this.payloadType} ${this.encodingName}/${this.clockRate}`;\r\n if (this.encodingParams) {\r\n str += `/${this.encodingParams}`;\r\n }\r\n return str;\r\n }\r\n}\r\n_a = RtpMapLine;\r\nRtpMapLine.NON_SLASH_TOKEN = '[^\\\\s/]+';\r\nRtpMapLine.regex = new RegExp(`^rtpmap:(${NUM}) (${_a.NON_SLASH_TOKEN})/(${_a.NON_SLASH_TOKEN})(?:/(${_a.NON_SLASH_TOKEN}))?`);\n\nclass SctpPortLine extends Line {\r\n constructor(port) {\r\n super();\r\n this.port = port;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SctpPortLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SctpPortLine.regex);\r\n const port = parseInt(tokens[1], 10);\r\n return new SctpPortLine(port);\r\n }\r\n toSdpLine() {\r\n return `a=sctp-port:${this.port}`;\r\n }\r\n}\r\nSctpPortLine.regex = new RegExp(`^sctp-port:(${NUM})`);\n\nclass SessionInformationLine extends Line {\r\n constructor(info) {\r\n super();\r\n this.info = info;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SessionInformationLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SessionInformationLine.regex);\r\n const info = tokens[1];\r\n return new SessionInformationLine(info);\r\n }\r\n toSdpLine() {\r\n return `i=${this.info}`;\r\n }\r\n}\r\nSessionInformationLine.regex = new RegExp(`(${REST})`);\n\nclass SessionNameLine extends Line {\r\n constructor(name) {\r\n super();\r\n this.name = name;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SessionNameLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SessionNameLine.regex);\r\n const name = tokens[1];\r\n return new SessionNameLine(name);\r\n }\r\n toSdpLine() {\r\n return `s=${this.name}`;\r\n }\r\n}\r\nSessionNameLine.regex = new RegExp(`^(${REST})`);\n\nclass SetupLine extends Line {\r\n constructor(setup) {\r\n super();\r\n this.setup = setup;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SetupLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SetupLine.regex);\r\n const setup = tokens[1];\r\n return new SetupLine(setup);\r\n }\r\n toSdpLine() {\r\n return `a=setup:${this.setup}`;\r\n }\r\n}\r\nSetupLine.regex = /^setup:(actpass|active|passive)$/;\n\nclass SimulcastLayer {\r\n constructor(id, paused) {\r\n this.id = id;\r\n this.paused = paused;\r\n }\r\n toString() {\r\n return this.paused ? `~${this.id}` : this.id;\r\n }\r\n}\r\nclass SimulcastLayerList {\r\n constructor() {\r\n this.layers = [];\r\n }\r\n addLayer(layer) {\r\n this.layers.push([layer]);\r\n }\r\n addLayerWithAlternatives(alternatives) {\r\n this.layers.push(alternatives);\r\n }\r\n get length() {\r\n return this.layers.length;\r\n }\r\n get(index) {\r\n return this.layers[index];\r\n }\r\n static fromString(str) {\r\n const layerList = new SimulcastLayerList();\r\n const tokens = str.split(';');\r\n if (tokens.length === 1 && !tokens[0].trim()) {\r\n throw new Error('simulcast stream list empty');\r\n }\r\n tokens.forEach((token) => {\r\n if (!token) {\r\n throw new Error('simulcast layer list empty');\r\n }\r\n const ridTokens = token.split(',');\r\n const layers = [];\r\n ridTokens.forEach((ridToken) => {\r\n if (!ridToken || ridToken === '~') {\r\n throw new Error('rid empty');\r\n }\r\n const paused = ridToken[0] === '~';\r\n const rid = paused ? ridToken.substring(1) : ridToken;\r\n layers.push(new SimulcastLayer(rid, paused));\r\n });\r\n layerList.addLayerWithAlternatives(layers);\r\n });\r\n return layerList;\r\n }\r\n toString() {\r\n return this.layers\r\n .map((altArray) => altArray.map((v) => v.toString()).join(','))\r\n .join(';');\r\n }\r\n}\r\nclass SimulcastLine extends Line {\r\n constructor(sendLayers, recvLayers) {\r\n super();\r\n this.sendLayers = sendLayers;\r\n this.recvLayers = recvLayers;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SimulcastLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SimulcastLine.regex);\r\n const bidirectional = tokens[3] && tokens[4];\r\n const firstDirection = tokens[1];\r\n const layerList1 = SimulcastLayerList.fromString(tokens[2]);\r\n let layerList2 = new SimulcastLayerList();\r\n if (bidirectional) {\r\n const secondDirection = tokens[3];\r\n if (firstDirection === secondDirection) {\r\n return undefined;\r\n }\r\n layerList2 = SimulcastLayerList.fromString(tokens[4]);\r\n }\r\n let sendLayerList;\r\n let recvLayerList;\r\n if (firstDirection === 'send') {\r\n sendLayerList = layerList1;\r\n recvLayerList = layerList2;\r\n }\r\n else {\r\n sendLayerList = layerList2;\r\n recvLayerList = layerList1;\r\n }\r\n return new SimulcastLine(sendLayerList, recvLayerList);\r\n }\r\n toSdpLine() {\r\n let str = 'a=simulcast:';\r\n if (this.sendLayers.length) {\r\n str += `send ${this.sendLayers.toString()}`;\r\n if (this.recvLayers.length) {\r\n str += ` `;\r\n }\r\n }\r\n if (this.recvLayers.length) {\r\n str += `recv ${this.recvLayers.toString()}`;\r\n }\r\n return str;\r\n }\r\n}\r\nSimulcastLine.regex = new RegExp(`^simulcast:(send|recv) (${ANY_NON_WS})(?: (send|recv) (${ANY_NON_WS}))?`);\n\nclass SsrcLine extends Line {\r\n constructor(ssrcId, attribute, attributeValue = undefined, attributeData = undefined) {\r\n super();\r\n this.ssrcId = ssrcId;\r\n this.attribute = attribute;\r\n this.attributeValue = attributeValue;\r\n this.attributeData = attributeData;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SsrcLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SsrcLine.regex);\r\n const ssrcId = parseInt(tokens[1], 10);\r\n const attribute = tokens[2];\r\n const attributeValue = tokens[3];\r\n const attributeData = tokens[4];\r\n return new SsrcLine(ssrcId, attribute, attributeValue, attributeData);\r\n }\r\n toSdpLine() {\r\n let str = `a=ssrc:${this.ssrcId} ${this.attribute}`;\r\n if (this.attributeValue) {\r\n str += `:${this.attributeValue}`;\r\n }\r\n if (this.attributeData) {\r\n str += ` ${this.attributeData}`;\r\n }\r\n return str;\r\n }\r\n}\r\nSsrcLine.regex = new RegExp(`^ssrc:(${NUM}) (${SDP_TOKEN})(?::(${SDP_TOKEN})?(?: (${ANY_NON_WS}))?)?$`);\n\nclass SsrcGroupLine extends Line {\r\n constructor(semantics, ssrcs) {\r\n super();\r\n this.semantics = semantics;\r\n this.ssrcs = ssrcs;\r\n }\r\n static fromSdpLine(line) {\r\n if (!SsrcGroupLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(SsrcGroupLine.regex);\r\n const semantics = tokens[1];\r\n const ssrcs = tokens[2].split(' ').map((ssrcStr) => parseInt(ssrcStr, 10));\r\n return new SsrcGroupLine(semantics, ssrcs);\r\n }\r\n toSdpLine() {\r\n return `a=ssrc-group:${this.semantics} ${this.ssrcs.join(' ')}`;\r\n }\r\n}\r\nSsrcGroupLine.regex = new RegExp(`^ssrc-group:(SIM|FID|FEC) ((?:${NUM}${SP}*)+)`);\n\nclass TimingLine extends Line {\r\n constructor(startTime, stopTime) {\r\n super();\r\n this.startTime = startTime;\r\n this.stopTime = stopTime;\r\n }\r\n static fromSdpLine(line) {\r\n if (!TimingLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(TimingLine.regex);\r\n const startTime = parseInt(tokens[1], 10);\r\n const stopTime = parseInt(tokens[2], 10);\r\n return new TimingLine(startTime, stopTime);\r\n }\r\n toSdpLine() {\r\n return `t=${this.startTime} ${this.stopTime}`;\r\n }\r\n}\r\nTimingLine.regex = new RegExp(`^(${NUM}) (${NUM})`);\n\nclass VersionLine extends Line {\r\n constructor(version) {\r\n super();\r\n this.version = version;\r\n }\r\n static fromSdpLine(line) {\r\n if (!VersionLine.regex.test(line)) {\r\n return undefined;\r\n }\r\n const tokens = line.match(VersionLine.regex);\r\n const version = parseInt(tokens[1], 10);\r\n return new VersionLine(version);\r\n }\r\n toSdpLine() {\r\n return `v=${this.version}`;\r\n }\r\n}\r\nVersionLine.regex = new RegExp(`^(${NUM})$`);\n\nclass UnknownLine extends Line {\r\n constructor(value) {\r\n super();\r\n this.value = value;\r\n }\r\n static fromSdpLine(line) {\r\n const tokens = line.match(UnknownLine.regex);\r\n const value = tokens[1];\r\n return new UnknownLine(value);\r\n }\r\n toSdpLine() {\r\n return `${this.value}`;\r\n }\r\n}\r\nUnknownLine.regex = new RegExp(`(${REST})`);\n\nclass IceInfo {\r\n constructor() {\r\n this.candidates = [];\r\n }\r\n addLine(line) {\r\n if (line instanceof IceUfragLine) {\r\n this.ufrag = line;\r\n return true;\r\n }\r\n if (line instanceof IcePwdLine) {\r\n this.pwd = line;\r\n return true;\r\n }\r\n if (line instanceof IceOptionsLine) {\r\n this.options = line;\r\n return true;\r\n }\r\n if (line instanceof CandidateLine) {\r\n this.candidates.push(line);\r\n return true;\r\n }\r\n return false;\r\n }\r\n toLines() {\r\n const lines = [];\r\n if (this.ufrag) {\r\n lines.push(this.ufrag);\r\n }\r\n if (this.pwd) {\r\n lines.push(this.pwd);\r\n }\r\n if (this.options) {\r\n lines.push(this.options);\r\n }\r\n this.candidates.forEach((candidate) => lines.push(candidate));\r\n return lines;\r\n }\r\n}\n\nclass MediaDescription {\r\n constructor(type, port, protocol) {\r\n this.iceInfo = new IceInfo();\r\n this.otherLines = [];\r\n this.type = type;\r\n this.port = port;\r\n this.protocol = protocol;\r\n }\r\n findOtherLine(ty) {\r\n return this.otherLines.find((line) => line instanceof ty);\r\n }\r\n addLine(line) {\r\n if (line instanceof BundleGroupLine) {\r\n throw new Error(`Error: bundle group line not allowed in media description`);\r\n }\r\n if (line instanceof BandwidthLine) {\r\n this.bandwidth = line;\r\n return true;\r\n }\r\n if (line instanceof MidLine) {\r\n this.mid = line.mid;\r\n return true;\r\n }\r\n if (line instanceof FingerprintLine) {\r\n this.fingerprint = line.fingerprint;\r\n return true;\r\n }\r\n if (line instanceof SetupLine) {\r\n this.setup = line.setup;\r\n return true;\r\n }\r\n if (line instanceof ConnectionLine) {\r\n this.connection = line;\r\n return true;\r\n }\r\n if (line instanceof ContentLine) {\r\n this.content = line;\r\n return true;\r\n }\r\n return this.iceInfo.addLine(line);\r\n }\r\n}\n\nclass ApplicationMediaDescription extends MediaDescription {\r\n constructor(mediaLine) {\r\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\r\n this.fmts = [];\r\n this.fmts = mediaLine.formats;\r\n }\r\n toLines() {\r\n const lines = [];\r\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.fmts));\r\n if (this.connection) {\r\n lines.push(this.connection);\r\n }\r\n if (this.bandwidth) {\r\n lines.push(this.bandwidth);\r\n }\r\n lines.push(...this.iceInfo.toLines());\r\n if (this.fingerprint) {\r\n lines.push(new FingerprintLine(this.fingerprint));\r\n }\r\n if (this.setup) {\r\n lines.push(new SetupLine(this.setup));\r\n }\r\n if (this.mid) {\r\n lines.push(new MidLine(this.mid));\r\n }\r\n if (this.content) {\r\n lines.push(this.content);\r\n }\r\n if (this.sctpPort) {\r\n lines.push(new SctpPortLine(this.sctpPort));\r\n }\r\n if (this.maxMessageSize) {\r\n lines.push(new MaxMessageSizeLine(this.maxMessageSize));\r\n }\r\n lines.push(...this.otherLines);\r\n return lines;\r\n }\r\n addLine(line) {\r\n if (super.addLine(line)) {\r\n return true;\r\n }\r\n if (line instanceof MediaLine) {\r\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\r\n }\r\n if (line instanceof SctpPortLine) {\r\n this.sctpPort = line.port;\r\n return true;\r\n }\r\n if (line instanceof MaxMessageSizeLine) {\r\n this.maxMessageSize = line.maxMessageSize;\r\n return true;\r\n }\r\n this.otherLines.push(line);\r\n return true;\r\n }\r\n}\n\nclass CodecInfo {\r\n constructor(pt) {\r\n this.fmtParams = new Map();\r\n this.feedback = [];\r\n this.pt = pt;\r\n }\r\n addLine(line) {\r\n if (line instanceof RtpMapLine) {\r\n this.name = line.encodingName;\r\n this.clockRate = line.clockRate;\r\n this.encodingParams = line.encodingParams;\r\n return true;\r\n }\r\n if (line instanceof FmtpLine) {\r\n this.fmtParams = new Map([\r\n ...Array.from(this.fmtParams.entries()),\r\n ...Array.from(line.params.entries()),\r\n ]);\r\n if (line.params.has('apt')) {\r\n const apt = line.params.get('apt');\r\n this.primaryCodecPt = parseInt(apt, 10);\r\n }\r\n return true;\r\n }\r\n if (line instanceof RtcpFbLine) {\r\n this.feedback.push(line.feedback);\r\n return true;\r\n }\r\n return false;\r\n }\r\n toLines() {\r\n const lines = [];\r\n lines.push(new RtpMapLine(this.pt, this.name, this.clockRate, this.encodingParams));\r\n this.feedback.forEach((fb) => {\r\n lines.push(new RtcpFbLine(this.pt, fb));\r\n });\r\n if (this.fmtParams.size > 0) {\r\n lines.push(new FmtpLine(this.pt, this.fmtParams));\r\n }\r\n return lines;\r\n }\r\n}\n\nclass AvMediaDescription extends MediaDescription {\r\n constructor(mediaLine) {\r\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\r\n this.pts = [];\r\n this.extMaps = [];\r\n this.rids = [];\r\n this.codecs = new Map();\r\n this.rtcpMux = false;\r\n this.ssrcs = [];\r\n this.ssrcGroups = [];\r\n this.pts = mediaLine.formats.map((fmt) => {\r\n return parseInt(fmt, 10);\r\n });\r\n this.pts.forEach((pt) => this.codecs.set(pt, new CodecInfo(pt)));\r\n }\r\n toLines() {\r\n const lines = [];\r\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.pts.map((pt) => `${pt}`)));\r\n if (this.connection) {\r\n lines.push(this.connection);\r\n }\r\n if (this.bandwidth) {\r\n lines.push(this.bandwidth);\r\n }\r\n lines.push(...this.iceInfo.toLines());\r\n if (this.fingerprint) {\r\n lines.push(new FingerprintLine(this.fingerprint));\r\n }\r\n if (this.setup) {\r\n lines.push(new SetupLine(this.setup));\r\n }\r\n if (this.mid) {\r\n lines.push(new MidLine(this.mid));\r\n }\r\n if (this.rtcpMux) {\r\n lines.push(new RtcpMuxLine());\r\n }\r\n if (this.content) {\r\n lines.push(this.content);\r\n }\r\n this.extMaps.forEach((extMap) => lines.push(extMap));\r\n this.rids.forEach((rid) => lines.push(rid));\r\n if (this.simulcast) {\r\n lines.push(this.simulcast);\r\n }\r\n if (this.direction) {\r\n lines.push(new DirectionLine(this.direction));\r\n }\r\n this.codecs.forEach((codec) => lines.push(...codec.toLines()));\r\n lines.push(...this.ssrcs);\r\n lines.push(...this.ssrcGroups);\r\n lines.push(...this.otherLines);\r\n return lines;\r\n }\r\n addLine(line) {\r\n if (super.addLine(line)) {\r\n return true;\r\n }\r\n if (line instanceof MediaLine) {\r\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\r\n }\r\n if (line instanceof DirectionLine) {\r\n this.direction = line.direction;\r\n return true;\r\n }\r\n if (line instanceof ExtMapLine) {\r\n this.extMaps.push(line);\r\n return true;\r\n }\r\n if (line instanceof RidLine) {\r\n this.rids.push(line);\r\n return true;\r\n }\r\n if (line instanceof RtcpMuxLine) {\r\n this.rtcpMux = true;\r\n return true;\r\n }\r\n if (line instanceof SimulcastLine) {\r\n this.simulcast = line;\r\n return true;\r\n }\r\n if (line instanceof RtpMapLine || line instanceof FmtpLine || line instanceof RtcpFbLine) {\r\n const codec = this.codecs.get(line.payloadType);\r\n if (!codec) {\r\n throw new Error(`Error: got line for unknown codec: ${line.toSdpLine()}`);\r\n }\r\n codec.addLine(line);\r\n return true;\r\n }\r\n if (line instanceof SsrcLine) {\r\n this.ssrcs.push(line);\r\n return true;\r\n }\r\n if (line instanceof SsrcGroupLine) {\r\n this.ssrcGroups.push(line);\r\n return true;\r\n }\r\n this.otherLines.push(line);\r\n return true;\r\n }\r\n getCodecByPt(pt) {\r\n return this.codecs.get(pt);\r\n }\r\n removePt(pt) {\r\n const associatedPts = [...this.codecs.values()]\r\n .filter((ci) => ci.primaryCodecPt === pt)\r\n .map((ci) => ci.pt);\r\n const allPtsToRemove = [pt, ...associatedPts];\r\n allPtsToRemove.forEach((ptToRemove) => {\r\n this.codecs.delete(ptToRemove);\r\n });\r\n this.pts = this.pts.filter((existingPt) => allPtsToRemove.indexOf(existingPt) === -1);\r\n }\r\n}\n\nclass SessionDescription {\r\n constructor() {\r\n this.groups = [];\r\n this.otherLines = [];\r\n }\r\n addLine(line) {\r\n if (line instanceof VersionLine) {\r\n this.version = line;\r\n return true;\r\n }\r\n if (line instanceof OriginLine) {\r\n this.origin = line;\r\n return true;\r\n }\r\n if (line instanceof SessionNameLine) {\r\n this.sessionName = line;\r\n return true;\r\n }\r\n if (line instanceof SessionInformationLine) {\r\n this.information = line;\r\n return true;\r\n }\r\n if (line instanceof TimingLine) {\r\n this.timing = line;\r\n return true;\r\n }\r\n if (line instanceof ConnectionLine) {\r\n this.connection = line;\r\n return true;\r\n }\r\n if (line instanceof BandwidthLine) {\r\n this.bandwidth = line;\r\n return true;\r\n }\r\n if (line instanceof BundleGroupLine) {\r\n this.groups.push(line);\r\n return true;\r\n }\r\n this.otherLines.push(line);\r\n return true;\r\n }\r\n toLines() {\r\n const lines = [];\r\n if (this.version) {\r\n lines.push(this.version);\r\n }\r\n if (this.origin) {\r\n lines.push(this.origin);\r\n }\r\n if (this.sessionName) {\r\n lines.push(this.sessionName);\r\n }\r\n if (this.information) {\r\n lines.push(this.information);\r\n }\r\n if (this.connection) {\r\n lines.push(this.connection);\r\n }\r\n if (this.bandwidth) {\r\n lines.push(this.bandwidth);\r\n }\r\n if (this.timing) {\r\n lines.push(this.timing);\r\n }\r\n if (this.groups) {\r\n lines.push(...this.groups);\r\n }\r\n lines.push(...this.otherLines);\r\n return lines;\r\n }\r\n}\n\nclass Sdp {\r\n constructor() {\r\n this.session = new SessionDescription();\r\n this.media = [];\r\n }\r\n get avMedia() {\r\n return this.media.filter((mi) => mi instanceof AvMediaDescription);\r\n }\r\n toString() {\r\n const lines = [];\r\n lines.push(...this.session.toLines());\r\n this.media.forEach((m) => lines.push(...m.toLines()));\r\n return `${lines.map((l) => l.toSdpLine()).join('\\r\\n')}\\r\\n`;\r\n }\r\n}\n\nclass Grammar {\r\n constructor() {\r\n this.parsers = new Map();\r\n }\r\n addParser(lineType, parser) {\r\n const parsers = this.parsers.get(lineType) || [];\r\n parsers.push(parser);\r\n this.parsers.set(lineType, parsers);\r\n }\r\n getParsers(lineType) {\r\n return this.parsers.get(lineType) || [];\r\n }\r\n}\r\nclass SdpGrammar extends Grammar {\r\n constructor() {\r\n super();\r\n this.addParser('v', VersionLine.fromSdpLine);\r\n this.addParser('o', OriginLine.fromSdpLine);\r\n this.addParser('c', ConnectionLine.fromSdpLine);\r\n this.addParser('i', SessionInformationLine.fromSdpLine);\r\n this.addParser('m', MediaLine.fromSdpLine);\r\n this.addParser('s', SessionNameLine.fromSdpLine);\r\n this.addParser('t', TimingLine.fromSdpLine);\r\n this.addParser('b', BandwidthLine.fromSdpLine);\r\n this.addParser('a', RtpMapLine.fromSdpLine);\r\n this.addParser('a', RtcpFbLine.fromSdpLine);\r\n this.addParser('a', FmtpLine.fromSdpLine);\r\n this.addParser('a', DirectionLine.fromSdpLine);\r\n this.addParser('a', ExtMapLine.fromSdpLine);\r\n this.addParser('a', MidLine.fromSdpLine);\r\n this.addParser('a', IceUfragLine.fromSdpLine);\r\n this.addParser('a', IcePwdLine.fromSdpLine);\r\n this.addParser('a', IceOptionsLine.fromSdpLine);\r\n this.addParser('a', FingerprintLine.fromSdpLine);\r\n this.addParser('a', SetupLine.fromSdpLine);\r\n this.addParser('a', SctpPortLine.fromSdpLine);\r\n this.addParser('a', MaxMessageSizeLine.fromSdpLine);\r\n this.addParser('a', RtcpMuxLine.fromSdpLine);\r\n this.addParser('a', BundleGroupLine.fromSdpLine);\r\n this.addParser('a', ContentLine.fromSdpLine);\r\n this.addParser('a', RidLine.fromSdpLine);\r\n this.addParser('a', CandidateLine.fromSdpLine);\r\n this.addParser('a', SimulcastLine.fromSdpLine);\r\n this.addParser('a', SsrcLine.fromSdpLine);\r\n this.addParser('a', SsrcGroupLine.fromSdpLine);\r\n }\r\n}\r\nconst DefaultSdpGrammar = new SdpGrammar();\r\nfunction isValidLine(line) {\r\n return line.length > 2;\r\n}\r\nfunction parseToModel(lines) {\r\n const sdp = new Sdp();\r\n let currBlock = sdp.session;\r\n lines.forEach((l) => {\r\n if (l instanceof MediaLine) {\r\n let mediaInfo;\r\n if (l.type === 'audio' || l.type === 'video') {\r\n mediaInfo = new AvMediaDescription(l);\r\n }\r\n else if (l.type === 'application') {\r\n mediaInfo = new ApplicationMediaDescription(l);\r\n }\r\n else {\r\n throw new Error(`Unhandled media type: ${l.type}`);\r\n }\r\n sdp.media.push(mediaInfo);\r\n currBlock = mediaInfo;\r\n }\r\n else {\r\n currBlock.addLine(l);\r\n }\r\n });\r\n return sdp;\r\n}\r\nfunction parseToLines(sdp, grammar) {\r\n const lines = [];\r\n sdp\r\n .split(/(\\r\\n|\\r|\\n)/)\r\n .filter(isValidLine)\r\n .forEach((l) => {\r\n const lineType = l[0];\r\n const lineValue = l.slice(2);\r\n const parsers = grammar.getParsers(lineType);\r\n for (const parser of parsers) {\r\n const result = parser(lineValue);\r\n if (result) {\r\n lines.push(result);\r\n return;\r\n }\r\n }\r\n const result = UnknownLine.fromSdpLine(l);\r\n lines.push(result);\r\n });\r\n return lines;\r\n}\r\nfunction parse(sdp, grammar = DefaultSdpGrammar) {\r\n const lines = parseToLines(sdp, grammar);\r\n const parsed = parseToModel(lines);\r\n return parsed;\r\n}\n\nfunction disableRtcpFbValue(sdp, rtcpFbValue) {\r\n sdp.avMedia.forEach((media) => {\r\n media.codecs.forEach((codec) => {\r\n codec.feedback = codec.feedback.filter((fb) => fb !== rtcpFbValue);\r\n });\r\n });\r\n}\r\nfunction disableRemb(sdp) {\r\n disableRtcpFbValue(sdp, 'goog-remb');\r\n}\r\nfunction removeCodec(sdp, codecName) {\r\n sdp.avMedia.forEach((media) => {\r\n const codecInfos = [...media.codecs.entries()].filter(([, ci]) => { var _a; return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase(); });\r\n codecInfos.forEach(([pt]) => media.removePt(pt));\r\n });\r\n}\n\nfunction hasCodec(codecName, mLine) {\r\n return [...mLine.codecs.values()].some((ci) => { var _a; return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase(); });\r\n}\n\nexport { ANY_NON_WS, ApplicationMediaDescription, AvMediaDescription, BandwidthLine, BundleGroupLine, CandidateLine, CodecInfo, ConnectionLine, ContentLine, DefaultSdpGrammar, DirectionLine, ExtMapLine, FingerprintLine, FmtpLine, Grammar, IceInfo, IceOptionsLine, IcePwdLine, IceUfragLine, Line, MaxMessageSizeLine, MediaDescription, MediaLine, MidLine, NUM, OriginLine, REST, RidLine, RtcpFbLine, RtcpMuxLine, RtpMapLine, SDP_TOKEN, SP, SctpPortLine, Sdp, SessionDescription, SessionInformationLine, SessionNameLine, SetupLine, SimulcastLayer, SimulcastLayerList, SimulcastLine, SsrcGroupLine, SsrcLine, TimingLine, VersionLine, WS, disableRemb, disableRtcpFbValue, hasCodec, parse, parseFmtpParams, parseToLines, parseToModel, removeCodec };\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]<u[1][a])return-1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];\"object\"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||\"\"},e}();t.default=i,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];\"string\"==typeof a?(i[t]=a,s+=1):\"object\"==typeof a&&(r[t]=a,n+=1)})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})}));","/**\n * Creates a continuation function with some arguments already applied.\n *\n * Useful as a shorthand when combined with other control flow functions. Any\n * arguments passed to the returned function are added to the arguments\n * originally passed to apply.\n *\n * @name apply\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function you want to eventually apply all\n * arguments to. Invokes with (arguments...).\n * @param {...*} arguments... - Any number of arguments to automatically apply\n * when the continuation is called.\n * @returns {Function} the partially-applied function\n * @example\n *\n * // using apply\n * async.parallel([\n * async.apply(fs.writeFile, 'testfile1', 'test1'),\n * async.apply(fs.writeFile, 'testfile2', 'test2')\n * ]);\n *\n *\n * // the same process without using apply\n * async.parallel([\n * function(callback) {\n * fs.writeFile('testfile1', 'test1', callback);\n * },\n * function(callback) {\n * fs.writeFile('testfile2', 'test2', callback);\n * }\n * ]);\n *\n * // It's possible to pass any number of additional arguments when calling the\n * // continuation:\n *\n * node> var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */\nfunction apply(fn, ...args) {\n return (...callArgs) => fn(...args,...callArgs);\n}\n\nfunction initialParams (fn) {\n return function (...args/*, callback*/) {\n var callback = args.pop();\n return fn.call(this, args, callback);\n };\n}\n\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n return (fn, ...args) => defer(() => fn(...args));\n}\n\nvar _defer;\n\nif (hasQueueMicrotask) {\n _defer = queueMicrotask;\n} else if (hasSetImmediate) {\n _defer = setImmediate;\n} else if (hasNextTick) {\n _defer = process.nextTick;\n} else {\n _defer = fallback;\n}\n\nvar setImmediate$1 = wrap(_defer);\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n if (isAsync(func)) {\n return function (...args/*, callback*/) {\n const callback = args.pop();\n const promise = func.apply(this, args);\n return handlePromise(promise, callback)\n }\n }\n\n return initialParams(function (args, callback) {\n var result;\n try {\n result = func.apply(this, args);\n } catch (e) {\n return callback(e);\n }\n // if result is Promise object\n if (result && typeof result.then === 'function') {\n return handlePromise(result, callback)\n } else {\n callback(null, result);\n }\n });\n}\n\nfunction handlePromise(promise, callback) {\n return promise.then(value => {\n invokeCallback(callback, null, value);\n }, err => {\n invokeCallback(callback, err && err.message ? err : new Error(err));\n });\n}\n\nfunction invokeCallback(callback, error, value) {\n try {\n callback(error, value);\n } catch (err) {\n setImmediate$1(e => { throw e }, err);\n }\n}\n\nfunction isAsync(fn) {\n return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n if (typeof asyncFn !== 'function') throw new Error('expected a function')\n return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n}\n\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify (asyncFn, arity = asyncFn.length) {\n if (!arity) throw new Error('arity is undefined')\n function awaitable (...args) {\n if (typeof args[arity - 1] === 'function') {\n return asyncFn.apply(this, args)\n }\n\n return new Promise((resolve, reject) => {\n args[arity - 1] = (err, ...cbArgs) => {\n if (err) return reject(err)\n resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n };\n asyncFn.apply(this, args);\n })\n }\n\n return awaitable\n}\n\nfunction applyEach (eachfn) {\n return function applyEach(fns, ...callArgs) {\n const go = awaitify(function (callback) {\n var that = this;\n return eachfn(fns, (fn, cb) => {\n wrapAsync(fn).apply(that, callArgs.concat(cb));\n }, callback);\n });\n return go;\n };\n}\n\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n arr = arr || [];\n var results = [];\n var counter = 0;\n var _iteratee = wrapAsync(iteratee);\n\n return eachfn(arr, (value, _, iterCb) => {\n var index = counter++;\n _iteratee(value, (err, v) => {\n results[index] = v;\n iterCb(err);\n });\n }, err => {\n callback(err, results);\n });\n}\n\nfunction isArrayLike(value) {\n return value &&\n typeof value.length === 'number' &&\n value.length >= 0 &&\n value.length % 1 === 0;\n}\n\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nconst breakLoop = {};\n\nfunction once(fn) {\n function wrapper (...args) {\n if (fn === null) return;\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n }\n Object.assign(wrapper, fn);\n return wrapper\n}\n\nfunction getIterator (coll) {\n return coll[Symbol.iterator] && coll[Symbol.iterator]();\n}\n\nfunction createArrayIterator(coll) {\n var i = -1;\n var len = coll.length;\n return function next() {\n return ++i < len ? {value: coll[i], key: i} : null;\n }\n}\n\nfunction createES2015Iterator(iterator) {\n var i = -1;\n return function next() {\n var item = iterator.next();\n if (item.done)\n return null;\n i++;\n return {value: item.value, key: i};\n }\n}\n\nfunction createObjectIterator(obj) {\n var okeys = obj ? Object.keys(obj) : [];\n var i = -1;\n var len = okeys.length;\n return function next() {\n var key = okeys[++i];\n if (key === '__proto__') {\n return next();\n }\n return i < len ? {value: obj[key], key} : null;\n };\n}\n\nfunction createIterator(coll) {\n if (isArrayLike(coll)) {\n return createArrayIterator(coll);\n }\n\n var iterator = getIterator(coll);\n return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\n\nfunction onlyOnce(fn) {\n return function (...args) {\n if (fn === null) throw new Error(\"Callback was already called.\");\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n };\n}\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n let done = false;\n let canceled = false;\n let awaiting = false;\n let running = 0;\n let idx = 0;\n\n function replenish() {\n //console.log('replenish')\n if (running >= limit || awaiting || done) return\n //console.log('replenish awaiting')\n awaiting = true;\n generator.next().then(({value, done: iterDone}) => {\n //console.log('got value', value)\n if (canceled || done) return\n awaiting = false;\n if (iterDone) {\n done = true;\n if (running <= 0) {\n //console.log('done nextCb')\n callback(null);\n }\n return;\n }\n running++;\n iteratee(value, idx, iterateeCallback);\n idx++;\n replenish();\n }).catch(handleError);\n }\n\n function iterateeCallback(err, result) {\n //console.log('iterateeCallback')\n running -= 1;\n if (canceled) return\n if (err) return handleError(err)\n\n if (err === false) {\n done = true;\n canceled = true;\n return\n }\n\n if (result === breakLoop || (done && running <= 0)) {\n done = true;\n //console.log('done iterCb')\n return callback(null);\n }\n replenish();\n }\n\n function handleError(err) {\n if (canceled) return\n awaiting = false;\n done = true;\n callback(err);\n }\n\n replenish();\n}\n\nvar eachOfLimit = (limit) => {\n return (obj, iteratee, callback) => {\n callback = once(callback);\n if (limit <= 0) {\n throw new RangeError('concurrency limit cannot be less than 1')\n }\n if (!obj) {\n return callback(null);\n }\n if (isAsyncGenerator(obj)) {\n return asyncEachOfLimit(obj, limit, iteratee, callback)\n }\n if (isAsyncIterable(obj)) {\n return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback)\n }\n var nextElem = createIterator(obj);\n var done = false;\n var canceled = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n if (canceled) return\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n }\n else if (err === false) {\n done = true;\n canceled = true;\n }\n else if (value === breakLoop || (done && running <= 0)) {\n done = true;\n return callback(null);\n }\n else if (!looping) {\n replenish();\n }\n }\n\n function replenish () {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n};\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfLimit$1(coll, limit, iteratee, callback) {\n return eachOfLimit(limit)(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOfLimit$2 = awaitify(eachOfLimit$1, 4);\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n callback = once(callback);\n var index = 0,\n completed = 0,\n {length} = coll,\n canceled = false;\n if (length === 0) {\n callback(null);\n }\n\n function iteratorCallback(err, value) {\n if (err === false) {\n canceled = true;\n }\n if (canceled === true) return\n if (err) {\n callback(err);\n } else if ((++completed === length) || value === breakLoop) {\n callback(null);\n }\n }\n\n for (; index < length; index++) {\n iteratee(coll[index], index, onlyOnce(iteratorCallback));\n }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nfunction eachOfGeneric (coll, iteratee, callback) {\n return eachOfLimit$2(coll, Infinity, iteratee, callback);\n}\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dev.json is a file containing a valid json object config for dev environment\n * // dev.json is a file containing a valid json object config for test environment\n * // prod.json is a file containing a valid json object config for prod environment\n * // invalid.json is a file with a malformed json object\n *\n * let configs = {}; //global variable\n * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};\n * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};\n *\n * // asynchronous function that reads a json file and parses the contents as json object\n * function parseFile(file, key, callback) {\n * fs.readFile(file, \"utf8\", function(err, data) {\n * if (err) return calback(err);\n * try {\n * configs[key] = JSON.parse(data);\n * } catch (e) {\n * return callback(e);\n * }\n * callback();\n * });\n * }\n *\n * // Using callbacks\n * async.forEachOf(validConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * } else {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * // JSON parse error exception\n * } else {\n * console.log(configs);\n * }\n * });\n *\n * // Using Promises\n * async.forEachOf(validConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n * console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * }).catch( err => {\n * console.error(err);\n * // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.forEachOf(validConfigFileMap, parseFile);\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * //Error handing\n * async () => {\n * try {\n * let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n * console.log(configs);\n * }\n * catch (err) {\n * console.log(err);\n * // JSON parse error exception\n * }\n * }\n *\n */\nfunction eachOf(coll, iteratee, callback) {\n var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n return eachOfImplementation(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOf$1 = awaitify(eachOf, 3);\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callbacks\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array. The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.map(fileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.map(fileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.map(fileList, getFileSizeInBytes);\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.map(withMissingFileList, getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction map (coll, iteratee, callback) {\n return _asyncMap(eachOf$1, coll, iteratee, callback)\n}\nvar map$1 = awaitify(map, 3);\n\n/**\n * Applies the provided arguments to each function in the array, calling\n * `callback` after all functions have completed. If you only provide the first\n * argument, `fns`, then it will return a function which lets you pass in the\n * arguments as if it were a single function call. If more arguments are\n * provided, `callback` is required while `args` is still optional. The results\n * for each of the applied async functions are passed to the final callback\n * as an array.\n *\n * @name applyEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s\n * to all call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - Returns a function that takes no args other than\n * an optional callback, that is the result of applying the `args` to each\n * of the functions.\n * @example\n *\n * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket')\n *\n * appliedFn((err, results) => {\n * // results[0] is the results for `enableSearch`\n * // results[1] is the results for `updateSchema`\n * });\n *\n * // partial application example:\n * async.each(\n * buckets,\n * async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(),\n * callback\n * );\n */\nvar applyEach$1 = applyEach(map$1);\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfSeries(coll, iteratee, callback) {\n return eachOfLimit$2(coll, 1, iteratee, callback)\n}\nvar eachOfSeries$1 = awaitify(eachOfSeries, 3);\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapSeries (coll, iteratee, callback) {\n return _asyncMap(eachOfSeries$1, coll, iteratee, callback)\n}\nvar mapSeries$1 = awaitify(mapSeries, 3);\n\n/**\n * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n *\n * @name applyEachSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all\n * call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - A function, that when called, is the result of\n * appling the `args` to the list of functions. It takes no args, other than\n * a callback.\n */\nvar applyEachSeries = applyEach(mapSeries$1);\n\nconst PROMISE_SYMBOL = Symbol('promiseCallback');\n\nfunction promiseCallback () {\n let resolve, reject;\n function callback (err, ...args) {\n if (err) return reject(err)\n resolve(args.length > 1 ? args : args[0]);\n }\n\n callback[PROMISE_SYMBOL] = new Promise((res, rej) => {\n resolve = res,\n reject = rej;\n });\n\n return callback\n}\n\n/**\n * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on\n * their requirements. Each function can optionally depend on other functions\n * being completed first, and each function is run as soon as its requirements\n * are satisfied.\n *\n * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence\n * will stop. Further tasks will not execute (so any other functions depending\n * on it will not run), and the main `callback` is immediately called with the\n * error.\n *\n * {@link AsyncFunction}s also receive an object containing the results of functions which\n * have completed so far as the first argument, if they have dependencies. If a\n * task function has no dependencies, it will only be passed a callback.\n *\n * @name auto\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object} tasks - An object. Each of its properties is either a\n * function or an array of requirements, with the {@link AsyncFunction} itself the last item\n * in the array. The object's key of a property serves as the name of the task\n * defined by that property, i.e. can be used when specifying requirements for\n * other tasks. The function receives one or two arguments:\n * * a `results` object, containing the results of the previously executed\n * functions, only passed if the task has any dependencies,\n * * a `callback(err, result)` function, which must be called when finished,\n * passing an `error` (which can be `null`) and the result of the function's\n * execution.\n * @param {number} [concurrency=Infinity] - An optional `integer` for\n * determining the maximum number of tasks that can be run in parallel. By\n * default, as many as possible.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback. Results are always returned; however, if an\n * error occurs, no further `tasks` will be performed, and the results object\n * will only contain partial results. Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n * @example\n *\n * //Using Callbacks\n * async.auto({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * }, function(err, results) {\n * if (err) {\n * console.log('err = ', err);\n * }\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * });\n *\n * //Using Promises\n * async.auto({\n * get_data: function(callback) {\n * console.log('in get_data');\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * console.log('in make_folder');\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * }).then(results => {\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * }).catch(err => {\n * console.log('err = ', err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.auto({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * });\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction auto(tasks, concurrency, callback) {\n if (typeof concurrency !== 'number') {\n // concurrency is optional, shift the args.\n callback = concurrency;\n concurrency = null;\n }\n callback = once(callback || promiseCallback());\n var numTasks = Object.keys(tasks).length;\n if (!numTasks) {\n return callback(null);\n }\n if (!concurrency) {\n concurrency = numTasks;\n }\n\n var results = {};\n var runningTasks = 0;\n var canceled = false;\n var hasError = false;\n\n var listeners = Object.create(null);\n\n var readyTasks = [];\n\n // for cycle detection:\n var readyToCheck = []; // tasks that have been identified as reachable\n // without the possibility of returning to an ancestor task\n var uncheckedDependencies = {};\n\n Object.keys(tasks).forEach(key => {\n var task = tasks[key];\n if (!Array.isArray(task)) {\n // no dependencies\n enqueueTask(key, [task]);\n readyToCheck.push(key);\n return;\n }\n\n var dependencies = task.slice(0, task.length - 1);\n var remainingDependencies = dependencies.length;\n if (remainingDependencies === 0) {\n enqueueTask(key, task);\n readyToCheck.push(key);\n return;\n }\n uncheckedDependencies[key] = remainingDependencies;\n\n dependencies.forEach(dependencyName => {\n if (!tasks[dependencyName]) {\n throw new Error('async.auto task `' + key +\n '` has a non-existent dependency `' +\n dependencyName + '` in ' +\n dependencies.join(', '));\n }\n addListener(dependencyName, () => {\n remainingDependencies--;\n if (remainingDependencies === 0) {\n enqueueTask(key, task);\n }\n });\n });\n });\n\n checkForDeadlocks();\n processQueue();\n\n function enqueueTask(key, task) {\n readyTasks.push(() => runTask(key, task));\n }\n\n function processQueue() {\n if (canceled) return\n if (readyTasks.length === 0 && runningTasks === 0) {\n return callback(null, results);\n }\n while(readyTasks.length && runningTasks < concurrency) {\n var run = readyTasks.shift();\n run();\n }\n\n }\n\n function addListener(taskName, fn) {\n var taskListeners = listeners[taskName];\n if (!taskListeners) {\n taskListeners = listeners[taskName] = [];\n }\n\n taskListeners.push(fn);\n }\n\n function taskComplete(taskName) {\n var taskListeners = listeners[taskName] || [];\n taskListeners.forEach(fn => fn());\n processQueue();\n }\n\n\n function runTask(key, task) {\n if (hasError) return;\n\n var taskCallback = onlyOnce((err, ...result) => {\n runningTasks--;\n if (err === false) {\n canceled = true;\n return\n }\n if (result.length < 2) {\n [result] = result;\n }\n if (err) {\n var safeResults = {};\n Object.keys(results).forEach(rkey => {\n safeResults[rkey] = results[rkey];\n });\n safeResults[key] = result;\n hasError = true;\n listeners = Object.create(null);\n if (canceled) return\n callback(err, safeResults);\n } else {\n results[key] = result;\n taskComplete(key);\n }\n });\n\n runningTasks++;\n var taskFn = wrapAsync(task[task.length - 1]);\n if (task.length > 1) {\n taskFn(results, taskCallback);\n } else {\n taskFn(taskCallback);\n }\n }\n\n function checkForDeadlocks() {\n // Kahn's algorithm\n // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n var currentTask;\n var counter = 0;\n while (readyToCheck.length) {\n currentTask = readyToCheck.pop();\n counter++;\n getDependents(currentTask).forEach(dependent => {\n if (--uncheckedDependencies[dependent] === 0) {\n readyToCheck.push(dependent);\n }\n });\n }\n\n if (counter !== numTasks) {\n throw new Error(\n 'async.auto cannot execute tasks due to a recursive dependency'\n );\n }\n }\n\n function getDependents(taskName) {\n var result = [];\n Object.keys(tasks).forEach(key => {\n const task = tasks[key];\n if (Array.isArray(task) && task.indexOf(taskName) >= 0) {\n result.push(key);\n }\n });\n return result;\n }\n\n return callback[PROMISE_SYMBOL]\n}\n\nvar FN_ARGS = /^(?:async\\s+)?(?:function)?\\s*\\w*\\s*\\(\\s*([^)]+)\\s*\\)(?:\\s*{)/;\nvar ARROW_FN_ARGS = /^(?:async\\s+)?\\(?\\s*([^)=]+)\\s*\\)?(?:\\s*=>)/;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /(=.+)?(\\s*)$/;\n\nfunction stripComments(string) {\n let stripped = '';\n let index = 0;\n let endBlockComment = string.indexOf('*/');\n while (index < string.length) {\n if (string[index] === '/' && string[index+1] === '/') {\n // inline comment\n let endIndex = string.indexOf('\\n', index);\n index = (endIndex === -1) ? string.length : endIndex;\n } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {\n // block comment\n let endIndex = string.indexOf('*/', index);\n if (endIndex !== -1) {\n index = endIndex + 2;\n endBlockComment = string.indexOf('*/', index);\n } else {\n stripped += string[index];\n index++;\n }\n } else {\n stripped += string[index];\n index++;\n }\n }\n return stripped;\n}\n\nfunction parseParams(func) {\n const src = stripComments(func.toString());\n let match = src.match(FN_ARGS);\n if (!match) {\n match = src.match(ARROW_FN_ARGS);\n }\n if (!match) throw new Error('could not parse args in autoInject\\nSource:\\n' + src)\n let [, args] = match;\n return args\n .replace(/\\s/g, '')\n .split(FN_ARG_SPLIT)\n .map((arg) => arg.replace(FN_ARG, '').trim());\n}\n\n/**\n * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n * tasks are specified as parameters to the function, after the usual callback\n * parameter, with the parameter names matching the names of the tasks it\n * depends on. This can provide even more readable task graphs which can be\n * easier to maintain.\n *\n * If a final callback is specified, the task results are similarly injected,\n * specified as named parameters after the initial error parameter.\n *\n * The autoInject function is purely syntactic sugar and its semantics are\n * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n *\n * @name autoInject\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.auto]{@link module:ControlFlow.auto}\n * @category Control Flow\n * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of\n * the form 'func([dependencies...], callback). The object's key of a property\n * serves as the name of the task defined by that property, i.e. can be used\n * when specifying requirements for other tasks.\n * * The `callback` parameter is a `callback(err, result)` which must be called\n * when finished, passing an `error` (which can be `null`) and the result of\n * the function's execution. The remaining parameters name other tasks on\n * which the task is dependent, and the results from those tasks are the\n * arguments of those parameters.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback, and a `results` object with any completed\n * task results, similar to `auto`.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // The example from `auto` can be rewritten as follows:\n * async.autoInject({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: function(get_data, make_folder, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * },\n * email_link: function(write_file, callback) {\n * // once the file is written let's email a link to it...\n * // write_file contains the filename returned by write_file.\n * callback(null, {'file':write_file, 'email':'user@example.com'});\n * }\n * }, function(err, results) {\n * console.log('err = ', err);\n * console.log('email_link = ', results.email_link);\n * });\n *\n * // If you are using a JS minifier that mangles parameter names, `autoInject`\n * // will not work with plain functions, since the parameter names will be\n * // collapsed to a single letter identifier. To work around this, you can\n * // explicitly specify the names of the parameters your task function needs\n * // in an array, similar to Angular.js dependency injection.\n *\n * // This still has an advantage over plain `auto`, since the results a task\n * // depends on are still spread into arguments.\n * async.autoInject({\n * //...\n * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(write_file, callback) {\n * callback(null, {'file':write_file, 'email':'user@example.com'});\n * }]\n * //...\n * }, function(err, results) {\n * console.log('err = ', err);\n * console.log('email_link = ', results.email_link);\n * });\n */\nfunction autoInject(tasks, callback) {\n var newTasks = {};\n\n Object.keys(tasks).forEach(key => {\n var taskFn = tasks[key];\n var params;\n var fnIsAsync = isAsync(taskFn);\n var hasNoDeps =\n (!fnIsAsync && taskFn.length === 1) ||\n (fnIsAsync && taskFn.length === 0);\n\n if (Array.isArray(taskFn)) {\n params = [...taskFn];\n taskFn = params.pop();\n\n newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n } else if (hasNoDeps) {\n // no dependencies, use the function as-is\n newTasks[key] = taskFn;\n } else {\n params = parseParams(taskFn);\n if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) {\n throw new Error(\"autoInject task functions require explicit parameters.\");\n }\n\n // remove callback param\n if (!fnIsAsync) params.pop();\n\n newTasks[key] = params.concat(newTask);\n }\n\n function newTask(results, taskCb) {\n var newArgs = params.map(name => results[name]);\n newArgs.push(taskCb);\n wrapAsync(taskFn)(...newArgs);\n }\n });\n\n return auto(newTasks, callback);\n}\n\n// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nclass DLL {\n constructor() {\n this.head = this.tail = null;\n this.length = 0;\n }\n\n removeLink(node) {\n if (node.prev) node.prev.next = node.next;\n else this.head = node.next;\n if (node.next) node.next.prev = node.prev;\n else this.tail = node.prev;\n\n node.prev = node.next = null;\n this.length -= 1;\n return node;\n }\n\n empty () {\n while(this.head) this.shift();\n return this;\n }\n\n insertAfter(node, newNode) {\n newNode.prev = node;\n newNode.next = node.next;\n if (node.next) node.next.prev = newNode;\n else this.tail = newNode;\n node.next = newNode;\n this.length += 1;\n }\n\n insertBefore(node, newNode) {\n newNode.prev = node.prev;\n newNode.next = node;\n if (node.prev) node.prev.next = newNode;\n else this.head = newNode;\n node.prev = newNode;\n this.length += 1;\n }\n\n unshift(node) {\n if (this.head) this.insertBefore(this.head, node);\n else setInitial(this, node);\n }\n\n push(node) {\n if (this.tail) this.insertAfter(this.tail, node);\n else setInitial(this, node);\n }\n\n shift() {\n return this.head && this.removeLink(this.head);\n }\n\n pop() {\n return this.tail && this.removeLink(this.tail);\n }\n\n toArray() {\n return [...this]\n }\n\n *[Symbol.iterator] () {\n var cur = this.head;\n while (cur) {\n yield cur.data;\n cur = cur.next;\n }\n }\n\n remove (testFn) {\n var curr = this.head;\n while(curr) {\n var {next} = curr;\n if (testFn(curr)) {\n this.removeLink(curr);\n }\n curr = next;\n }\n return this;\n }\n}\n\nfunction setInitial(dll, node) {\n dll.length = 1;\n dll.head = dll.tail = node;\n}\n\nfunction queue(worker, concurrency, payload) {\n if (concurrency == null) {\n concurrency = 1;\n }\n else if(concurrency === 0) {\n throw new RangeError('Concurrency must not be zero');\n }\n\n var _worker = wrapAsync(worker);\n var numRunning = 0;\n var workersList = [];\n const events = {\n error: [],\n drain: [],\n saturated: [],\n unsaturated: [],\n empty: []\n };\n\n function on (event, handler) {\n events[event].push(handler);\n }\n\n function once (event, handler) {\n const handleAndRemove = (...args) => {\n off(event, handleAndRemove);\n handler(...args);\n };\n events[event].push(handleAndRemove);\n }\n\n function off (event, handler) {\n if (!event) return Object.keys(events).forEach(ev => events[ev] = [])\n if (!handler) return events[event] = []\n events[event] = events[event].filter(ev => ev !== handler);\n }\n\n function trigger (event, ...args) {\n events[event].forEach(handler => handler(...args));\n }\n\n var processingScheduled = false;\n function _insert(data, insertAtFront, rejectOnError, callback) {\n if (callback != null && typeof callback !== 'function') {\n throw new Error('task callback must be a function');\n }\n q.started = true;\n\n var res, rej;\n function promiseCallback (err, ...args) {\n // we don't care about the error, let the global error handler\n // deal with it\n if (err) return rejectOnError ? rej(err) : res()\n if (args.length <= 1) return res(args[0])\n res(args);\n }\n\n var item = q._createTaskItem(\n data,\n rejectOnError ? promiseCallback :\n (callback || promiseCallback)\n );\n\n if (insertAtFront) {\n q._tasks.unshift(item);\n } else {\n q._tasks.push(item);\n }\n\n if (!processingScheduled) {\n processingScheduled = true;\n setImmediate$1(() => {\n processingScheduled = false;\n q.process();\n });\n }\n\n if (rejectOnError || !callback) {\n return new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n })\n }\n }\n\n function _createCB(tasks) {\n return function (err, ...args) {\n numRunning -= 1;\n\n for (var i = 0, l = tasks.length; i < l; i++) {\n var task = tasks[i];\n\n var index = workersList.indexOf(task);\n if (index === 0) {\n workersList.shift();\n } else if (index > 0) {\n workersList.splice(index, 1);\n }\n\n task.callback(err, ...args);\n\n if (err != null) {\n trigger('error', err, task.data);\n }\n }\n\n if (numRunning <= (q.concurrency - q.buffer) ) {\n trigger('unsaturated');\n }\n\n if (q.idle()) {\n trigger('drain');\n }\n q.process();\n };\n }\n\n function _maybeDrain(data) {\n if (data.length === 0 && q.idle()) {\n // call drain immediately if there are no tasks\n setImmediate$1(() => trigger('drain'));\n return true\n }\n return false\n }\n\n const eventMethod = (name) => (handler) => {\n if (!handler) {\n return new Promise((resolve, reject) => {\n once(name, (err, data) => {\n if (err) return reject(err)\n resolve(data);\n });\n })\n }\n off(name);\n on(name, handler);\n\n };\n\n var isProcessing = false;\n var q = {\n _tasks: new DLL(),\n _createTaskItem (data, callback) {\n return {\n data,\n callback\n };\n },\n *[Symbol.iterator] () {\n yield* q._tasks[Symbol.iterator]();\n },\n concurrency,\n payload,\n buffer: concurrency / 4,\n started: false,\n paused: false,\n push (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, false, false, callback))\n }\n return _insert(data, false, false, callback);\n },\n pushAsync (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, false, true, callback))\n }\n return _insert(data, false, true, callback);\n },\n kill () {\n off();\n q._tasks.empty();\n },\n unshift (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, true, false, callback))\n }\n return _insert(data, true, false, callback);\n },\n unshiftAsync (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, true, true, callback))\n }\n return _insert(data, true, true, callback);\n },\n remove (testFn) {\n q._tasks.remove(testFn);\n },\n process () {\n // Avoid trying to start too many processing operations. This can occur\n // when callbacks resolve synchronously (#1267).\n if (isProcessing) {\n return;\n }\n isProcessing = true;\n while(!q.paused && numRunning < q.concurrency && q._tasks.length){\n var tasks = [], data = [];\n var l = q._tasks.length;\n if (q.payload) l = Math.min(l, q.payload);\n for (var i = 0; i < l; i++) {\n var node = q._tasks.shift();\n tasks.push(node);\n workersList.push(node);\n data.push(node.data);\n }\n\n numRunning += 1;\n\n if (q._tasks.length === 0) {\n trigger('empty');\n }\n\n if (numRunning === q.concurrency) {\n trigger('saturated');\n }\n\n var cb = onlyOnce(_createCB(tasks));\n _worker(data, cb);\n }\n isProcessing = false;\n },\n length () {\n return q._tasks.length;\n },\n running () {\n return numRunning;\n },\n workersList () {\n return workersList;\n },\n idle() {\n return q._tasks.length + numRunning === 0;\n },\n pause () {\n q.paused = true;\n },\n resume () {\n if (q.paused === false) { return; }\n q.paused = false;\n setImmediate$1(q.process);\n }\n };\n // define these as fixed properties, so people get useful errors when updating\n Object.defineProperties(q, {\n saturated: {\n writable: false,\n value: eventMethod('saturated')\n },\n unsaturated: {\n writable: false,\n value: eventMethod('unsaturated')\n },\n empty: {\n writable: false,\n value: eventMethod('empty')\n },\n drain: {\n writable: false,\n value: eventMethod('drain')\n },\n error: {\n writable: false,\n value: eventMethod('error')\n },\n });\n return q;\n}\n\n/**\n * Creates a `cargo` object with the specified payload. Tasks added to the\n * cargo will be processed altogether (up to the `payload` limit). If the\n * `worker` is in progress, the task is queued until it becomes available. Once\n * the `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, cargo passes an array of tasks to a single worker, repeating\n * when the worker is finished.\n *\n * @name cargo\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargo and inner queue.\n * @example\n *\n * // create a cargo object with payload 2\n * var cargo = async.cargo(function(tasks, callback) {\n * for (var i=0; i<tasks.length; i++) {\n * console.log('hello ' + tasks[i].name);\n * }\n * callback();\n * }, 2);\n *\n * // add some items\n * cargo.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * cargo.push({name: 'bar'}, function(err) {\n * console.log('finished processing bar');\n * });\n * await cargo.push({name: 'baz'});\n * console.log('finished processing baz');\n */\nfunction cargo(worker, payload) {\n return queue(worker, 1, payload);\n}\n\n/**\n * Creates a `cargoQueue` object with the specified payload. Tasks added to the\n * cargoQueue will be processed together (up to the `payload` limit) in `concurrency` parallel workers.\n * If the all `workers` are in progress, the task is queued until one becomes available. Once\n * a `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, and [`cargo`]{@link module:ControlFlow.cargo} passes an array of tasks to a single worker,\n * the cargoQueue passes an array of tasks to multiple parallel workers.\n *\n * @name cargoQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @see [async.cargo]{@link module:ControlFLow.cargo}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargoQueue object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargoQueue and inner queue.\n * @example\n *\n * // create a cargoQueue object with payload 2 and concurrency 2\n * var cargoQueue = async.cargoQueue(function(tasks, callback) {\n * for (var i=0; i<tasks.length; i++) {\n * console.log('hello ' + tasks[i].name);\n * }\n * callback();\n * }, 2, 2);\n *\n * // add some items\n * cargoQueue.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * cargoQueue.push({name: 'bar'}, function(err) {\n * console.log('finished processing bar');\n * });\n * cargoQueue.push({name: 'baz'}, function(err) {\n * console.log('finished processing baz');\n * });\n * cargoQueue.push({name: 'boo'}, function(err) {\n * console.log('finished processing boo');\n * });\n */\nfunction cargo$1(worker, concurrency, payload) {\n return queue(worker, concurrency, payload);\n}\n\n/**\n * Reduces `coll` into a single value using an async `iteratee` to return each\n * successive step. `memo` is the initial state of the reduction. This function\n * only operates in series.\n *\n * For performance reasons, it may make sense to split a call to this function\n * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n * results. This function is for situations where each step in the reduction\n * needs to be async; if you can get the data before reducing it, then it's\n * probably a good idea to do so.\n *\n * @name reduce\n * @static\n * @memberOf module:Collections\n * @method\n * @alias inject\n * @alias foldl\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt'];\n *\n * // asynchronous function that computes the file size in bytes\n * // file size is added to the memoized value, then returned\n * function getFileSizeInBytes(memo, file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, memo + stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(result);\n * }\n * });\n *\n * // Using Promises\n * async.reduce(fileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction reduce(coll, memo, iteratee, callback) {\n callback = once(callback);\n var _iteratee = wrapAsync(iteratee);\n return eachOfSeries$1(coll, (x, i, iterCb) => {\n _iteratee(memo, x, (err, v) => {\n memo = v;\n iterCb(err);\n });\n }, err => callback(err, memo));\n}\nvar reduce$1 = awaitify(reduce, 4);\n\n/**\n * Version of the compose function that is more natural to read. Each function\n * consumes the return value of the previous function. It is the equivalent of\n * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name seq\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.compose]{@link module:ControlFlow.compose}\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} a function that composes the `functions` in order\n * @example\n *\n * // Requires lodash (or underscore), express3 and dresende's orm2.\n * // Part of an app, that fetches cats of the logged user.\n * // This example uses `seq` function to avoid overnesting and error\n * // handling clutter.\n * app.get('/cats', function(request, response) {\n * var User = request.models.User;\n * async.seq(\n * User.get.bind(User), // 'User.get' has signature (id, callback(err, data))\n * function(user, fn) {\n * user.getCats(fn); // 'getCats' has signature (callback(err, data))\n * }\n * )(req.session.user_id, function (err, cats) {\n * if (err) {\n * console.error(err);\n * response.json({ status: 'error', message: err.message });\n * } else {\n * response.json({ status: 'ok', message: 'Cats found', data: cats });\n * }\n * });\n * });\n */\nfunction seq(...functions) {\n var _functions = functions.map(wrapAsync);\n return function (...args) {\n var that = this;\n\n var cb = args[args.length - 1];\n if (typeof cb == 'function') {\n args.pop();\n } else {\n cb = promiseCallback();\n }\n\n reduce$1(_functions, args, (newargs, fn, iterCb) => {\n fn.apply(that, newargs.concat((err, ...nextargs) => {\n iterCb(err, nextargs);\n }));\n },\n (err, results) => cb(err, ...results));\n\n return cb[PROMISE_SYMBOL]\n };\n}\n\n/**\n * Creates a function which is a composition of the passed asynchronous\n * functions. Each function consumes the return value of the function that\n * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n *\n * If the last argument to the composed function is not a function, a promise\n * is returned when you call it.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name compose\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} an asynchronous function that is the composed\n * asynchronous `functions`\n * @example\n *\n * function add1(n, callback) {\n * setTimeout(function () {\n * callback(null, n + 1);\n * }, 10);\n * }\n *\n * function mul3(n, callback) {\n * setTimeout(function () {\n * callback(null, n * 3);\n * }, 10);\n * }\n *\n * var add1mul3 = async.compose(mul3, add1);\n * add1mul3(4, function (err, result) {\n * // result now equals 15\n * });\n */\nfunction compose(...args) {\n return seq(...args.reverse());\n}\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapLimit (coll, limit, iteratee, callback) {\n return _asyncMap(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar mapLimit$1 = awaitify(mapLimit, 4);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapLimit\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatLimit(coll, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(coll, limit, (val, iterCb) => {\n _iteratee(val, (err, ...args) => {\n if (err) return iterCb(err);\n return iterCb(err, args);\n });\n }, (err, mapResults) => {\n var result = [];\n for (var i = 0; i < mapResults.length; i++) {\n if (mapResults[i]) {\n result = result.concat(...mapResults[i]);\n }\n }\n\n return callback(err, result);\n });\n}\nvar concatLimit$1 = awaitify(concatLimit, 4);\n\n/**\n * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n * the concatenated list. The `iteratee`s are called in parallel, and the\n * results are concatenated as they return. The results array will be returned in\n * the original order of `coll` passed to the `iteratee` function.\n *\n * @name concat\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @alias flatMap\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * let directoryList = ['dir1','dir2','dir3'];\n * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4'];\n *\n * // Using callbacks\n * async.concat(directoryList, fs.readdir, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.concat(directoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * }).catch(err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.concat(directoryList, fs.readdir);\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * } catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.concat(withMissingDirectoryList, fs.readdir);\n * console.log(results);\n * } catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * }\n * }\n *\n */\nfunction concat(coll, iteratee, callback) {\n return concatLimit$1(coll, Infinity, iteratee, callback)\n}\nvar concat$1 = awaitify(concat, 3);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapSeries\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatSeries(coll, iteratee, callback) {\n return concatLimit$1(coll, 1, iteratee, callback)\n}\nvar concatSeries$1 = awaitify(concatSeries, 3);\n\n/**\n * Returns a function that when called, calls-back with the values provided.\n * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n * [`auto`]{@link module:ControlFlow.auto}.\n *\n * @name constant\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {...*} arguments... - Any number of arguments to automatically invoke\n * callback with.\n * @returns {AsyncFunction} Returns a function that when invoked, automatically\n * invokes the callback with the previous given arguments.\n * @example\n *\n * async.waterfall([\n * async.constant(42),\n * function (value, next) {\n * // value === 42\n * },\n * //...\n * ], callback);\n *\n * async.waterfall([\n * async.constant(filename, \"utf8\"),\n * fs.readFile,\n * function (fileData, next) {\n * //...\n * }\n * //...\n * ], callback);\n *\n * async.auto({\n * hostname: async.constant(\"https://server.net/\"),\n * port: findFreePort,\n * launchServer: [\"hostname\", \"port\", function (options, cb) {\n * startServer(options, cb);\n * }],\n * //...\n * }, callback);\n */\nfunction constant(...args) {\n return function (...ignoredArgs/*, callback*/) {\n var callback = ignoredArgs.pop();\n return callback(null, ...args);\n };\n}\n\nfunction _createTester(check, getResult) {\n return (eachfn, arr, _iteratee, cb) => {\n var testPassed = false;\n var testResult;\n const iteratee = wrapAsync(_iteratee);\n eachfn(arr, (value, _, callback) => {\n iteratee(value, (err, result) => {\n if (err || err === false) return callback(err);\n\n if (check(result) && !testResult) {\n testPassed = true;\n testResult = getResult(true, value);\n return callback(null, breakLoop);\n }\n callback();\n });\n }, err => {\n if (err) return cb(err);\n cb(null, testPassed ? testResult : getResult(false));\n });\n };\n}\n\n/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }\n *);\n *\n * // Using Promises\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n * .then(result => {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the file in the list that exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction detect(coll, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback)\n}\nvar detect$1 = awaitify(detect, 3);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectLimit(coll, limit, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar detectLimit$1 = awaitify(detectLimit, 4);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectSeries(coll, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOfLimit(1), coll, iteratee, callback)\n}\n\nvar detectSeries$1 = awaitify(detectSeries, 3);\n\nfunction consoleFunc(name) {\n return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => {\n /* istanbul ignore else */\n if (typeof console === 'object') {\n /* istanbul ignore else */\n if (err) {\n /* istanbul ignore else */\n if (console.error) {\n console.error(err);\n }\n } else if (console[name]) { /* istanbul ignore else */\n resultArgs.forEach(x => console[name](x));\n }\n }\n })\n}\n\n/**\n * Logs the result of an [`async` function]{@link AsyncFunction} to the\n * `console` using `console.dir` to display the properties of the resulting object.\n * Only works in Node.js or in browsers that support `console.dir` and\n * `console.error` (such as FF and Chrome).\n * If multiple arguments are returned from the async function,\n * `console.dir` is called on each argument in order.\n *\n * @name dir\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n * setTimeout(function() {\n * callback(null, {hello: name});\n * }, 1000);\n * };\n *\n * // in the node repl\n * node> async.dir(hello, 'world');\n * {hello: 'world'}\n */\nvar dir = consoleFunc('dir');\n\n/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doWhilst(iteratee, test, callback) {\n callback = onlyOnce(callback);\n var _fn = wrapAsync(iteratee);\n var _test = wrapAsync(test);\n var results;\n\n function next(err, ...args) {\n if (err) return callback(err);\n if (err === false) return;\n results = args;\n _test(...args, check);\n }\n\n function check(err, truth) {\n if (err) return callback(err);\n if (err === false) return;\n if (!truth) return callback(null, ...results);\n _fn(next);\n }\n\n return check(null, true);\n}\n\nvar doWhilst$1 = awaitify(doWhilst, 3);\n\n/**\n * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n * argument ordering differs from `until`.\n *\n * @name doUntil\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doUntil(iteratee, test, callback) {\n const _test = wrapAsync(test);\n return doWhilst$1(iteratee, (...args) => {\n const cb = args.pop();\n _test(...args, (err, truth) => cb (err, !truth));\n }, callback);\n}\n\nfunction _withoutIndex(iteratee) {\n return (value, index, callback) => iteratee(value, callback);\n}\n\n/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n *\n * // asynchronous function that deletes a file\n * const deleteFile = function(file, callback) {\n * fs.unlink(file, callback);\n * };\n *\n * // Using callbacks\n * async.each(fileList, deleteFile, function(err) {\n * if( err ) {\n * console.log(err);\n * } else {\n * console.log('All files have been deleted successfully');\n * }\n * });\n *\n * // Error Handling\n * async.each(withMissingFileList, deleteFile, function(err){\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using Promises\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * await async.each(files, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * await async.each(withMissingFileList, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * }\n * }\n *\n */\nfunction eachLimit(coll, iteratee, callback) {\n return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\n\nvar each = awaitify(eachLimit, 3);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachLimit$1(coll, limit, iteratee, callback) {\n return eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\nvar eachLimit$2 = awaitify(eachLimit$1, 4);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachSeries(coll, iteratee, callback) {\n return eachLimit$2(coll, 1, iteratee, callback)\n}\nvar eachSeries$1 = awaitify(eachSeries, 3);\n\n/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop. If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n * if (cache[arg]) {\n * return callback(null, cache[arg]); // this would be synchronous!!\n * } else {\n * doSomeIO(arg, callback); // this IO would be asynchronous\n * }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */\nfunction ensureAsync(fn) {\n if (isAsync(fn)) return fn;\n return function (...args/*, callback*/) {\n var callback = args.pop();\n var sync = true;\n args.push((...innerArgs) => {\n if (sync) {\n setImmediate$1(() => callback(...innerArgs));\n } else {\n callback(...innerArgs);\n }\n });\n fn.apply(this, args);\n sync = false;\n };\n}\n\n/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.every(fileList, fileExists, function(err, result) {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * });\n *\n * async.every(withMissingFileList, fileExists, function(err, result) {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * });\n *\n * // Using Promises\n * async.every(fileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.every(withMissingFileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.every(fileList, fileExists);\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.every(withMissingFileList, fileExists);\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction every(coll, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback)\n}\nvar every$1 = awaitify(every, 3);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everyLimit(coll, limit, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar everyLimit$1 = awaitify(everyLimit, 4);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everySeries(coll, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar everySeries$1 = awaitify(everySeries, 3);\n\nfunction filterArray(eachfn, arr, iteratee, callback) {\n var truthValues = new Array(arr.length);\n eachfn(arr, (x, index, iterCb) => {\n iteratee(x, (err, v) => {\n truthValues[index] = !!v;\n iterCb(err);\n });\n }, err => {\n if (err) return callback(err);\n var results = [];\n for (var i = 0; i < arr.length; i++) {\n if (truthValues[i]) results.push(arr[i]);\n }\n callback(null, results);\n });\n}\n\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n var results = [];\n eachfn(coll, (x, index, iterCb) => {\n iteratee(x, (err, v) => {\n if (err) return iterCb(err);\n if (v) {\n results.push({index, value: x});\n }\n iterCb(err);\n });\n }, err => {\n if (err) return callback(err);\n callback(null, results\n .sort((a, b) => a.index - b.index)\n .map(v => v.value));\n });\n}\n\nfunction _filter(eachfn, coll, iteratee, callback) {\n var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n return filter(eachfn, coll, wrapAsync(iteratee), callback);\n}\n\n/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.filter(files, fileExists, function(err, results) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * });\n *\n * // Using Promises\n * async.filter(files, fileExists)\n * .then(results => {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.filter(files, fileExists);\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction filter (coll, iteratee, callback) {\n return _filter(eachOf$1, coll, iteratee, callback)\n}\nvar filter$1 = awaitify(filter, 3);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterLimit (coll, limit, iteratee, callback) {\n return _filter(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar filterLimit$1 = awaitify(filterLimit, 4);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterSeries (coll, iteratee, callback) {\n return _filter(eachOfSeries$1, coll, iteratee, callback)\n}\nvar filterSeries$1 = awaitify(filterSeries, 3);\n\n/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @returns {Promise} a promise that rejects if an error occurs and an errback\n * is not passed\n * @example\n *\n * async.forever(\n * function(next) {\n * // next is suitable for passing to things that need a callback(err [, whatever]);\n * // it will result in this function being called again.\n * },\n * function(err) {\n * // if next is called with a value in its first parameter, it will appear\n * // in here as 'err', and execution will stop.\n * }\n * );\n */\nfunction forever(fn, errback) {\n var done = onlyOnce(errback);\n var task = wrapAsync(ensureAsync(fn));\n\n function next(err) {\n if (err) return done(err);\n if (err === false) return;\n task(next);\n }\n return next();\n}\nvar forever$1 = awaitify(forever, 2);\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupByLimit(coll, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(coll, limit, (val, iterCb) => {\n _iteratee(val, (err, key) => {\n if (err) return iterCb(err);\n return iterCb(err, {key, val});\n });\n }, (err, mapResults) => {\n var result = {};\n // from MDN, handle object having an `hasOwnProperty` prop\n var {hasOwnProperty} = Object.prototype;\n\n for (var i = 0; i < mapResults.length; i++) {\n if (mapResults[i]) {\n var {key} = mapResults[i];\n var {val} = mapResults[i];\n\n if (hasOwnProperty.call(result, key)) {\n result[key].push(val);\n } else {\n result[key] = [val];\n }\n }\n }\n\n return callback(err, result);\n });\n}\n\nvar groupByLimit$1 = awaitify(groupByLimit, 4);\n\n/**\n * Returns a new object, where each value corresponds to an array of items, from\n * `coll`, that returned the corresponding key. That is, the keys of the object\n * correspond to the values passed to the `iteratee` callback.\n *\n * Note: Since this function applies the `iteratee` to each item in parallel,\n * there is no guarantee that the `iteratee` functions will complete in order.\n * However, the values for each key in the `result` will be in the same order as\n * the original `coll`. For Objects, the values will roughly be in the order of\n * the original Objects' keys (but this can vary across JavaScript engines).\n *\n * @name groupBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const files = ['dir1/file1.txt','dir2','dir4']\n *\n * // asynchronous function that detects file type as none, file, or directory\n * function detectFile(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(null, 'none');\n * }\n * callback(null, stat.isDirectory() ? 'directory' : 'file');\n * });\n * }\n *\n * //Using callbacks\n * async.groupBy(files, detectFile, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n *\t console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }\n * });\n *\n * // Using Promises\n * async.groupBy(files, detectFile)\n * .then( result => {\n * console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.groupBy(files, detectFile);\n * console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction groupBy (coll, iteratee, callback) {\n return groupByLimit$1(coll, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n *\n * @name groupBySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whose\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupBySeries (coll, iteratee, callback) {\n return groupByLimit$1(coll, 1, iteratee, callback)\n}\n\n/**\n * Logs the result of an `async` function to the `console`. Only works in\n * Node.js or in browsers that support `console.log` and `console.error` (such\n * as FF and Chrome). If multiple arguments are returned from the async\n * function, `console.log` is called on each argument in order.\n *\n * @name log\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n * setTimeout(function() {\n * callback(null, 'hello ' + name);\n * }, 1000);\n * };\n *\n * // in the node repl\n * node> async.log(hello, 'world');\n * 'hello world'\n */\nvar log = consoleFunc('log');\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name mapValuesLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n callback = once(callback);\n var newObj = {};\n var _iteratee = wrapAsync(iteratee);\n return eachOfLimit(limit)(obj, (val, key, next) => {\n _iteratee(val, key, (err, result) => {\n if (err) return next(err);\n newObj[key] = result;\n next(err);\n });\n }, err => callback(err, newObj));\n}\n\nvar mapValuesLimit$1 = awaitify(mapValuesLimit, 4);\n\n/**\n * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n *\n * Produces a new Object by mapping each value of `obj` through the `iteratee`\n * function. The `iteratee` is called each `value` and `key` from `obj` and a\n * callback for when it has finished processing. Each of these callbacks takes\n * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n * passes an error to its callback, the main `callback` (for the `mapValues`\n * function) is immediately called with the error.\n *\n * Note, the order of the keys in the result is not guaranteed. The keys will\n * be roughly in the order they complete, (but this is very engine-specific)\n *\n * @name mapValues\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileMap = {\n * f1: 'file1.txt',\n * f2: 'file2.txt',\n * f3: 'file3.txt'\n * };\n *\n * const withMissingFileMap = {\n * f1: 'file1.txt',\n * f2: 'file2.txt',\n * f3: 'file4.txt'\n * };\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, key, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }\n * });\n *\n * // Error handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(result);\n * }\n * });\n *\n * // Using Promises\n * async.mapValues(fileMap, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }).catch (err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch (err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.mapValues(fileMap, getFileSizeInBytes);\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction mapValues(obj, iteratee, callback) {\n return mapValuesLimit$1(obj, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n *\n * @name mapValuesSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesSeries(obj, iteratee, callback) {\n return mapValuesLimit$1(obj, 1, iteratee, callback)\n}\n\n/**\n * Caches the results of an async function. When creating a hash to store\n * function results against, the callback is omitted from the hash and an\n * optional hash function can be used.\n *\n * **Note: if the async function errs, the result will not be cached and\n * subsequent calls will call the wrapped function.**\n *\n * If no hash function is specified, the first argument is used as a hash key,\n * which may work reasonably if it is a string or a data type that converts to a\n * distinct string. Note that objects and arrays will not behave reasonably.\n * Neither will cases where the other arguments are significant. In such cases,\n * specify your own hash function.\n *\n * The cache of results is exposed as the `memo` property of the function\n * returned by `memoize`.\n *\n * @name memoize\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function to proxy and cache results from.\n * @param {Function} hasher - An optional function for generating a custom hash\n * for storing results. It has all the arguments applied to it apart from the\n * callback, and must be synchronous.\n * @returns {AsyncFunction} a memoized version of `fn`\n * @example\n *\n * var slow_fn = function(name, callback) {\n * // do something\n * callback(null, result);\n * };\n * var fn = async.memoize(slow_fn);\n *\n * // fn can now be used as if it were slow_fn\n * fn('some name', function() {\n * // callback\n * });\n */\nfunction memoize(fn, hasher = v => v) {\n var memo = Object.create(null);\n var queues = Object.create(null);\n var _fn = wrapAsync(fn);\n var memoized = initialParams((args, callback) => {\n var key = hasher(...args);\n if (key in memo) {\n setImmediate$1(() => callback(null, ...memo[key]));\n } else if (key in queues) {\n queues[key].push(callback);\n } else {\n queues[key] = [callback];\n _fn(...args, (err, ...resultArgs) => {\n // #1465 don't memoize if an error occurred\n if (!err) {\n memo[key] = resultArgs;\n }\n var q = queues[key];\n delete queues[key];\n for (var i = 0, l = q.length; i < l; i++) {\n q[i](err, ...resultArgs);\n }\n });\n }\n });\n memoized.memo = memo;\n memoized.unmemoized = fn;\n return memoized;\n}\n\n/* istanbul ignore file */\n\n/**\n * Calls `callback` on a later loop around the event loop. In Node.js this just\n * calls `process.nextTick`. In the browser it will use `setImmediate` if\n * available, otherwise `setTimeout(callback, 0)`, which means other higher\n * priority events may precede the execution of `callback`.\n *\n * This is used internally for browser-compatibility purposes.\n *\n * @name nextTick\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.setImmediate]{@link module:Utils.setImmediate}\n * @category Util\n * @param {Function} callback - The function to call on a later loop around\n * the event loop. Invoked with (args...).\n * @param {...*} args... - any number of additional arguments to pass to the\n * callback on the next tick.\n * @example\n *\n * var call_order = [];\n * async.nextTick(function() {\n * call_order.push('two');\n * // call_order now equals ['one','two']\n * });\n * call_order.push('one');\n *\n * async.setImmediate(function (a, b, c) {\n * // a, b, and c equal 1, 2, and 3\n * }, 1, 2, 3);\n */\nvar _defer$1;\n\nif (hasNextTick) {\n _defer$1 = process.nextTick;\n} else if (hasSetImmediate) {\n _defer$1 = setImmediate;\n} else {\n _defer$1 = fallback;\n}\n\nvar nextTick = wrap(_defer$1);\n\nvar parallel = awaitify((eachfn, tasks, callback) => {\n var results = isArrayLike(tasks) ? [] : {};\n\n eachfn(tasks, (task, key, taskCb) => {\n wrapAsync(task)((err, ...result) => {\n if (result.length < 2) {\n [result] = result;\n }\n results[key] = result;\n taskCb(err);\n });\n }, err => callback(err, results));\n}, 3);\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code. If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series. Any synchronous setup\n * sections for each task will happen one after the other. JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n *\n * //Using Callbacks\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction parallel$1(tasks, callback) {\n return parallel(eachOf$1, tasks, callback);\n}\n\n/**\n * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name parallelLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.parallel]{@link module:ControlFlow.parallel}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n */\nfunction parallelLimit(tasks, limit, callback) {\n return parallel(eachOfLimit(limit), tasks, callback);\n}\n\n/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Iterable} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {number} payload - an integer that specifies how many items are\n * passed to the worker function at a time. only applies if this is a\n * [cargo]{@link module:ControlFlow.cargo} object\n * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n * a promise that rejects if an error occurs.\n * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n * a promise that rejects if an error occurs.\n * @property {Function} remove - remove items from the queue that match a test\n * function. The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a function that sets a callback that is\n * called when the number of running workers hits the `concurrency` limit, and\n * further tasks will be queued. If the callback is omitted, `q.saturated()`\n * returns a promise for the next occurrence.\n * @property {Function} unsaturated - a function that sets a callback that is\n * called when the number of running workers is less than the `concurrency` &\n * `buffer` limits, and further tasks will not be queued. If the callback is\n * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a function that sets a callback that is called\n * when the last item from the `queue` is given to a `worker`. If the callback\n * is omitted, `q.empty()` returns a promise for the next occurrence.\n * @property {Function} drain - a function that sets a callback that is called\n * when the last item from the `queue` has returned from the `worker`. If the\n * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n * @property {Function} error - a function that sets a callback that is called\n * when a task errors. Has the signature `function(error, task)`. If the\n * callback is omitted, `error()` returns a promise that rejects on the next\n * error.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n *\n * @example\n * const q = async.queue(worker, 2)\n * q.push(item1)\n * q.push(item2)\n * q.push(item3)\n * // queues are iterable, spread into an array to inspect\n * const items = [...q] // [item1, item2, item3]\n * // or use for of\n * for (let item of q) {\n * console.log(item)\n * }\n *\n * q.drain(() => {\n * console.log('all done')\n * })\n * // or\n * await q.drain()\n */\n\n/**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n * console.log('hello ' + task.name);\n * callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain(function() {\n * console.log('all items have been processed');\n * });\n * // or await the end\n * await q.drain()\n *\n * // assign an error callback\n * q.error(function(err, task) {\n * console.error('task experienced an error');\n * });\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * // callback is optional\n * q.push({name: 'bar'});\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n * console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n * console.log('finished processing bar');\n * });\n */\nfunction queue$1 (worker, concurrency) {\n var _worker = wrapAsync(worker);\n return queue((items, cb) => {\n _worker(items[0], cb);\n }, concurrency, 1);\n}\n\n// Binary min-heap implementation used for priority queue.\n// Implementation is stable, i.e. push time is considered for equal priorities\nclass Heap {\n constructor() {\n this.heap = [];\n this.pushCount = Number.MIN_SAFE_INTEGER;\n }\n\n get length() {\n return this.heap.length;\n }\n\n empty () {\n this.heap = [];\n return this;\n }\n\n percUp(index) {\n let p;\n\n while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) {\n let t = this.heap[index];\n this.heap[index] = this.heap[p];\n this.heap[p] = t;\n\n index = p;\n }\n }\n\n percDown(index) {\n let l;\n\n while ((l=leftChi(index)) < this.heap.length) {\n if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) {\n l = l+1;\n }\n\n if (smaller(this.heap[index], this.heap[l])) {\n break;\n }\n\n let t = this.heap[index];\n this.heap[index] = this.heap[l];\n this.heap[l] = t;\n\n index = l;\n }\n }\n\n push(node) {\n node.pushCount = ++this.pushCount;\n this.heap.push(node);\n this.percUp(this.heap.length-1);\n }\n\n unshift(node) {\n return this.heap.push(node);\n }\n\n shift() {\n let [top] = this.heap;\n\n this.heap[0] = this.heap[this.heap.length-1];\n this.heap.pop();\n this.percDown(0);\n\n return top;\n }\n\n toArray() {\n return [...this];\n }\n\n *[Symbol.iterator] () {\n for (let i = 0; i < this.heap.length; i++) {\n yield this.heap[i].data;\n }\n }\n\n remove (testFn) {\n let j = 0;\n for (let i = 0; i < this.heap.length; i++) {\n if (!testFn(this.heap[i])) {\n this.heap[j] = this.heap[i];\n j++;\n }\n }\n\n this.heap.splice(j);\n\n for (let i = parent(this.heap.length-1); i >= 0; i--) {\n this.percDown(i);\n }\n\n return this;\n }\n}\n\nfunction leftChi(i) {\n return (i<<1)+1;\n}\n\nfunction parent(i) {\n return ((i+1)>>1)-1;\n}\n\nfunction smaller(x, y) {\n if (x.priority !== y.priority) {\n return x.priority < y.priority;\n }\n else {\n return x.pushCount < y.pushCount;\n }\n}\n\n/**\n * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n * completed in ascending priority order.\n *\n * @name priorityQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`.\n * Invoked with (task, callback).\n * @param {number} concurrency - An `integer` for determining how many `worker`\n * functions should be run in parallel. If omitted, the concurrency defaults to\n * `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three\n * differences between `queue` and `priorityQueue` objects:\n * * `push(task, priority, [callback])` - `priority` should be a number. If an\n * array of `tasks` is given, all tasks will be assigned the same priority.\n * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`,\n * except this returns a promise that rejects if an error occurs.\n * * The `unshift` and `unshiftAsync` methods were removed.\n */\nfunction priorityQueue(worker, concurrency) {\n // Start with a normal queue\n var q = queue$1(worker, concurrency);\n\n var {\n push,\n pushAsync\n } = q;\n\n q._tasks = new Heap();\n q._createTaskItem = ({data, priority}, callback) => {\n return {\n data,\n priority,\n callback\n };\n };\n\n function createDataItems(tasks, priority) {\n if (!Array.isArray(tasks)) {\n return {data: tasks, priority};\n }\n return tasks.map(data => { return {data, priority}; });\n }\n\n // Override push to accept second parameter representing priority\n q.push = function(data, priority = 0, callback) {\n return push(createDataItems(data, priority), callback);\n };\n\n q.pushAsync = function(data, priority = 0, callback) {\n return pushAsync(createDataItems(data, priority), callback);\n };\n\n // Remove unshift functions\n delete q.unshift;\n delete q.unshiftAsync;\n\n return q;\n}\n\n/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.race([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ],\n * // main callback\n * function(err, result) {\n * // the result will be equal to 'two' as it finishes earlier\n * });\n */\nfunction race(tasks, callback) {\n callback = once(callback);\n if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n if (!tasks.length) return callback();\n for (var i = 0, l = tasks.length; i < l; i++) {\n wrapAsync(tasks[i])(callback);\n }\n}\n\nvar race$1 = awaitify(race, 2);\n\n/**\n * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n *\n * @name reduceRight\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reduce]{@link module:Collections.reduce}\n * @alias foldr\n * @category Collection\n * @param {Array} array - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction reduceRight (array, memo, iteratee, callback) {\n var reversed = [...array].reverse();\n return reduce$1(reversed, memo, iteratee, callback);\n}\n\n/**\n * Wraps the async function in another function that always completes with a\n * result object, even when it errors.\n *\n * The result object has either the property `error` or `value`.\n *\n * @name reflect\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function you want to wrap\n * @returns {Function} - A function that always passes null to it's callback as\n * the error. The second argument to the callback will be an `object` with\n * either an `error` or a `value` property.\n * @example\n *\n * async.parallel([\n * async.reflect(function(callback) {\n * // do some stuff ...\n * callback(null, 'one');\n * }),\n * async.reflect(function(callback) {\n * // do some more stuff but error ...\n * callback('bad stuff happened');\n * }),\n * async.reflect(function(callback) {\n * // do some more stuff ...\n * callback(null, 'two');\n * })\n * ],\n * // optional callback\n * function(err, results) {\n * // values\n * // results[0].value = 'one'\n * // results[1].error = 'bad stuff happened'\n * // results[2].value = 'two'\n * });\n */\nfunction reflect(fn) {\n var _fn = wrapAsync(fn);\n return initialParams(function reflectOn(args, reflectCallback) {\n args.push((error, ...cbArgs) => {\n let retVal = {};\n if (error) {\n retVal.error = error;\n }\n if (cbArgs.length > 0){\n var value = cbArgs;\n if (cbArgs.length <= 1) {\n [value] = cbArgs;\n }\n retVal.value = value;\n }\n reflectCallback(null, retVal);\n });\n\n return _fn.apply(this, args);\n });\n}\n\n/**\n * A helper function that wraps an array or an object of functions with `reflect`.\n *\n * @name reflectAll\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.reflect]{@link module:Utils.reflect}\n * @category Util\n * @param {Array|Object|Iterable} tasks - The collection of\n * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.\n * @returns {Array} Returns an array of async functions, each wrapped in\n * `async.reflect`\n * @example\n *\n * let tasks = [\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * // do some more stuff but error ...\n * callback(new Error('bad stuff happened'));\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ];\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n * // values\n * // results[0].value = 'one'\n * // results[1].error = Error('bad stuff happened')\n * // results[2].value = 'two'\n * });\n *\n * // an example using an object instead of an array\n * let tasks = {\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * two: function(callback) {\n * callback('two');\n * },\n * three: function(callback) {\n * setTimeout(function() {\n * callback(null, 'three');\n * }, 100);\n * }\n * };\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n * // values\n * // results.one.value = 'one'\n * // results.two.error = 'two'\n * // results.three.value = 'three'\n * });\n */\nfunction reflectAll(tasks) {\n var results;\n if (Array.isArray(tasks)) {\n results = tasks.map(reflect);\n } else {\n results = {};\n Object.keys(tasks).forEach(key => {\n results[key] = reflect.call(this, tasks[key]);\n });\n }\n return results;\n}\n\nfunction reject(eachfn, arr, _iteratee, callback) {\n const iteratee = wrapAsync(_iteratee);\n return _filter(eachfn, arr, (value, cb) => {\n iteratee(value, (err, v) => {\n cb(err, !v);\n });\n }, callback);\n}\n\n/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.reject(fileList, fileExists, function(err, results) {\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * });\n *\n * // Using Promises\n * async.reject(fileList, fileExists)\n * .then( results => {\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.reject(fileList, fileExists);\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction reject$1 (coll, iteratee, callback) {\n return reject(eachOf$1, coll, iteratee, callback)\n}\nvar reject$2 = awaitify(reject$1, 3);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectLimit (coll, limit, iteratee, callback) {\n return reject(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar rejectLimit$1 = awaitify(rejectLimit, 4);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectSeries (coll, iteratee, callback) {\n return reject(eachOfSeries$1, coll, iteratee, callback)\n}\nvar rejectSeries$1 = awaitify(rejectSeries, 3);\n\nfunction constant$1(value) {\n return function () {\n return value;\n }\n}\n\n/**\n * Attempts to get a successful response from `task` no more than `times` times\n * before returning an error. If the task is successful, the `callback` will be\n * passed the result of the successful task. If all attempts fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name retry\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @see [async.retryable]{@link module:ControlFlow.retryable}\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n * object with `times` and `interval` or a number.\n * * `times` - The number of attempts to make before giving up. The default\n * is `5`.\n * * `interval` - The time to wait between retries, in milliseconds. The\n * default is `0`. The interval may also be specified as a function of the\n * retry count (see example).\n * * `errorFilter` - An optional synchronous function that is invoked on\n * erroneous result. If it returns `true` the retry attempts will continue;\n * if the function returns `false` the retry flow is aborted with the current\n * attempt's error and result being returned to the final callback.\n * Invoked with (err).\n * * If `opts` is a number, the number specifies the number of times to retry,\n * with the default interval of `0`.\n * @param {AsyncFunction} task - An async function to retry.\n * Invoked with (callback).\n * @param {Function} [callback] - An optional callback which is called when the\n * task has succeeded, or after the final failed attempt. It receives the `err`\n * and `result` arguments of the last attempt at completing the `task`. Invoked\n * with (err, results).\n * @returns {Promise} a promise if no callback provided\n *\n * @example\n *\n * // The `retry` function can be used as a stand-alone control flow by passing\n * // a callback, as shown below:\n *\n * // try calling apiMethod 3 times\n * async.retry(3, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod 3 times, waiting 200 ms between each retry\n * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod 10 times with exponential backoff\n * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n * async.retry({\n * times: 10,\n * interval: function(retryCount) {\n * return 50 * Math.pow(2, retryCount);\n * }\n * }, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod the default 5 times no delay between each retry\n * async.retry(apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod only when error condition satisfies, all other\n * // errors will abort the retry control flow and return to final callback\n * async.retry({\n * errorFilter: function(err) {\n * return err.message === 'Temporary error'; // only retry on a specific error\n * }\n * }, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // to retry individual methods that are not as reliable within other\n * // control flow functions, use the `retryable` wrapper:\n * async.auto({\n * users: api.getUsers.bind(api),\n * payments: async.retryable(3, api.getPayments.bind(api))\n * }, function(err, results) {\n * // do something with the results\n * });\n *\n */\nconst DEFAULT_TIMES = 5;\nconst DEFAULT_INTERVAL = 0;\n\nfunction retry(opts, task, callback) {\n var options = {\n times: DEFAULT_TIMES,\n intervalFunc: constant$1(DEFAULT_INTERVAL)\n };\n\n if (arguments.length < 3 && typeof opts === 'function') {\n callback = task || promiseCallback();\n task = opts;\n } else {\n parseTimes(options, opts);\n callback = callback || promiseCallback();\n }\n\n if (typeof task !== 'function') {\n throw new Error(\"Invalid arguments for async.retry\");\n }\n\n var _task = wrapAsync(task);\n\n var attempt = 1;\n function retryAttempt() {\n _task((err, ...args) => {\n if (err === false) return\n if (err && attempt++ < options.times &&\n (typeof options.errorFilter != 'function' ||\n options.errorFilter(err))) {\n setTimeout(retryAttempt, options.intervalFunc(attempt - 1));\n } else {\n callback(err, ...args);\n }\n });\n }\n\n retryAttempt();\n return callback[PROMISE_SYMBOL]\n}\n\nfunction parseTimes(acc, t) {\n if (typeof t === 'object') {\n acc.times = +t.times || DEFAULT_TIMES;\n\n acc.intervalFunc = typeof t.interval === 'function' ?\n t.interval :\n constant$1(+t.interval || DEFAULT_INTERVAL);\n\n acc.errorFilter = t.errorFilter;\n } else if (typeof t === 'number' || typeof t === 'string') {\n acc.times = +t || DEFAULT_TIMES;\n } else {\n throw new Error(\"Invalid arguments for async.retry\");\n }\n}\n\n/**\n * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method\n * wraps a task and makes it retryable, rather than immediately calling it\n * with retries.\n *\n * @name retryable\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.retry]{@link module:ControlFlow.retry}\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n * options, exactly the same as from `retry`, except for a `opts.arity` that\n * is the arity of the `task` function, defaulting to `task.length`\n * @param {AsyncFunction} task - the asynchronous function to wrap.\n * This function will be passed any arguments passed to the returned wrapper.\n * Invoked with (...args, callback).\n * @returns {AsyncFunction} The wrapped function, which when invoked, will\n * retry on an error, based on the parameters specified in `opts`.\n * This function will accept the same parameters as `task`.\n * @example\n *\n * async.auto({\n * dep1: async.retryable(3, getFromFlakyService),\n * process: [\"dep1\", async.retryable(3, function (results, cb) {\n * maybeProcessData(results.dep1, cb);\n * })]\n * }, callback);\n */\nfunction retryable (opts, task) {\n if (!task) {\n task = opts;\n opts = null;\n }\n let arity = (opts && opts.arity) || task.length;\n if (isAsync(task)) {\n arity += 1;\n }\n var _task = wrapAsync(task);\n return initialParams((args, callback) => {\n if (args.length < arity - 1 || callback == null) {\n args.push(callback);\n callback = promiseCallback();\n }\n function taskFn(cb) {\n _task(...args, cb);\n }\n\n if (opts) retry(opts, taskFn, callback);\n else retry(taskFn, callback);\n\n return callback[PROMISE_SYMBOL]\n });\n}\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing\n * [async functions]{@link AsyncFunction} to run in series.\n * Each function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @return {Promise} a promise, if no callback is passed\n * @example\n *\n * //Using Callbacks\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two']\n * });\n *\n * // an example using objects instead of arrays\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two']\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction series(tasks, callback) {\n return parallel(eachOfSeries$1, tasks, callback);\n}\n\n/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n *);\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n *);\n *\n * // Using Promises\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction some(coll, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback)\n}\nvar some$1 = awaitify(some, 3);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someLimit(coll, limit, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOfLimit(limit), coll, iteratee, callback)\n}\nvar someLimit$1 = awaitify(someLimit, 4);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someSeries(coll, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar someSeries$1 = awaitify(someSeries, 3);\n\n/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback passed\n * @example\n *\n * // bigfile.txt is a file that is 251100 bytes in size\n * // mediumfile.txt is a file that is 11000 bytes in size\n * // smallfile.txt is a file that is 121 bytes in size\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) return callback(getFileSizeErr);\n * callback(null, fileSize);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // descending order\n * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) {\n * return callback(getFileSizeErr);\n * }\n * callback(null, fileSize * -1);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n * }\n * }\n * );\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * }\n * );\n *\n * // Using Promises\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * // Error handling\n * async () => {\n * try {\n * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction sortBy (coll, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return map$1(coll, (x, iterCb) => {\n _iteratee(x, (err, criteria) => {\n if (err) return iterCb(err);\n iterCb(err, {value: x, criteria});\n });\n }, (err, results) => {\n if (err) return callback(err);\n callback(null, results.sort(comparator).map(v => v.value));\n });\n\n function comparator(left, right) {\n var a = left.criteria, b = right.criteria;\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\nvar sortBy$1 = awaitify(sortBy, 3);\n\n/**\n * Sets a time limit on an asynchronous function. If the function does not call\n * its callback within the specified milliseconds, it will be called with a\n * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n *\n * @name timeout\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} asyncFn - The async function to limit in time.\n * @param {number} milliseconds - The specified time limit.\n * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n * to timeout Error for more information..\n * @returns {AsyncFunction} Returns a wrapped function that can be used with any\n * of the control flow functions.\n * Invoke this function with the same parameters as you would `asyncFunc`.\n * @example\n *\n * function myFunction(foo, callback) {\n * doAsyncTask(foo, function(err, data) {\n * // handle errors\n * if (err) return callback(err);\n *\n * // do some stuff ...\n *\n * // return processed data\n * return callback(null, data);\n * });\n * }\n *\n * var wrapped = async.timeout(myFunction, 1000);\n *\n * // call `wrapped` as you would `myFunction`\n * wrapped({ bar: 'bar' }, function(err, data) {\n * // if `myFunction` takes < 1000 ms to execute, `err`\n * // and `data` will have their expected values\n *\n * // else `err` will be an Error with the code 'ETIMEDOUT'\n * });\n */\nfunction timeout(asyncFn, milliseconds, info) {\n var fn = wrapAsync(asyncFn);\n\n return initialParams((args, callback) => {\n var timedOut = false;\n var timer;\n\n function timeoutCallback() {\n var name = asyncFn.name || 'anonymous';\n var error = new Error('Callback function \"' + name + '\" timed out.');\n error.code = 'ETIMEDOUT';\n if (info) {\n error.info = info;\n }\n timedOut = true;\n callback(error);\n }\n\n args.push((...cbArgs) => {\n if (!timedOut) {\n callback(...cbArgs);\n clearTimeout(timer);\n }\n });\n\n // setup timer and call original function\n timer = setTimeout(timeoutCallback, milliseconds);\n fn(...args);\n });\n}\n\nfunction range(size) {\n var result = Array(size);\n while (size--) {\n result[size] = size;\n }\n return result;\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name timesLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} count - The number of times to run the function.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesLimit(count, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(range(count), limit, _iteratee, callback);\n}\n\n/**\n * Calls the `iteratee` function `n` times, and accumulates results in the same\n * manner you would use with [map]{@link module:Collections.map}.\n *\n * @name times\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n * @example\n *\n * // Pretend this is some complicated async factory\n * var createUser = function(id, callback) {\n * callback(null, {\n * id: 'user' + id\n * });\n * };\n *\n * // generate 5 users\n * async.times(5, function(n, next) {\n * createUser(n, function(err, user) {\n * next(err, user);\n * });\n * }, function(err, users) {\n * // we should now have 5 users\n * });\n */\nfunction times (n, iteratee, callback) {\n return timesLimit(n, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n *\n * @name timesSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesSeries (n, iteratee, callback) {\n return timesLimit(n, 1, iteratee, callback)\n}\n\n/**\n * A relative of `reduce`. Takes an Object or Array, and iterates over each\n * element in parallel, each step potentially mutating an `accumulator` value.\n * The type of the accumulator defaults to the type of collection passed in.\n *\n * @name transform\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} [accumulator] - The initial state of the transform. If omitted,\n * it will default to an empty Object or Array, depending on the type of `coll`\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * collection that potentially modifies the accumulator.\n * Invoked with (accumulator, item, key, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the transformed accumulator.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n * // implementation not included for brevity\n * return humanReadbleFilesize;\n * }\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n * fs.stat(value, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * acc[key] = formatBytes(stat.size);\n * callback(null);\n * });\n * }\n *\n * // Using callbacks\n * async.transform(fileList, transformFileSize, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }\n * });\n *\n * // Using Promises\n * async.transform(fileList, transformFileSize)\n * .then(result => {\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let result = await async.transform(fileList, transformFileSize);\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n * // implementation not included for brevity\n * return humanReadbleFilesize;\n * }\n *\n * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' };\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n * fs.stat(value, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * acc[key] = formatBytes(stat.size);\n * callback(null);\n * });\n * }\n *\n * // Using callbacks\n * async.transform(fileMap, transformFileSize, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }\n * });\n *\n * // Using Promises\n * async.transform(fileMap, transformFileSize)\n * .then(result => {\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.transform(fileMap, transformFileSize);\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction transform (coll, accumulator, iteratee, callback) {\n if (arguments.length <= 3 && typeof accumulator === 'function') {\n callback = iteratee;\n iteratee = accumulator;\n accumulator = Array.isArray(coll) ? [] : {};\n }\n callback = once(callback || promiseCallback());\n var _iteratee = wrapAsync(iteratee);\n\n eachOf$1(coll, (v, k, cb) => {\n _iteratee(accumulator, v, k, cb);\n }, err => callback(err, accumulator));\n return callback[PROMISE_SYMBOL]\n}\n\n/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n * async.tryEach([\n * function getDataFromFirstWebsite(callback) {\n * // Try getting the data from the first website\n * callback(err, data);\n * },\n * function getDataFromSecondWebsite(callback) {\n * // First website failed,\n * // Try getting the data from the backup website\n * callback(err, data);\n * }\n * ],\n * // optional callback\n * function(err, results) {\n * Now do something with the data.\n * });\n *\n */\nfunction tryEach(tasks, callback) {\n var error = null;\n var result;\n return eachSeries$1(tasks, (task, taskCb) => {\n wrapAsync(task)((err, ...args) => {\n if (err === false) return taskCb(err);\n\n if (args.length < 2) {\n [result] = args;\n } else {\n result = args;\n }\n error = err;\n taskCb(err ? null : {});\n });\n }, () => callback(error, result));\n}\n\nvar tryEach$1 = awaitify(tryEach);\n\n/**\n * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n * unmemoized form. Handy for testing.\n *\n * @name unmemoize\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.memoize]{@link module:Utils.memoize}\n * @category Util\n * @param {AsyncFunction} fn - the memoized function\n * @returns {AsyncFunction} a function that calls the original unmemoized function\n */\nfunction unmemoize(fn) {\n return (...args) => {\n return (fn.unmemoized || fn)(...args);\n };\n}\n\n/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * var count = 0;\n * async.whilst(\n * function test(cb) { cb(null, count < 5); },\n * function iter(callback) {\n * count++;\n * setTimeout(function() {\n * callback(null, count);\n * }, 1000);\n * },\n * function (err, n) {\n * // 5 seconds have passed, n = 5\n * }\n * );\n */\nfunction whilst(test, iteratee, callback) {\n callback = onlyOnce(callback);\n var _fn = wrapAsync(iteratee);\n var _test = wrapAsync(test);\n var results = [];\n\n function next(err, ...rest) {\n if (err) return callback(err);\n results = rest;\n if (err === false) return;\n _test(check);\n }\n\n function check(err, truth) {\n if (err) return callback(err);\n if (err === false) return;\n if (!truth) return callback(null, ...results);\n _fn(next);\n }\n\n return _test(check);\n}\nvar whilst$1 = awaitify(whilst, 3);\n\n/**\n * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs. `callback` will be passed an error and any\n * arguments passed to the final `iteratee`'s callback.\n *\n * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n *\n * @name until\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with (callback).\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n * const results = []\n * let finished = false\n * async.until(function test(cb) {\n * cb(null, finished)\n * }, function iter(next) {\n * fetchPage(url, (err, body) => {\n * if (err) return next(err)\n * results = results.concat(body.objects)\n * finished = !!body.next\n * next(err)\n * })\n * }, function done (err) {\n * // all pages have been fetched\n * })\n */\nfunction until(test, iteratee, callback) {\n const _test = wrapAsync(test);\n return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback);\n}\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */\nfunction waterfall (tasks, callback) {\n callback = once(callback);\n if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n if (!tasks.length) return callback();\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = wrapAsync(tasks[taskIndex++]);\n task(...args, onlyOnce(next));\n }\n\n function next(err, ...args) {\n if (err === false) return\n if (err || taskIndex === tasks.length) {\n return callback(err, ...args);\n }\n nextTask(args);\n }\n\n nextTask([]);\n}\n\nvar waterfall$1 = awaitify(waterfall);\n\n/**\n * An \"async function\" in the context of Async is an asynchronous function with\n * a variable number of parameters, with the final parameter being a callback.\n * (`function (arg1, arg2, ..., callback) {}`)\n * The final callback is of the form `callback(err, results...)`, which must be\n * called once the function is completed. The callback should be called with a\n * Error as its first argument to signal that an error occurred.\n * Otherwise, if no error occurred, it should be called with `null` as the first\n * argument, and any additional `result` arguments that may apply, to signal\n * successful completion.\n * The callback must be called exactly once, ideally on a later tick of the\n * JavaScript event loop.\n *\n * This type of function is also referred to as a \"Node-style async function\",\n * or a \"continuation passing-style function\" (CPS). Most of the methods of this\n * library are themselves CPS/Node-style async functions, or functions that\n * return CPS/Node-style async functions.\n *\n * Wherever we accept a Node-style async function, we also directly accept an\n * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.\n * In this case, the `async` function will not be passed a final callback\n * argument, and any thrown error will be used as the `err` argument of the\n * implicit callback, and the return value will be used as the `result` value.\n * (i.e. a `rejected` of the returned Promise becomes the `err` callback\n * argument, and a `resolved` value becomes the `result`.)\n *\n * Note, due to JavaScript limitations, we can only detect native `async`\n * functions and not transpilied implementations.\n * Your environment must have `async`/`await` support for this to work.\n * (e.g. Node > v7.6, or a recent version of a modern browser).\n * If you are using `async` functions through a transpiler (e.g. Babel), you\n * must still wrap the function with [asyncify]{@link module:Utils.asyncify},\n * because the `async function` will be compiled to an ordinary function that\n * returns a promise.\n *\n * @typedef {Function} AsyncFunction\n * @static\n */\n\nvar index = {\n apply,\n applyEach: applyEach$1,\n applyEachSeries,\n asyncify,\n auto,\n autoInject,\n cargo,\n cargoQueue: cargo$1,\n compose,\n concat: concat$1,\n concatLimit: concatLimit$1,\n concatSeries: concatSeries$1,\n constant,\n detect: detect$1,\n detectLimit: detectLimit$1,\n detectSeries: detectSeries$1,\n dir,\n doUntil,\n doWhilst: doWhilst$1,\n each,\n eachLimit: eachLimit$2,\n eachOf: eachOf$1,\n eachOfLimit: eachOfLimit$2,\n eachOfSeries: eachOfSeries$1,\n eachSeries: eachSeries$1,\n ensureAsync,\n every: every$1,\n everyLimit: everyLimit$1,\n everySeries: everySeries$1,\n filter: filter$1,\n filterLimit: filterLimit$1,\n filterSeries: filterSeries$1,\n forever: forever$1,\n groupBy,\n groupByLimit: groupByLimit$1,\n groupBySeries,\n log,\n map: map$1,\n mapLimit: mapLimit$1,\n mapSeries: mapSeries$1,\n mapValues,\n mapValuesLimit: mapValuesLimit$1,\n mapValuesSeries,\n memoize,\n nextTick,\n parallel: parallel$1,\n parallelLimit,\n priorityQueue,\n queue: queue$1,\n race: race$1,\n reduce: reduce$1,\n reduceRight,\n reflect,\n reflectAll,\n reject: reject$2,\n rejectLimit: rejectLimit$1,\n rejectSeries: rejectSeries$1,\n retry,\n retryable,\n seq,\n series,\n setImmediate: setImmediate$1,\n some: some$1,\n someLimit: someLimit$1,\n someSeries: someSeries$1,\n sortBy: sortBy$1,\n timeout,\n times,\n timesLimit,\n timesSeries,\n transform,\n tryEach: tryEach$1,\n unmemoize,\n until,\n waterfall: waterfall$1,\n whilst: whilst$1,\n\n // aliases\n all: every$1,\n allLimit: everyLimit$1,\n allSeries: everySeries$1,\n any: some$1,\n anyLimit: someLimit$1,\n anySeries: someSeries$1,\n find: detect$1,\n findLimit: detectLimit$1,\n findSeries: detectSeries$1,\n flatMap: concat$1,\n flatMapLimit: concatLimit$1,\n flatMapSeries: concatSeries$1,\n forEach: each,\n forEachSeries: eachSeries$1,\n forEachLimit: eachLimit$2,\n forEachOf: eachOf$1,\n forEachOfSeries: eachOfSeries$1,\n forEachOfLimit: eachOfLimit$2,\n inject: reduce$1,\n foldl: reduce$1,\n foldr: reduceRight,\n select: filter$1,\n selectLimit: filterLimit$1,\n selectSeries: filterSeries$1,\n wrapSync: asyncify,\n during: whilst$1,\n doDuring: doWhilst$1\n};\n\nexport default index;\nexport { apply, applyEach$1 as applyEach, applyEachSeries, asyncify, auto, autoInject, cargo, cargo$1 as cargoQueue, compose, concat$1 as concat, concatLimit$1 as concatLimit, concatSeries$1 as concatSeries, constant, detect$1 as detect, detectLimit$1 as detectLimit, detectSeries$1 as detectSeries, dir, doUntil, doWhilst$1 as doWhilst, each, eachLimit$2 as eachLimit, eachOf$1 as eachOf, eachOfLimit$2 as eachOfLimit, eachOfSeries$1 as eachOfSeries, eachSeries$1 as eachSeries, ensureAsync, every$1 as every, everyLimit$1 as everyLimit, everySeries$1 as everySeries, filter$1 as filter, filterLimit$1 as filterLimit, filterSeries$1 as filterSeries, forever$1 as forever, groupBy, groupByLimit$1 as groupByLimit, groupBySeries, log, map$1 as map, mapLimit$1 as mapLimit, mapSeries$1 as mapSeries, mapValues, mapValuesLimit$1 as mapValuesLimit, mapValuesSeries, memoize, nextTick, parallel$1 as parallel, parallelLimit, priorityQueue, queue$1 as queue, race$1 as race, reduce$1 as reduce, reduceRight, reflect, reflectAll, reject$2 as reject, rejectLimit$1 as rejectLimit, rejectSeries$1 as rejectSeries, retry, retryable, seq, series, setImmediate$1 as setImmediate, some$1 as some, someLimit$1 as someLimit, someSeries$1 as someSeries, sortBy$1 as sortBy, timeout, times, timesLimit, timesSeries, transform, tryEach$1 as tryEach, unmemoize, until, waterfall$1 as waterfall, whilst$1 as whilst, every$1 as all, everyLimit$1 as allLimit, everySeries$1 as allSeries, some$1 as any, someLimit$1 as anyLimit, someSeries$1 as anySeries, detect$1 as find, detectLimit$1 as findLimit, detectSeries$1 as findSeries, concat$1 as flatMap, concatLimit$1 as flatMapLimit, concatSeries$1 as flatMapSeries, each as forEach, eachSeries$1 as forEachSeries, eachLimit$2 as forEachLimit, eachOf$1 as forEachOf, eachOfSeries$1 as forEachOfSeries, eachOfLimit$2 as forEachOfLimit, reduce$1 as inject, reduce$1 as foldl, reduceRight as foldr, filter$1 as select, filterLimit$1 as selectLimit, filterSeries$1 as selectSeries, asyncify as wrapSync, whilst$1 as during, doWhilst$1 as doDuring };\n","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n"],"names":["__awaiter","commonjsGlobal","logger$1","Logger","DEFAULT_LOGGER_NAME","logger","events","R","ReflectApply","ReflectOwnKeys","ProcessEmitWarning","NumberIsNaN","EventEmitter$1","once","defaultMaxListeners","checkListener","_getMaxListeners","arrayClone","_addListener","onceWrapper","_onceWrap","spliceOne","_listeners","unwrapListeners","listenerCount","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","EventEmitter","StreamRequest","deepCopy","eventsModule","this"],"mappings":"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AAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,U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CAAC,CAAC;AACjE,KAAK;AACL,CAAC;AACD;AACA;AACA,SAAS,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAClD,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC1C,IAAI,IAAI,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,GAAG,aAAa,CAAC;AACnF,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AACD;AACA,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACxC,IAAI,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxD,CAAC;AACD,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AA0C7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChD,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrD,CAAC;AACD,IAAI,cAAc,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC9C,IAAI,OAAO,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC9D,CAAC;AACiB,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE;AA8gBzC;AACA;AACA;AACA;AACA;AACA,MAAM,GAAG,CAAC;AACV,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrC,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,KAAK;AACL;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClD,aAAa,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClD,aAAa,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACzB,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA,IAAI,KAAK,CAAC,GAAG;AACb,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACtC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL;AACA,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE;AAC/B,QAAQ,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,QAAQ,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AAChD,aAAa,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AAC5B,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACzB,KAAK;AACL;AACA,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE;AAChC,QAAQ,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AAChD,aAAa,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AAC5B,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACzB,KAAK;AACL;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1D,aAAa,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzD,aAAa,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,KAAK;AACL;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,KAAK;AACL;AACA,IAAI,GAAG,GAAG;AACV,QAAQ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,KAAK;AACL;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC;AACxB,KAAK;AACL;AACA,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG;AAC1B,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,MAAM,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAY,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;AAC3B,SAAS;AACT,KAAK;AACL;AACA,IAAI,MAAM,CAAC,CAAC,MAAM,EAAE;AACpB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAQ,MAAM,IAAI,EAAE;AACpB,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9B,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AAC9B,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtC,aAAa;AACb,YAAY,IAAI,GAAG,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,CAAC;AACD;AACA,SAAS,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE;AAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACnB,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAC/B,CAAC;AACD;AACA,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE;AAC7C,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;AAC7B,QAAQ,WAAW,GAAG,CAAC,CAAC;AACxB,KAAK;AACL,SAAS,GAAG,WAAW,KAAK,CAAC,EAAE;AAC/B,QAAQ,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;AAC7D,KAAK;AACL;AACA,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;AACvB,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;AACzB,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,SAAS,EAAE,EAAE;AACrB,QAAQ,WAAW,EAAE,EAAE;AACvB,QAAQ,KAAK,EAAE,EAAE;AACjB,KAAK,CAAC;AACN;AACA,IAAI,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;AACjC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,KAAK;AACL;AACA,IAAI,SAAS,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;AACnC,QAAQ,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,KAAK;AAC7C,YAAY,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACxC,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,SAAS,CAAC;AACV,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC5C,KAAK;AACL;AACA,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;AAClC,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7E,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AAC/C,QAAQ,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC;AACnE,KAAK;AACL;AACA,IAAI,SAAS,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AACtC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3D,KAAK;AACL;AACA,IAAI,IAAI,mBAAmB,GAAG,KAAK,CAAC;AACpC,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE;AACnE,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAChE,YAAY,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AAChE,SAAS;AACT,QAAQ,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACzB;AACA,QAAQ,IAAI,GAAG,EAAE,GAAG,CAAC;AACrB,QAAQ,SAAS,eAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;AAChD;AACA;AACA,YAAY,IAAI,GAAG,EAAE,OAAO,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE;AAC5D,YAAY,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,eAAe;AACpC,YAAY,IAAI;AAChB,YAAY,aAAa,GAAG,eAAe;AAC3C,iBAAiB,QAAQ,IAAI,eAAe,CAAC;AAC7C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,aAAa,EAAE;AAC3B,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnC,SAAS,MAAM;AACf,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,YAAY,mBAAmB,GAAG,IAAI,CAAC;AACvC,YAAY,cAAc,CAAC,MAAM;AACjC,gBAAgB,mBAAmB,GAAG,KAAK,CAAC;AAC5C,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5B,aAAa,CAAC,CAAC;AACf,SAAS;AACT;AACA,QAAQ,IAAI,aAAa,IAAI,CAAC,QAAQ,EAAE;AACxC,YAAY,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACpD,gBAAgB,GAAG,GAAG,OAAO,CAAC;AAC9B,gBAAgB,GAAG,GAAG,MAAM,CAAC;AAC7B,aAAa,CAAC;AACd,SAAS;AACT,KAAK;AACL;AACA,IAAI,SAAS,SAAS,CAAC,KAAK,EAAE;AAC9B,QAAQ,OAAO,UAAU,GAAG,EAAE,GAAG,IAAI,EAAE;AACvC,YAAY,UAAU,IAAI,CAAC,CAAC;AAC5B;AACA,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1D,gBAAgB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC;AACA,gBAAgB,IAAI,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtD,gBAAgB,IAAI,KAAK,KAAK,CAAC,EAAE;AACjC,oBAAoB,WAAW,CAAC,KAAK,EAAE,CAAC;AACxC,iBAAiB,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;AACtC,oBAAoB,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACjD,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5C;AACA,gBAAgB,IAAI,GAAG,IAAI,IAAI,EAAE;AACjC,oBAAoB,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,iBAAiB;AACjB,aAAa;AACb;AACA,YAAY,IAAI,UAAU,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;AAC3D,gBAAgB,OAAO,CAAC,aAAa,CAAC,CAAC;AACvC,aAAa;AACb;AACA,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;AAC1B,gBAAgB,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,aAAa;AACb,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;AACxB,SAAS,CAAC;AACV,KAAK;AACL;AACA,IAAI,SAAS,WAAW,CAAC,IAAI,EAAE;AAC/B,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;AAC3C;AACA,YAAY,cAAc,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAY,OAAO,IAAI;AACvB,SAAS;AACT,QAAQ,OAAO,KAAK;AACpB,KAAK;AACL;AACA,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK;AAC/C,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACpD,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK;AAC1C,oBAAoB,IAAI,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC;AAC/C,oBAAoB,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,iBAAiB,CAAC,CAAC;AACnB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1B;AACA,KAAK,CAAC;AACN;AACA,IAAI,IAAI,YAAY,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,CAAC,GAAG;AACZ,QAAQ,MAAM,EAAE,IAAI,GAAG,EAAE;AACzB,QAAQ,eAAe,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE;AACzC,YAAY,OAAO;AACnB,gBAAgB,IAAI;AACpB,gBAAgB,QAAQ;AACxB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG;AAC9B,YAAY,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC/C,SAAS;AACT,QAAQ,WAAW;AACnB,QAAQ,OAAO;AACf,QAAQ,MAAM,EAAE,WAAW,GAAG,CAAC;AAC/B,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,MAAM,EAAE,KAAK;AACrB,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC9B,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM;AAC7C,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAChF,aAAa;AACb,YAAY,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,SAAS,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE;AACnC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM;AAC7C,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/E,aAAa;AACb,YAAY,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,IAAI,CAAC,GAAG;AAChB,YAAY,GAAG,EAAE,CAAC;AAClB,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE;AACjC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM;AAC7C,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/E,aAAa;AACb,YAAY,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ,YAAY,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE;AACtC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM;AAC7C,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9E,aAAa;AACb,YAAY,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvD,SAAS;AACT,QAAQ,MAAM,CAAC,CAAC,MAAM,EAAE;AACxB,YAAY,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,QAAQ,OAAO,CAAC,GAAG;AACnB;AACA;AACA,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,YAAY,GAAG,IAAI,CAAC;AAChC,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7E,gBAAgB,IAAI,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;AAC1C,gBAAgB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACxC,gBAAgB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1D,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,oBAAoB,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAChD,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAoB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,oBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,iBAAiB;AACjB;AACA,gBAAgB,UAAU,IAAI,CAAC,CAAC;AAChC;AACA,gBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,oBAAoB,OAAO,CAAC,OAAO,CAAC,CAAC;AACrC,iBAAiB;AACjB;AACA,gBAAgB,IAAI,UAAU,KAAK,CAAC,CAAC,WAAW,EAAE;AAClD,oBAAoB,OAAO,CAAC,WAAW,CAAC,CAAC;AACzC,iBAAiB;AACjB;AACA,gBAAgB,IAAI,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,gBAAgB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAClC,aAAa;AACb,YAAY,YAAY,GAAG,KAAK,CAAC;AACjC,SAAS;AACT,QAAQ,MAAM,CAAC,GAAG;AAClB,YAAY,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,SAAS;AACT,QAAQ,OAAO,CAAC,GAAG;AACnB,YAAY,OAAO,UAAU,CAAC;AAC9B,SAAS;AACT,QAAQ,WAAW,CAAC,GAAG;AACvB,YAAY,OAAO,WAAW,CAAC;AAC/B,SAAS;AACT,QAAQ,IAAI,GAAG;AACf,YAAY,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC;AACtD,SAAS;AACT,QAAQ,KAAK,CAAC,GAAG;AACjB,YAAY,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;AAC5B,SAAS;AACT,QAAQ,MAAM,CAAC,GAAG;AAClB,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE,EAAE,OAAO,EAAE;AAC/C,YAAY,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;AAC7B,YAAY,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACtC,SAAS;AACT,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE;AAC/B,QAAQ,SAAS,EAAE;AACnB,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC;AAC3C,SAAS;AACT,QAAQ,WAAW,EAAE;AACrB,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC;AAC7C,SAAS;AACT,QAAQ,KAAK,EAAE;AACf,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;AACvC,SAAS;AACT,QAAQ,KAAK,EAAE;AACf,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;AACvC,SAAS;AACT,QAAQ,KAAK,EAAE;AACf,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;AACvC,SAAS;AACT,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,CAAC,CAAC;AACb,CAAC;AA6GD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,IAAI,IAAI,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxC,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK;AAClD,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;AACvC,YAAY,IAAI,GAAG,CAAC,CAAC;AACrB,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC;AACxB,SAAS,CAAC,CAAC;AACX,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;AACc,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;AAwGnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACpD,IAAI,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAClE,CAAC;AACD,IAAI,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACtD,IAAI,IAAI,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxC,IAAI,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;AACpD,QAAQ,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,KAAK;AACzC,YAAY,IAAI,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACxC,YAAY,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACrC,SAAS,CAAC,CAAC;AACX,KAAK,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK;AAC5B,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AACxB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;AAC/B,gBAAgB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,aAAa;AACb,SAAS;AACT;AACA,QAAQ,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC;AACP,CAAC;AACD,IAAI,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC1C,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC5D,CAAC;AACc,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChD,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrD,CAAC;AACoB,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE;AAkD/C;AACA,SAAS,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;AACzC,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK;AAC3C,QAAQ,IAAI,UAAU,GAAG,KAAK,CAAC;AAC/B,QAAQ,IAAI,UAAU,CAAC;AACvB,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9C,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,KAAK;AAC5C,YAAY,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;AAC7C,gBAAgB,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/D;AACA,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;AAClD,oBAAoB,UAAU,GAAG,IAAI,CAAC;AACtC,oBAAoB,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxD,oBAAoB,OAAO,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACrD,iBAAiB;AACjB,gBAAgB,QAAQ,EAAE,CAAC;AAC3B,aAAa,CAAC,CAAC;AACf,SAAS,EAAE,GAAG,IAAI;AAClB,YAAY,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AACpC,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,SAAS,CAAC,CAAC;AACX,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC1C,IAAI,OAAO,aAAa,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC/F,CAAC;AACc,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACtD,IAAI,OAAO,aAAa,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACzG,CAAC;AACmB,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChD,IAAI,OAAO,aAAa,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrG,CAAC;AACD;AACqB,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE;AAiD/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC5C,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAClC,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAClC,IAAI,IAAI,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAChC,IAAI,IAAI,OAAO,CAAC;AAChB;AACA,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;AAChC,QAAQ,IAAI,GAAG,EAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,QAAQ,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO;AAClC,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,QAAQ,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,SAAS,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE;AAC/B,QAAQ,IAAI,GAAG,EAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,QAAQ,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO;AAClC,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;AACtD,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,KAAK;AACL;AACA,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AACD;AACiB,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;AA8BvC;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE;AACjC,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7C,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AACD;AACW,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACtD,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC;AACD,IAAI,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;AACvC,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK;AAChC,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9B,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACvB,CAAC;AAsLD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,QAAQ,CAAC,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC,CAAC;AACtH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ,EAAE,CAAC;AACzC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,QAAQ,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtC,KAAK;AACL,CAAC;AACD;AACa,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE;AA0K/B;AACA,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE;AAClD,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1C,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK;AAC/C,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;AACpC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,SAAS,CAAC,CAAC;AACX,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7C,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACrD,CAAC;AACc,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACvD,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC/D,CAAC;AACmB,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjD,IAAI,OAAO,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC3D,CAAC;AACoB,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE;AAqX/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACxC,IAAI,OAAO,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACjF,CAAC;AACY,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACpD,IAAI,OAAO,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC3F,CAAC;AACiB,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC9C,IAAI,OAAO,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACvF,CAAC;AACkB,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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"}
|