Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"adapter.min.js","sources":["../src/adapter.js"],"sourcesContent":["/**\n * Description of import/upgrade into Moodle:\n *\n * 1. Visit https://github.com/webrtc/adapter/releases.\n * 2. Check if the version has been updated from what is listed in lib/thirdpartylibs.xml in the Moodle wwwroot.\n * 3. If it has -\n *    1. Download the source code.\n *    2. Copy the content of the file release/adapter.js from the archive (ignore the first line).\n *    3. Replace the content below \"return (function e(t,n,r) ..\" in this file with the content you copied.\n *    4. Ensure to update lib/thirdpartylibs.xml with any changes.\n */\n\n// ESLint directives.\n/* eslint-disable */\n\n// JSHint directives.\n/* jshint ignore:start */\n\ndefine([], function() {\nreturn (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\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/* eslint-env node */\n\n'use strict';\n\nvar _adapter_factory = require('./adapter_factory.js');\n\nvar adapter = (0, _adapter_factory.adapterFactory)({ window: typeof window === 'undefined' ? undefined : window });\nmodule.exports = adapter; // this is the difference from adapter_core.\n\n},{\"./adapter_factory.js\":2}],2:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.adapterFactory = adapterFactory;\n\nvar _utils = require('./utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _chrome_shim = require('./chrome/chrome_shim');\n\nvar chromeShim = _interopRequireWildcard(_chrome_shim);\n\nvar _firefox_shim = require('./firefox/firefox_shim');\n\nvar firefoxShim = _interopRequireWildcard(_firefox_shim);\n\nvar _safari_shim = require('./safari/safari_shim');\n\nvar safariShim = _interopRequireWildcard(_safari_shim);\n\nvar _common_shim = require('./common_shim');\n\nvar commonShim = _interopRequireWildcard(_common_shim);\n\nvar _sdp = require('sdp');\n\nvar sdp = _interopRequireWildcard(_sdp);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// Shimming starts here.\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 */\nfunction adapterFactory() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      window = _ref.window;\n\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    shimChrome: true,\n    shimFirefox: true,\n    shimSafari: true\n  };\n\n  // Utils.\n  var logging = utils.log;\n  var browserDetails = utils.detectBrowser(window);\n\n  var adapter = {\n    browserDetails: browserDetails,\n    commonShim: commonShim,\n    extractVersion: utils.extractVersion,\n    disableLog: utils.disableLog,\n    disableWarnings: utils.disableWarnings,\n    // Expose sdp as a convenience. For production apps include directly.\n    sdp: sdp\n  };\n\n  // Shim browser if found.\n  switch (browserDetails.browser) {\n    case 'chrome':\n      if (!chromeShim || !chromeShim.shimPeerConnection || !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      commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n      chromeShim.shimGetUserMedia(window, browserDetails);\n      chromeShim.shimMediaStream(window, browserDetails);\n      chromeShim.shimPeerConnection(window, browserDetails);\n      chromeShim.shimOnTrack(window, browserDetails);\n      chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n      chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n      chromeShim.shimGetStats(window, browserDetails);\n      chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n      chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n      commonShim.shimRTCIceCandidate(window, browserDetails);\n      commonShim.shimConnectionState(window, browserDetails);\n      commonShim.shimMaxMessageSize(window, browserDetails);\n      commonShim.shimSendThrowTypeError(window, browserDetails);\n      commonShim.removeExtmapAllowMixed(window, browserDetails);\n      break;\n    case 'firefox':\n      if (!firefoxShim || !firefoxShim.shimPeerConnection || !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      commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n      firefoxShim.shimGetUserMedia(window, browserDetails);\n      firefoxShim.shimPeerConnection(window, browserDetails);\n      firefoxShim.shimOnTrack(window, browserDetails);\n      firefoxShim.shimRemoveStream(window, browserDetails);\n      firefoxShim.shimSenderGetStats(window, browserDetails);\n      firefoxShim.shimReceiverGetStats(window, browserDetails);\n      firefoxShim.shimRTCDataChannel(window, browserDetails);\n      firefoxShim.shimAddTransceiver(window, browserDetails);\n      firefoxShim.shimGetParameters(window, browserDetails);\n      firefoxShim.shimCreateOffer(window, browserDetails);\n      firefoxShim.shimCreateAnswer(window, browserDetails);\n\n      commonShim.shimRTCIceCandidate(window, browserDetails);\n      commonShim.shimConnectionState(window, browserDetails);\n      commonShim.shimMaxMessageSize(window, browserDetails);\n      commonShim.shimSendThrowTypeError(window, browserDetails);\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      commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n      safariShim.shimRTCIceServerUrls(window, browserDetails);\n      safariShim.shimCreateOfferLegacy(window, browserDetails);\n      safariShim.shimCallbacksAPI(window, browserDetails);\n      safariShim.shimLocalStreamsAPI(window, browserDetails);\n      safariShim.shimRemoteStreamsAPI(window, browserDetails);\n      safariShim.shimTrackEventTransceiver(window, browserDetails);\n      safariShim.shimGetUserMedia(window, browserDetails);\n      safariShim.shimAudioContext(window, browserDetails);\n\n      commonShim.shimRTCIceCandidate(window, browserDetails);\n      commonShim.shimMaxMessageSize(window, browserDetails);\n      commonShim.shimSendThrowTypeError(window, browserDetails);\n      commonShim.removeExtmapAllowMixed(window, browserDetails);\n      break;\n    default:\n      logging('Unsupported browser!');\n      break;\n  }\n\n  return adapter;\n}\n\n// Browser shims.\n\n},{\"./chrome/chrome_shim\":3,\"./common_shim\":6,\"./firefox/firefox_shim\":7,\"./safari/safari_shim\":10,\"./utils\":11,\"sdp\":12}],3:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _getusermedia = require('./getusermedia');\n\nObject.defineProperty(exports, 'shimGetUserMedia', {\n  enumerable: true,\n  get: function get() {\n    return _getusermedia.shimGetUserMedia;\n  }\n});\n\nvar _getdisplaymedia = require('./getdisplaymedia');\n\nObject.defineProperty(exports, 'shimGetDisplayMedia', {\n  enumerable: true,\n  get: function get() {\n    return _getdisplaymedia.shimGetDisplayMedia;\n  }\n});\nexports.shimMediaStream = shimMediaStream;\nexports.shimOnTrack = shimOnTrack;\nexports.shimGetSendersWithDtmf = shimGetSendersWithDtmf;\nexports.shimGetStats = shimGetStats;\nexports.shimSenderReceiverGetStats = shimSenderReceiverGetStats;\nexports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative;\nexports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.fixNegotiationNeeded = fixNegotiationNeeded;\n\nvar _utils = require('../utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction shimMediaStream(window) {\n  window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nfunction shimOnTrack(window) {\n  if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n      get: function get() {\n        return this._ontrack;\n      },\n      set: function set(f) {\n        if (this._ontrack) {\n          this.removeEventListener('track', this._ontrack);\n        }\n        this.addEventListener('track', this._ontrack = f);\n      },\n\n      enumerable: true,\n      configurable: true\n    });\n    var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n    window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n      var _this = this;\n\n      if (!this._ontrackpoly) {\n        this._ontrackpoly = function (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', function (te) {\n            var receiver = void 0;\n            if (window.RTCPeerConnection.prototype.getReceivers) {\n              receiver = _this.getReceivers().find(function (r) {\n                return r.track && r.track.id === te.track.id;\n              });\n            } else {\n              receiver = { track: te.track };\n            }\n\n            var event = new Event('track');\n            event.track = te.track;\n            event.receiver = receiver;\n            event.transceiver = { receiver: receiver };\n            event.streams = [e.stream];\n            _this.dispatchEvent(event);\n          });\n          e.stream.getTracks().forEach(function (track) {\n            var receiver = void 0;\n            if (window.RTCPeerConnection.prototype.getReceivers) {\n              receiver = _this.getReceivers().find(function (r) {\n                return r.track && r.track.id === track.id;\n              });\n            } else {\n              receiver = { track: track };\n            }\n            var event = new Event('track');\n            event.track = track;\n            event.receiver = receiver;\n            event.transceiver = { receiver: 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    utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n      if (!e.transceiver) {\n        Object.defineProperty(e, 'transceiver', { 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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n    var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) {\n      return {\n        track: 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      var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n      window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n        var 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      var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n      window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n        origRemoveTrack.apply(this, arguments);\n        var idx = this._senders.indexOf(sender);\n        if (idx !== -1) {\n          this._senders.splice(idx, 1);\n        }\n      };\n    }\n    var origAddStream = window.RTCPeerConnection.prototype.addStream;\n    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n      var _this2 = this;\n\n      this._senders = this._senders || [];\n      origAddStream.apply(this, [stream]);\n      stream.getTracks().forEach(function (track) {\n        _this2._senders.push(shimSenderWithDtmf(_this2, track));\n      });\n    };\n\n    var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n    window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n      var _this3 = this;\n\n      this._senders = this._senders || [];\n      origRemoveStream.apply(this, [stream]);\n\n      stream.getTracks().forEach(function (track) {\n        var sender = _this3._senders.find(function (s) {\n          return s.track === track;\n        });\n        if (sender) {\n          // remove sender\n          _this3._senders.splice(_this3._senders.indexOf(sender), 1);\n        }\n      });\n    };\n  } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n    var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n    window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n      var _this4 = this;\n\n      var senders = origGetSenders.apply(this, []);\n      senders.forEach(function (sender) {\n        return sender._pc = _this4;\n      });\n      return senders;\n    };\n\n    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n      get: function 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  var origGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    var _this5 = this;\n\n    var _arguments = Array.prototype.slice.call(arguments),\n        selector = _arguments[0],\n        onSucc = _arguments[1],\n        onErr = _arguments[2];\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\n\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 || typeof selector !== 'function')) {\n      return origGetStats.apply(this, []);\n    }\n\n    var fixChromeStats_ = function fixChromeStats_(response) {\n      var standardReport = {};\n      var reports = response.result();\n      reports.forEach(function (report) {\n        var 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(function (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    var makeMapStats = function makeMapStats(stats) {\n      return new Map(Object.keys(stats).map(function (key) {\n        return [key, stats[key]];\n      }));\n    };\n\n    if (arguments.length >= 2) {\n      var successCallbackWrapper_ = function successCallbackWrapper_(response) {\n        onSucc(makeMapStats(fixChromeStats_(response)));\n      };\n\n      return origGetStats.apply(this, [successCallbackWrapper_, selector]);\n    }\n\n    // promise-support\n    return new Promise(function (resolve, reject) {\n      origGetStats.apply(_this5, [function (response) {\n        resolve(makeMapStats(fixChromeStats_(response)));\n      }, reject]);\n    }).then(onSucc, onErr);\n  };\n}\n\nfunction shimSenderReceiverGetStats(window) {\n  if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n    return;\n  }\n\n  // shim sender stats.\n  if (!('getStats' in window.RTCRtpSender.prototype)) {\n    var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n    if (origGetSenders) {\n      window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n        var _this6 = this;\n\n        var senders = origGetSenders.apply(this, []);\n        senders.forEach(function (sender) {\n          return sender._pc = _this6;\n        });\n        return senders;\n      };\n    }\n\n    var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n    if (origAddTrack) {\n      window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n        var sender = origAddTrack.apply(this, arguments);\n        sender._pc = this;\n        return sender;\n      };\n    }\n    window.RTCRtpSender.prototype.getStats = function getStats() {\n      var sender = this;\n      return this._pc.getStats().then(function (result) {\n        return (\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          utils.filterStats(result, sender.track, true)\n        );\n      });\n    };\n  }\n\n  // shim receiver stats.\n  if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n    var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n    if (origGetReceivers) {\n      window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n        var _this7 = this;\n\n        var receivers = origGetReceivers.apply(this, []);\n        receivers.forEach(function (receiver) {\n          return receiver._pc = _this7;\n        });\n        return receivers;\n      };\n    }\n    utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n      e.receiver._pc = e.srcElement;\n      return e;\n    });\n    window.RTCRtpReceiver.prototype.getStats = function getStats() {\n      var receiver = this;\n      return this._pc.getStats().then(function (result) {\n        return utils.filterStats(result, receiver.track, false);\n      });\n    };\n  }\n\n  if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n    return;\n  }\n\n  // shim RTCPeerConnection.getStats(track).\n  var origGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n      var track = arguments[0];\n      var sender = void 0;\n      var receiver = void 0;\n      var err = void 0;\n      this.getSenders().forEach(function (s) {\n        if (s.track === track) {\n          if (sender) {\n            err = true;\n          } else {\n            sender = s;\n          }\n        }\n      });\n      this.getReceivers().forEach(function (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('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n      } else if (sender) {\n        return sender.getStats();\n      } else if (receiver) {\n        return receiver.getStats();\n      }\n      return Promise.reject(new DOMException('There is no sender or receiver for the track.', '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 = function getLocalStreams() {\n    var _this8 = this;\n\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    return Object.keys(this._shimmedLocalStreams).map(function (streamId) {\n      return _this8._shimmedLocalStreams[streamId][0];\n    });\n  };\n\n  var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n  window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n    if (!stream) {\n      return origAddTrack.apply(this, arguments);\n    }\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n    var 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  var origAddStream = window.RTCPeerConnection.prototype.addStream;\n  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n    var _this9 = this;\n\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n    stream.getTracks().forEach(function (track) {\n      var alreadyExists = _this9.getSenders().find(function (s) {\n        return s.track === track;\n      });\n      if (alreadyExists) {\n        throw new DOMException('Track already exists.', 'InvalidAccessError');\n      }\n    });\n    var existingSenders = this.getSenders();\n    origAddStream.apply(this, arguments);\n    var newSenders = this.getSenders().filter(function (newSender) {\n      return existingSenders.indexOf(newSender) === -1;\n    });\n    this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n  };\n\n  var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    delete this._shimmedLocalStreams[stream.id];\n    return origRemoveStream.apply(this, arguments);\n  };\n\n  var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n  window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n    var _this10 = this;\n\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    if (sender) {\n      Object.keys(this._shimmedLocalStreams).forEach(function (streamId) {\n        var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender);\n        if (idx !== -1) {\n          _this10._shimmedLocalStreams[streamId].splice(idx, 1);\n        }\n        if (_this10._shimmedLocalStreams[streamId].length === 1) {\n          delete _this10._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 && 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  var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n  window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n    var _this11 = this;\n\n    var nativeStreams = origGetLocalStreams.apply(this);\n    this._reverseStreams = this._reverseStreams || {};\n    return nativeStreams.map(function (stream) {\n      return _this11._reverseStreams[stream.id];\n    });\n  };\n\n  var origAddStream = window.RTCPeerConnection.prototype.addStream;\n  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n    var _this12 = this;\n\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n\n    stream.getTracks().forEach(function (track) {\n      var alreadyExists = _this12.getSenders().find(function (s) {\n        return s.track === track;\n      });\n      if (alreadyExists) {\n        throw new DOMException('Track already exists.', '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      var 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  var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n  window.RTCPeerConnection.prototype.removeStream = 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] ? this._streams[stream.id].id : stream.id];\n    delete this._streams[stream.id];\n  };\n\n  window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n    var _this13 = this;\n\n    if (this.signalingState === 'closed') {\n      throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n    }\n    var streams = [].slice.call(arguments, 1);\n    if (streams.length !== 1 || !streams[0].getTracks().find(function (t) {\n      return t === track;\n    })) {\n      // this is not fully correct but all we can manage without\n      // [[associated MediaStreams]] internal slot.\n      throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n    }\n\n    var alreadyExists = this.getSenders().find(function (s) {\n      return s.track === track;\n    });\n    if (alreadyExists) {\n      throw new DOMException('Track already exists.', 'InvalidAccessError');\n    }\n\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    var 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(function () {\n        _this13.dispatchEvent(new Event('negotiationneeded'));\n      });\n    } else {\n      var 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(function (s) {\n      return s.track === track;\n    });\n  };\n\n  // replace the internal stream id with the external one and\n  // vice versa.\n  function replaceInternalStreamId(pc, description) {\n    var sdp = description.sdp;\n    Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n      var externalStream = pc._reverseStreams[internalId];\n      var internalStream = pc._streams[externalStream.id];\n      sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n    });\n    return new RTCSessionDescription({\n      type: description.type,\n      sdp: sdp\n    });\n  }\n  function replaceExternalStreamId(pc, description) {\n    var sdp = description.sdp;\n    Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n      var externalStream = pc._reverseStreams[internalId];\n      var internalStream = pc._streams[externalStream.id];\n      sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n    });\n    return new RTCSessionDescription({\n      type: description.type,\n      sdp: sdp\n    });\n  }\n  ['createOffer', 'createAnswer'].forEach(function (method) {\n    var nativeMethod = window.RTCPeerConnection.prototype[method];\n    var methodObj = _defineProperty({}, method, function () {\n      var _this14 = this;\n\n      var args = arguments;\n      var isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n      if (isLegacyCall) {\n        return nativeMethod.apply(this, [function (description) {\n          var desc = replaceInternalStreamId(_this14, description);\n          args[0].apply(null, [desc]);\n        }, function (err) {\n          if (args[1]) {\n            args[1].apply(null, err);\n          }\n        }, arguments[2]]);\n      }\n      return nativeMethod.apply(this, arguments).then(function (description) {\n        return replaceInternalStreamId(_this14, description);\n      });\n    });\n    window.RTCPeerConnection.prototype[method] = methodObj[method];\n  });\n\n  var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n  window.RTCPeerConnection.prototype.setLocalDescription = 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  var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n  Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n    get: function get() {\n      var 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 = function removeTrack(sender) {\n    var _this15 = this;\n\n    if (this.signalingState === 'closed') {\n      throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', '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 ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n    }\n    var isLocal = sender._pc === this;\n    if (!isLocal) {\n      throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n    }\n\n    // Search for the native stream the senders track belongs to.\n    this._streams = this._streams || {};\n    var stream = void 0;\n    Object.keys(this._streams).forEach(function (streamid) {\n      var hasTrack = _this15._streams[streamid].getTracks().find(function (track) {\n        return sender.track === track;\n      });\n      if (hasTrack) {\n        stream = _this15._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(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'].forEach(function (method) {\n      var nativeMethod = window.RTCPeerConnection.prototype[method];\n      var methodObj = _defineProperty({}, method, function () {\n        arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : 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  utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) {\n    var pc = e.target;\n    if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n      if (pc.signalingState !== 'stable') {\n        return;\n      }\n    }\n    return e;\n  });\n}\n\n},{\"../utils.js\":11,\"./getdisplaymedia\":4,\"./getusermedia\":5}],4:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.shimGetDisplayMedia = shimGetDisplayMedia;\nfunction shimGetDisplayMedia(window, getSourceId) {\n  if (window.navigator.mediaDevices && '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 ' + 'a function');\n    return;\n  }\n  window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n    return getSourceId(constraints).then(function (sourceId) {\n      var widthSpecified = constraints.video && constraints.video.width;\n      var heightSpecified = constraints.video && constraints.video.height;\n      var frameRateSpecified = constraints.video && 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},{}],5:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimGetUserMedia = shimGetUserMedia;\n\nvar _utils = require('../utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar logging = utils.log;\n\nfunction shimGetUserMedia(window, browserDetails) {\n  var navigator = window && window.navigator;\n\n  if (!navigator.mediaDevices) {\n    return;\n  }\n\n  var constraintsToChrome_ = function constraintsToChrome_(c) {\n    if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) {\n      return c;\n    }\n    var cc = {};\n    Object.keys(c).forEach(function (key) {\n      if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n        return;\n      }\n      var 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      var oldname_ = function oldname_(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        var 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(function (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  var shimConstraints_ = function shimConstraints_(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      var remap = function remap(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      var face = constraints.video.facingMode;\n      face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face });\n      var getSupportedFacingModeLies = browserDetails.version < 66;\n\n      if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n        delete constraints.video.facingMode;\n        var matches = void 0;\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().then(function (devices) {\n            devices = devices.filter(function (d) {\n              return d.kind === 'videoinput';\n            });\n            var dev = devices.find(function (d) {\n              return matches.some(function (match) {\n                return d.label.toLowerCase().includes(match);\n              });\n            });\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 } : { 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  var shimError_ = function shimError_(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: function toString() {\n        return this.name + (this.message && ': ') + this.message;\n      }\n    };\n  };\n\n  var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) {\n    shimConstraints_(constraints, function (c) {\n      navigator.webkitGetUserMedia(c, onSuccess, function (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    var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (cs) {\n      return shimConstraints_(cs, function (c) {\n        return origGetUserMedia(c).then(function (stream) {\n          if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n            stream.getTracks().forEach(function (track) {\n              track.stop();\n            });\n            throw new DOMException('', 'NotFoundError');\n          }\n          return stream;\n        }, function (e) {\n          return Promise.reject(shimError_(e));\n        });\n      });\n    };\n  }\n}\n\n},{\"../utils.js\":11}],6:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimRTCIceCandidate = shimRTCIceCandidate;\nexports.shimMaxMessageSize = shimMaxMessageSize;\nexports.shimSendThrowTypeError = shimSendThrowTypeError;\nexports.shimConnectionState = shimConnectionState;\nexports.removeExtmapAllowMixed = removeExtmapAllowMixed;\nexports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty;\n\nvar _sdp = require('sdp');\n\nvar _sdp2 = _interopRequireDefault(_sdp);\n\nvar _utils = require('./utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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 window.RTCIceCandidate.prototype) {\n    return;\n  }\n\n  var 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 === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && 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      var nativeCandidate = new NativeRTCIceCandidate(args);\n      var parsedCandidate = _sdp2.default.parseCandidate(args.candidate);\n      var augmentedCandidate = Object.assign(nativeCandidate, 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  utils.wrapPeerConnectionEvent(window, 'icecandidate', function (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: function get() {\n        return typeof this._sctp === 'undefined' ? null : this._sctp;\n      }\n    });\n  }\n\n  var sctpInDescription = function sctpInDescription(description) {\n    if (!description || !description.sdp) {\n      return false;\n    }\n    var sections = _sdp2.default.splitSections(description.sdp);\n    sections.shift();\n    return sections.some(function (mediaSection) {\n      var mLine = _sdp2.default.parseMLine(mediaSection);\n      return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n    });\n  };\n\n  var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) {\n    // TODO: Is there a better solution for detecting Firefox?\n    var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n    if (match === null || match.length < 2) {\n      return -1;\n    }\n    var version = parseInt(match[1], 10);\n    // Test for NaN (yes, this is ugly)\n    return version !== version ? -1 : version;\n  };\n\n  var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(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    var 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 = 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  var getMaxMessageSize = function getMaxMessageSize(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    var 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' && browserDetails.version === 57) {\n      maxMessageSize = 65535;\n    }\n\n    var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:');\n    if (match.length > 0) {\n      maxMessageSize = parseInt(match[0].substr(19), 10);\n    } else if (browserDetails.browser === 'firefox' && 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  var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n  window.RTCPeerConnection.prototype.setRemoteDescription = 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      var _getConfiguration = this.getConfiguration(),\n          sdpSemantics = _getConfiguration.sdpSemantics;\n\n      if (sdpSemantics === 'plan-b') {\n        Object.defineProperty(this, 'sctp', {\n          get: function get() {\n            return typeof this._sctp === 'undefined' ? null : this._sctp;\n          },\n\n          enumerable: true,\n          configurable: true\n        });\n      }\n    }\n\n    if (sctpInDescription(arguments[0])) {\n      // Check if the remote is FF.\n      var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n      // Get the maximum message size the local peer is capable of sending\n      var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n      // Get the maximum message size of the remote peer.\n      var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n      // Determine final maximum message size\n      var maxMessageSize = void 0;\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      var sctp = {};\n      Object.defineProperty(sctp, 'maxMessageSize', {\n        get: function 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 && '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    var origDataChannelSend = dc.send;\n    dc.send = function send() {\n      var data = arguments[0];\n      var length = data.length || data.size || data.byteLength;\n      if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n        throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n      }\n      return origDataChannelSend.apply(dc, arguments);\n    };\n  }\n  var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n  window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n    var dataChannel = origCreateDataChannel.apply(this, arguments);\n    wrapDcSend(dataChannel, this);\n    return dataChannel;\n  };\n  utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) {\n    wrapDcSend(e.channel, e.target);\n    return e;\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 || 'connectionState' in window.RTCPeerConnection.prototype) {\n    return;\n  }\n  var proto = window.RTCPeerConnection.prototype;\n  Object.defineProperty(proto, 'connectionState', {\n    get: function get() {\n      return {\n        completed: 'connected',\n        checking: 'connecting'\n      }[this.iceConnectionState] || this.iceConnectionState;\n    },\n\n    enumerable: true,\n    configurable: true\n  });\n  Object.defineProperty(proto, 'onconnectionstatechange', {\n    get: function get() {\n      return this._onconnectionstatechange || null;\n    },\n    set: function set(cb) {\n      if (this._onconnectionstatechange) {\n        this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n        delete this._onconnectionstatechange;\n      }\n      if (cb) {\n        this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n      }\n    },\n\n    enumerable: true,\n    configurable: true\n  });\n\n  ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) {\n    var origMethod = proto[method];\n    proto[method] = function () {\n      if (!this._connectionstatechangepoly) {\n        this._connectionstatechangepoly = function (e) {\n          var pc = e.target;\n          if (pc._lastConnectionState !== pc.connectionState) {\n            pc._lastConnectionState = pc.connectionState;\n            var newEvent = new Event('connectionstatechange', e);\n            pc.dispatchEvent(newEvent);\n          }\n          return e;\n        };\n        this.addEventListener('iceconnectionstatechange', 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  var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n  window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n    if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n      var sdp = desc.sdp.split('\\n').filter(function (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 && desc instanceof window.RTCSessionDescription) {\n        arguments[0] = new window.RTCSessionDescription({\n          type: desc.type,\n          sdp: 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  var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n  if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.addIceCandidate = 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 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n      return Promise.resolve();\n    }\n    return nativeAddIceCandidate.apply(this, arguments);\n  };\n}\n\n},{\"./utils\":11,\"sdp\":12}],7:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _getusermedia = require('./getusermedia');\n\nObject.defineProperty(exports, 'shimGetUserMedia', {\n  enumerable: true,\n  get: function get() {\n    return _getusermedia.shimGetUserMedia;\n  }\n});\n\nvar _getdisplaymedia = require('./getdisplaymedia');\n\nObject.defineProperty(exports, 'shimGetDisplayMedia', {\n  enumerable: true,\n  get: function get() {\n    return _getdisplaymedia.shimGetDisplayMedia;\n  }\n});\nexports.shimOnTrack = shimOnTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.shimSenderGetStats = shimSenderGetStats;\nexports.shimReceiverGetStats = shimReceiverGetStats;\nexports.shimRemoveStream = shimRemoveStream;\nexports.shimRTCDataChannel = shimRTCDataChannel;\nexports.shimAddTransceiver = shimAddTransceiver;\nexports.shimGetParameters = shimGetParameters;\nexports.shimCreateOffer = shimCreateOffer;\nexports.shimCreateAnswer = shimCreateAnswer;\n\nvar _utils = require('../utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction shimOnTrack(window) {\n  if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n      get: function get() {\n        return { receiver: this.receiver };\n      }\n    });\n  }\n}\n\nfunction shimPeerConnection(window, browserDetails) {\n  if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(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'].forEach(function (method) {\n      var nativeMethod = window.RTCPeerConnection.prototype[method];\n      var methodObj = _defineProperty({}, method, function () {\n        arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n        return nativeMethod.apply(this, arguments);\n      });\n      window.RTCPeerConnection.prototype[method] = methodObj[method];\n    });\n  }\n\n  var modernStatsTypes = {\n    inboundrtp: 'inbound-rtp',\n    outboundrtp: 'outbound-rtp',\n    candidatepair: 'candidate-pair',\n    localcandidate: 'local-candidate',\n    remotecandidate: 'remote-candidate'\n  };\n\n  var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    var _arguments = Array.prototype.slice.call(arguments),\n        selector = _arguments[0],\n        onSucc = _arguments[1],\n        onErr = _arguments[2];\n\n    return nativeGetStats.apply(this, [selector || null]).then(function (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(function (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(function (stat, i) {\n            stats.set(i, Object.assign({}, stat, {\n              type: modernStatsTypes[stat.type] || stat.type\n            }));\n          });\n        }\n      }\n      return stats;\n    }).then(onSucc, onErr);\n  };\n}\n\nfunction shimSenderGetStats(window) {\n  if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n    return;\n  }\n  if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n    return;\n  }\n  var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n  if (origGetSenders) {\n    window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n      var _this = this;\n\n      var senders = origGetSenders.apply(this, []);\n      senders.forEach(function (sender) {\n        return sender._pc = _this;\n      });\n      return senders;\n    };\n  }\n\n  var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n  if (origAddTrack) {\n    window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n      var 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) : Promise.resolve(new Map());\n  };\n}\n\nfunction shimReceiverGetStats(window) {\n  if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n    return;\n  }\n  if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n    return;\n  }\n  var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n  if (origGetReceivers) {\n    window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n      var _this2 = this;\n\n      var receivers = origGetReceivers.apply(this, []);\n      receivers.forEach(function (receiver) {\n        return receiver._pc = _this2;\n      });\n      return receivers;\n    };\n  }\n  utils.wrapPeerConnectionEvent(window, 'track', function (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 || 'removeStream' in window.RTCPeerConnection.prototype) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    var _this3 = this;\n\n    utils.deprecated('removeStream', 'removeTrack');\n    this.getSenders().forEach(function (sender) {\n      if (sender.track && stream.getTracks().includes(sender.track)) {\n        _this3.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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n  if (origAddTransceiver) {\n    window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n      this.setParametersPromises = [];\n      var initParameters = arguments[1];\n      var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters;\n      if (shouldPerformCheck) {\n        // If sendEncodings params are provided, validate grammar\n        initParameters.sendEncodings.forEach(function (encodingParam) {\n          if ('rid' in encodingParam) {\n            var 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      var 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        var sender = transceiver.sender;\n\n        var params = sender.getParameters();\n        if (!('encodings' in params) ||\n        // Avoid being fooled by patched getParameters() below.\n        params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n          params.encodings = initParameters.sendEncodings;\n          sender.sendEncodings = initParameters.sendEncodings;\n          this.setParametersPromises.push(sender.setParameters(params).then(function () {\n            delete sender.sendEncodings;\n          }).catch(function () {\n            delete sender.sendEncodings;\n          }));\n        }\n      }\n      return transceiver;\n    };\n  }\n}\n\nfunction shimGetParameters(window) {\n  if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) {\n    return;\n  }\n  var origGetParameters = window.RTCRtpSender.prototype.getParameters;\n  if (origGetParameters) {\n    window.RTCRtpSender.prototype.getParameters = function getParameters() {\n      var 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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n  window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n    var _this4 = this,\n        _arguments2 = arguments;\n\n    if (this.setParametersPromises && this.setParametersPromises.length) {\n      return Promise.all(this.setParametersPromises).then(function () {\n        return origCreateOffer.apply(_this4, _arguments2);\n      }).finally(function () {\n        _this4.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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n  window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n    var _this5 = this,\n        _arguments3 = arguments;\n\n    if (this.setParametersPromises && this.setParametersPromises.length) {\n      return Promise.all(this.setParametersPromises).then(function () {\n        return origCreateAnswer.apply(_this5, _arguments3);\n      }).finally(function () {\n        _this5.setParametersPromises = [];\n      });\n    }\n    return origCreateAnswer.apply(this, arguments);\n  };\n}\n\n},{\"../utils\":11,\"./getdisplaymedia\":8,\"./getusermedia\":9}],8:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.shimGetDisplayMedia = shimGetDisplayMedia;\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n  if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n    return;\n  }\n  if (!window.navigator.mediaDevices) {\n    return;\n  }\n  window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n    if (!(constraints && constraints.video)) {\n      var err = new DOMException('getDisplayMedia without video ' + '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},{}],9:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimGetUserMedia = shimGetUserMedia;\n\nvar _utils = require('../utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction shimGetUserMedia(window, browserDetails) {\n  var navigator = window && window.navigator;\n  var MediaStreamTrack = window && window.MediaStreamTrack;\n\n  navigator.getUserMedia = function (constraints, onSuccess, onError) {\n    // Replace Firefox 44+'s deprecation warning with unprefixed version.\n    utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n    navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n  };\n\n  if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n    var remap = function remap(obj, a, b) {\n      if (a in obj && !(b in obj)) {\n        obj[b] = obj[a];\n        delete obj[a];\n      }\n    };\n\n    var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (c) {\n      if ((typeof c === 'undefined' ? 'undefined' : _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      var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n      MediaStreamTrack.prototype.getSettings = function () {\n        var 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      var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n      MediaStreamTrack.prototype.applyConstraints = function (c) {\n        if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _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},{\"../utils\":11}],10:[function(require,module,exports){\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'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimLocalStreamsAPI = shimLocalStreamsAPI;\nexports.shimRemoteStreamsAPI = shimRemoteStreamsAPI;\nexports.shimCallbacksAPI = shimCallbacksAPI;\nexports.shimGetUserMedia = shimGetUserMedia;\nexports.shimConstraints = shimConstraints;\nexports.shimRTCIceServerUrls = shimRTCIceServerUrls;\nexports.shimTrackEventTransceiver = shimTrackEventTransceiver;\nexports.shimCreateOfferLegacy = shimCreateOfferLegacy;\nexports.shimAudioContext = shimAudioContext;\n\nvar _utils = require('../utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction shimLocalStreamsAPI(window) {\n  if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      return this._localStreams;\n    };\n  }\n  if (!('addStream' in window.RTCPeerConnection.prototype)) {\n    var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n      var _this = this;\n\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(function (track) {\n        return _addTrack.call(_this, track, stream);\n      });\n      stream.getVideoTracks().forEach(function (track) {\n        return _addTrack.call(_this, track, stream);\n      });\n    };\n\n    window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n      var _this2 = this;\n\n      for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        streams[_key - 1] = arguments[_key];\n      }\n\n      if (streams) {\n        streams.forEach(function (stream) {\n          if (!_this2._localStreams) {\n            _this2._localStreams = [stream];\n          } else if (!_this2._localStreams.includes(stream)) {\n            _this2._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 = function removeStream(stream) {\n      var _this3 = this;\n\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      var index = this._localStreams.indexOf(stream);\n      if (index === -1) {\n        return;\n      }\n      this._localStreams.splice(index, 1);\n      var tracks = stream.getTracks();\n      this.getSenders().forEach(function (sender) {\n        if (tracks.includes(sender.track)) {\n          _this3.removeTrack(sender);\n        }\n      });\n    };\n  }\n}\n\nfunction shimRemoteStreamsAPI(window) {\n  if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.getRemoteStreams = 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: function get() {\n        return this._onaddstream;\n      },\n      set: function set(f) {\n        var _this4 = this;\n\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 = function (e) {\n          e.streams.forEach(function (stream) {\n            if (!_this4._remoteStreams) {\n              _this4._remoteStreams = [];\n            }\n            if (_this4._remoteStreams.includes(stream)) {\n              return;\n            }\n            _this4._remoteStreams.push(stream);\n            var event = new Event('addstream');\n            event.stream = stream;\n            _this4.dispatchEvent(event);\n          });\n        });\n      }\n    });\n    var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n    window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n      var pc = this;\n      if (!this._onaddstreampoly) {\n        this.addEventListener('track', this._onaddstreampoly = function (e) {\n          e.streams.forEach(function (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            var 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 === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  var prototype = window.RTCPeerConnection.prototype;\n  var origCreateOffer = prototype.createOffer;\n  var origCreateAnswer = prototype.createAnswer;\n  var setLocalDescription = prototype.setLocalDescription;\n  var setRemoteDescription = prototype.setRemoteDescription;\n  var addIceCandidate = prototype.addIceCandidate;\n\n  prototype.createOffer = function createOffer(successCallback, failureCallback) {\n    var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n    var 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 = function createAnswer(successCallback, failureCallback) {\n    var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n    var promise = origCreateAnswer.apply(this, [options]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n\n  var withCallback = function withCallback(description, successCallback, failureCallback) {\n    var 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 withCallback(description, successCallback, failureCallback) {\n    var 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 withCallback(candidate, successCallback, failureCallback) {\n    var 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  var navigator = window && window.navigator;\n\n  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    // shim not needed in Safari 12.1\n    var mediaDevices = navigator.mediaDevices;\n    var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (constraints) {\n      return _getUserMedia(shimConstraints(constraints));\n    };\n  }\n\n  if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n      navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n    }.bind(navigator);\n  }\n}\n\nfunction shimConstraints(constraints) {\n  if (constraints && constraints.video !== undefined) {\n    return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) });\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  var OrigPeerConnection = window.RTCPeerConnection;\n  window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n    if (pcConfig && pcConfig.iceServers) {\n      var newIceServers = [];\n      for (var i = 0; i < pcConfig.iceServers.length; i++) {\n        var server = pcConfig.iceServers[i];\n        if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) {\n          utils.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: function 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 === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n      get: function get() {\n        return { receiver: this.receiver };\n      }\n    });\n  }\n}\n\nfunction shimCreateOfferLegacy(window) {\n  var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n  window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n    if (offerOptions) {\n      if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n        // support bit values\n        offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n      }\n      var audioTransceiver = this.getTransceivers().find(function (transceiver) {\n        return transceiver.receiver.track.kind === 'audio';\n      });\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 && !audioTransceiver) {\n        this.addTransceiver('audio');\n      }\n\n      if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n        // support bit values\n        offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n      }\n      var videoTransceiver = this.getTransceivers().find(function (transceiver) {\n        return transceiver.receiver.track.kind === 'video';\n      });\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 && !videoTransceiver) {\n        this.addTransceiver('video');\n      }\n    }\n    return origCreateOffer.apply(this, arguments);\n  };\n}\n\nfunction shimAudioContext(window) {\n  if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) {\n    return;\n  }\n  window.AudioContext = window.webkitAudioContext;\n}\n\n},{\"../utils\":11}],11:[function(require,module,exports){\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/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.extractVersion = extractVersion;\nexports.wrapPeerConnectionEvent = wrapPeerConnectionEvent;\nexports.disableLog = disableLog;\nexports.disableWarnings = disableWarnings;\nexports.log = log;\nexports.deprecated = deprecated;\nexports.detectBrowser = detectBrowser;\nexports.compactObject = compactObject;\nexports.walkStats = walkStats;\nexports.filterStats = filterStats;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar logDisabled_ = true;\nvar 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  var 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  var proto = window.RTCPeerConnection.prototype;\n  var nativeAddEventListener = proto.addEventListener;\n  proto.addEventListener = function (nativeEventName, cb) {\n    if (nativeEventName !== eventNameToWrap) {\n      return nativeAddEventListener.apply(this, arguments);\n    }\n    var wrappedCallback = function wrappedCallback(e) {\n      var 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, wrappedCallback]);\n  };\n\n  var nativeRemoveEventListener = proto.removeEventListener;\n  proto.removeEventListener = function (nativeEventName, cb) {\n    if (nativeEventName !== eventNameToWrap || !this._eventMap || !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    var 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, unwrappedCb]);\n  };\n\n  Object.defineProperty(proto, 'on' + eventNameToWrap, {\n    get: function get() {\n      return this['_on' + eventNameToWrap];\n    },\n    set: function set(cb) {\n      if (this['_on' + eventNameToWrap]) {\n        this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n        delete this['_on' + eventNameToWrap];\n      }\n      if (cb) {\n        this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n      }\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 === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.');\n  }\n  logDisabled_ = bool;\n  return bool ? 'adapter.js logging disabled' : '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 === 'undefined' ? 'undefined' : _typeof(bool)) + '. 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 === 'undefined' ? 'undefined' : _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 + ' 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  var 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  var navigator = window.navigator;\n\n\n  if (navigator.mozGetUserMedia) {\n    // Firefox.\n    result.browser = 'firefox';\n    result.version = extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1);\n  } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) {\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, /Chrom(e|ium)\\/(\\d+)\\./, 2);\n  } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n    // Safari.\n    result.browser = 'safari';\n    result.version = extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1);\n    result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n  } else {\n    // 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    var isObj = isObject(data[key]);\n    var value = isObj ? compactObject(data[key]) : data[key];\n    var isEmptyObject = isObj && !Object.keys(value).length;\n    if (value === undefined || isEmptyObject) {\n      return accumulator;\n    }\n    return Object.assign(accumulator, _defineProperty({}, 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(function (name) {\n    if (name.endsWith('Id')) {\n      walkStats(stats, stats.get(base[name]), resultSet);\n    } else if (name.endsWith('Ids')) {\n      base[name].forEach(function (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  var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n  var filteredResult = new Map();\n  if (track === null) {\n    return filteredResult;\n  }\n  var trackStats = [];\n  result.forEach(function (value) {\n    if (value.type === 'track' && value.trackIdentifier === track.id) {\n      trackStats.push(value);\n    }\n  });\n  trackStats.forEach(function (trackStat) {\n    result.forEach(function (stats) {\n      if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n        walkStats(result, stats, filteredResult);\n      }\n    });\n  });\n  return filteredResult;\n}\n\n},{}],12:[function(require,module,exports){\n/* eslint-env node */\n'use strict';\n\n// SDP helpers.\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar 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(function (line) {\n    return line.trim();\n  });\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function (blob) {\n  var parts = blob.split('\\nm=');\n  return parts.map(function (part, index) {\n    return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n  });\n};\n\n// returns the session description.\nSDPUtils.getDescription = function (blob) {\n  var sections = SDPUtils.splitSections(blob);\n  return sections && sections[0];\n};\n\n// returns the individual media sections.\nSDPUtils.getMediaSections = function (blob) {\n  var 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(function (line) {\n    return line.indexOf(prefix) === 0;\n  });\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\"\nSDPUtils.parseCandidate = function (line) {\n  var parts = void 0;\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  var candidate = {\n    foundation: parts[0],\n    component: { 1: 'rtp', 2: 'rtcp' }[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 (var 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:\n        // 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.\nSDPUtils.writeCandidate = function (candidate) {\n  var sdp = [];\n  sdp.push(candidate.foundation);\n\n  var 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  var type = candidate.type;\n  sdp.push('typ');\n  sdp.push(type);\n  if (type !== 'host' && candidate.relatedAddress && 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// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function (line) {\n  return line.substr(14).split(' ');\n};\n\n// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function (line) {\n  var parts = line.substr(9).split(' ');\n  var 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// Generate an a=rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function (codec) {\n  var pt = codec.payloadType;\n  if (codec.preferredPayloadType !== undefined) {\n    pt = codec.preferredPayloadType;\n  }\n  var channels = codec.channels || codec.numChannels || 1;\n  return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses an 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  var 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 a=extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function (headerExtension) {\n  return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses an ftmp 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  var parsed = {};\n  var kv = void 0;\n  var parts = line.substr(line.indexOf(' ') + 1).split(';');\n  for (var 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 an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function (codec) {\n  var line = '';\n  var pt = codec.payloadType;\n  if (codec.preferredPayloadType !== undefined) {\n    pt = codec.preferredPayloadType;\n  }\n  if (codec.parameters && Object.keys(codec.parameters).length) {\n    var params = [];\n    Object.keys(codec.parameters).forEach(function (param) {\n      if (codec.parameters[param]) {\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 an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function (line) {\n  var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n  return {\n    type: parts.shift(),\n    parameter: parts.join(' ')\n  };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function (codec) {\n  var lines = '';\n  var 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(function (fb) {\n      lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n    });\n  }\n  return lines;\n};\n\n// Parses an RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function (line) {\n  var sp = line.indexOf(' ');\n  var parts = {\n    ssrc: parseInt(line.substr(7, sp - 7), 10)\n  };\n  var 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\nSDPUtils.parseSsrcGroup = function (line) {\n  var parts = line.substr(13).split(' ');\n  return {\n    semantics: parts.shift(),\n    ssrcs: parts.map(function (ssrc) {\n      return parseInt(ssrc, 10);\n    })\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  var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n  if (mid) {\n    return mid.substr(6);\n  }\n};\n\nSDPUtils.parseFingerprint = function (line) {\n  var parts = line.substr(14).split(' ');\n  return {\n    algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n    value: parts[1]\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  var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n  // Note: a=setup line is ignored since we use the 'auto' role.\n  // Note2: 'algorithm' is not case sensitive except 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  var sdp = 'a=setup:' + setupType + '\\r\\n';\n  params.fingerprints.forEach(function (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  var 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 + ' ' + parameters.cryptoSuite + ' ' + (_typeof(parameters.keyParams) === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\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  var 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 + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n  var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, '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  var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n  var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, '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  var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\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  var description = {\n    codecs: [],\n    headerExtensions: [],\n    fecMechanisms: [],\n    rtcp: []\n  };\n  var lines = SDPUtils.splitLines(mediaSection);\n  var mline = lines[0].split(' ');\n  for (var i = 3; i < mline.length; i++) {\n    // find all codecs from mline[3..]\n    var pt = mline[i];\n    var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n    if (rtpmapline) {\n      var codec = SDPUtils.parseRtpMap(rtpmapline);\n      var fmtps = SDPUtils.matchPrefix(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(mediaSection, 'a=rtcp-fb:' + pt + ' ').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        default:\n          // only RED and ULPFEC are recognized as FEC mechanisms.\n          break;\n      }\n    }\n  }\n  SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function (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  var 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(function (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(function (codec) {\n    sdp += SDPUtils.writeRtpMap(codec);\n    sdp += SDPUtils.writeFmtp(codec);\n    sdp += SDPUtils.writeRtcpFb(codec);\n  });\n  var maxptime = 0;\n  caps.codecs.forEach(function (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(function (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  var encodingParameters = [];\n  var description = SDPUtils.parseRtpParameters(mediaSection);\n  var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n  var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n  // filter a=ssrc:... cname:, ignore PlanB-msid\n  var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) {\n    return SDPUtils.parseSsrcMedia(line);\n  }).filter(function (parts) {\n    return parts.attribute === 'cname';\n  });\n  var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n  var secondarySsrc = void 0;\n\n  var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(function (line) {\n    var parts = line.substr(17).split(' ');\n    return parts.map(function (part) {\n      return parseInt(part, 10);\n    });\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(function (codec) {\n    if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n      var 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  var 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 - 50 * 40 * 8;\n    } else {\n      bandwidth = undefined;\n    }\n    encodingParameters.forEach(function (params) {\n      params.maxBitrate = bandwidth;\n    });\n  }\n  return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function (mediaSection) {\n  var rtcpParameters = {};\n\n  // Gets the first SSRC. Note that with RTX there might be multiple\n  // SSRCs.\n  var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) {\n    return SDPUtils.parseSsrcMedia(line);\n  }).filter(function (obj) {\n    return obj.attribute === 'cname';\n  })[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  var 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  var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n  rtcpParameters.mux = mux.length > 0;\n\n  return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function (rtcpParameters) {\n  var 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 + ' cname:' + rtcpParameters.cname + '\\r\\n';\n  }\n  return sdp;\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  var parts = void 0;\n  var 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  var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) {\n    return SDPUtils.parseSsrcMedia(line);\n  }).filter(function (msidParts) {\n    return msidParts.attribute === 'msid';\n  });\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  var mline = SDPUtils.parseMLine(mediaSection);\n  var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n  var maxMessageSize = void 0;\n  if (maxSizeLine.length > 0) {\n    maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n  }\n  if (isNaN(maxMessageSize)) {\n    maxMessageSize = 65536;\n  }\n  var 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: maxMessageSize\n    };\n  }\n  var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n  if (sctpMapLines.length > 0) {\n    var parts = sctpMapLines[0].substr(10).split(' ');\n    return {\n      port: parseInt(parts[0], 10),\n      protocol: parts[1],\n      maxMessageSize: 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  var output = [];\n  if (media.protocol !== 'DTLS/SCTP') {\n    output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n  } else {\n    output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\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  var sessionId = void 0;\n  var version = sessVer !== undefined ? sessVer : 2;\n  if (sessId) {\n    sessionId = sessId;\n  } else {\n    sessionId = SDPUtils.generateSessionId();\n  }\n  var user = sessUser || 'thisisadapterortc';\n  // FIXME: sess-id should be an NTP timestamp.\n  return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\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  var lines = SDPUtils.splitLines(mediaSection);\n  for (var 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      default:\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  var lines = SDPUtils.splitLines(mediaSection);\n  var 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  var lines = SDPUtils.splitLines(mediaSection);\n  var 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  var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n  var 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  var lines = SDPUtils.splitLines(blob);\n  for (var 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.\nif ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') {\n  module.exports = SDPUtils;\n}\n},{}]},{},[1])(1)\n});\n"],"names":["define","e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","module","adapter","adapterFactory","window","undefined","Object","defineProperty","value","_ref","arguments","options","shimChrome","shimFirefox","shimSafari","logging","utils","log","browserDetails","detectBrowser","commonShim","extractVersion","disableLog","disableWarnings","sdp","browser","chromeShim","shimPeerConnection","version","browserShim","shimAddIceCandidateNullOrEmpty","shimGetUserMedia","shimMediaStream","shimOnTrack","shimAddTrackRemoveTrack","shimGetSendersWithDtmf","shimGetStats","shimSenderReceiverGetStats","fixNegotiationNeeded","shimRTCIceCandidate","shimConnectionState","shimMaxMessageSize","shimSendThrowTypeError","removeExtmapAllowMixed","firefoxShim","shimRemoveStream","shimSenderGetStats","shimReceiverGetStats","shimRTCDataChannel","shimAddTransceiver","shimGetParameters","shimCreateOffer","shimCreateAnswer","safariShim","shimRTCIceServerUrls","shimCreateOfferLegacy","shimCallbacksAPI","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimTrackEventTransceiver","shimAudioContext","_interopRequireWildcard","obj","__esModule","newObj","key","prototype","hasOwnProperty","default","shimGetDisplayMedia","_typeof","Symbol","iterator","constructor","_getusermedia","enumerable","get","_getdisplaymedia","MediaStream","webkitMediaStream","RTCPeerConnection","this","_ontrack","set","removeEventListener","addEventListener","configurable","origSetRemoteDescription","setRemoteDescription","_this","_ontrackpoly","stream","te","receiver","getReceivers","find","track","id","event","Event","transceiver","streams","dispatchEvent","getTracks","forEach","apply","wrapPeerConnectionEvent","shimSenderWithDtmf","pc","dtmf","_dtmf","kind","createDTMFSender","_pc","getSenders","_senders","slice","origAddTrack","addTrack","sender","push","origRemoveTrack","removeTrack","idx","indexOf","splice","origAddStream","addStream","_this2","origRemoveStream","removeStream","_this3","RTCRtpSender","origGetSenders","_this4","senders","origGetStats","getStats","_this5","_arguments","Array","selector","onSucc","onErr","fixChromeStats_","response","standardReport","result","report","standardStats","timestamp","type","localcandidate","remotecandidate","names","name","stat","makeMapStats","stats","Map","keys","map","successCallbackWrapper_","Promise","resolve","reject","then","RTCRtpReceiver","_this6","filterStats","origGetReceivers","_this7","receivers","srcElement","MediaStreamTrack","err","DOMException","shimAddTrackRemoveTrackWithNative","origGetLocalStreams","getLocalStreams","_this11","nativeStreams","_reverseStreams","_this12","_streams","newStream","replaceInternalStreamId","description","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","replaceExternalStreamId","_this13","signalingState","alreadyExists","oldStream","method","nativeMethod","methodObj","_defineProperty","_this14","args","isLegacyCall","desc","origSetLocalDescription","setLocalDescription","origLocalDescription","getOwnPropertyDescriptor","_this15","streamid","webkitRTCPeerConnection","RTCIceCandidate","target","getConfiguration","sdpSemantics","writable","_this8","_shimmedLocalStreams","streamId","_this9","existingSenders","newSenders","filter","newSender","concat","_this10","getSourceId","navigator","mediaDevices","console","error","getDisplayMedia","constraints","sourceId","widthSpecified","video","width","heightSpecified","height","frameRateSpecified","frameRate","mandatory","chromeMediaSource","chromeMediaSourceId","maxFrameRate","maxWidth","maxHeight","getUserMedia","constraintsToChrome_","c","optional","cc","ideal","exact","min","max","oldname_","prefix","charAt","toUpperCase","oc","mix","advanced","shimConstraints_","func","JSON","parse","stringify","audio","remap","b","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","enumerateDevices","devices","dev","d","some","match","label","toLowerCase","includes","deviceId","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","message","constraint","constraintName","toString","onSuccess","onError","webkitGetUserMedia","bind","origGetUserMedia","cs","getAudioTracks","getVideoTracks","stop","NativeRTCIceCandidate","candidate","substr","nativeCandidate","parsedCandidate","_sdp2","parseCandidate","augmentedCandidate","assign","toJSON","sdpMid","sdpMLineIndex","usernameFragment","_sctp","sctpInDescription","sections","splitSections","shift","mediaSection","mLine","parseMLine","protocol","getRemoteFirefoxVersion","parseInt","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","maxMessageSize","matchPrefix","_getConfiguration","isFirefox","canSendMMS","remoteMMS","Number","POSITIVE_INFINITY","Math","sctp","wrapDcSend","dc","origDataChannelSend","send","data","size","byteLength","readyState","TypeError","origCreateDataChannel","createDataChannel","dataChannel","channel","proto","completed","checking","iceConnectionState","_onconnectionstatechange","cb","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","nativeSRD","split","line","trim","join","nativeAddIceCandidate","addIceCandidate","_sdp","RTCTrackEvent","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","deprecated","DataChannel","RTCDataChannel","origAddTransceiver","addTransceiver","setParametersPromises","initParameters","shouldPerformCheck","sendEncodings","encodingParam","test","rid","parseFloat","scaleResolutionDownBy","RangeError","maxFramerate","params","getParameters","encodings","setParameters","catch","origGetParameters","origCreateOffer","createOffer","_arguments2","all","finally","origCreateAnswer","createAnswer","_arguments3","preferredMediaSource","mediaSource","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","_localStreams","_addTrack","_len","_key","index","tracks","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","successCallback","failureCallback","promise","withCallback","_getUserMedia","shimConstraints","errcb","OrigPeerConnection","pcConfig","pcConstraints","iceServers","newIceServers","server","urls","url","generateCertificate","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","direction","setDirection","offerToReceiveVideo","videoTransceiver","AudioContext","webkitAudioContext","compactObject","eventNameToWrap","wrapper","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","has","unwrappedCb","delete","bool","logDisabled_","deprecationWarnings_","oldMethod","newMethod","warn","mozGetUserMedia","userAgent","isSecureContext","RTCIceGatherer","supportsUnifiedPlan","RTCRtpTransceiver","isObject","reduce","accumulator","isObj","isEmptyObject","walkStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","trackId","uastring","expr","pos","val","base","resultSet","endsWith","SDPUtils","random","localCName","generateIdentifier","splitLines","blob","part","getDescription","getMediaSections","parts","foundation","substring","component","priority","ip","address","port","relatedAddress","relatedPort","tcpType","ufrag","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","codec","pt","preferredPayloadType","parseExtmap","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mid","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","codecs","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","caps","maxptime","extension","parseRtpEncodingParameters","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","maxSizeLine","isNaN","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","output","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","getDirection","getKind","isRejected","parseOLine","username","sessionId","sessionVersion","netType","addressType","isValidSDP"],"mappings":"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"}