{"version":3,"file":"adapter.min.js","sources":["../src/adapter.js"],"sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.adapter = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({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      commonShim.shimParameterlessSetLocalDescription(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      commonShim.shimParameterlessSetLocalDescription(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      commonShim.shimParameterlessSetLocalDescription(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;\nexports.shimParameterlessSetLocalDescription = shimParameterlessSetLocalDescription;\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// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n  if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n    return;\n  }\n  var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n  if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n    var _this = this;\n\n    var desc = arguments[0] || {};\n    if ((typeof desc === 'undefined' ? 'undefined' : _typeof(desc)) !== 'object' || desc.type && desc.sdp) {\n      return nativeSetLocalDescription.apply(this, arguments);\n    }\n    // The remaining steps should technically happen when SLD comes off the\n    // RTCPeerConnection's operations chain (not ahead of going on it), but\n    // this is too difficult to shim. Instead, this shim only covers the\n    // common case where the operations chain is empty. This is imperfect, but\n    // should cover many cases. Rationale: Even if we can't reduce the glare\n    // window to zero on imperfect implementations, there's value in tapping\n    // into the perfect negotiation pattern that several browsers support.\n    desc = { type: desc.type, sdp: desc.sdp };\n    if (!desc.type) {\n      switch (this.signalingState) {\n        case 'stable':\n        case 'have-local-offer':\n        case 'have-remote-pranswer':\n          desc.type = 'offer';\n          break;\n        default:\n          desc.type = 'answer';\n          break;\n      }\n    }\n    if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n      return nativeSetLocalDescription.apply(this, [desc]);\n    }\n    var func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n    return func.apply(this).then(function (d) {\n      return nativeSetLocalDescription.apply(_this, [d]);\n    });\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', { direction: 'recvonly' });\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', { direction: 'recvonly' });\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\"\n// Input can be prefixed with a=.\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]] || 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.\n// This does not include the a= prefix!\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// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function (line) {\n  return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function (line) {\n  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// Generates 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 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 an 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 a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function (line) {\n  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 a fmtp 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] !== undefined) {\n        params.push(param + '=' + codec.parameters[param]);\n      } else {\n        params.push(param);\n      }\n    });\n    line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n  }\n  return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function (line) {\n  var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n  return {\n    type: parts.shift(),\n    parameter: parts.join(' ')\n  };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function (codec) {\n  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 a 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\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\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\n// Parses a fingerprint line for DTLS-SRTP.\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].toUpperCase() // the definition is upper-case in RFC 4572.\n  };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n//   get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n  var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n  // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n  return {\n    role: 'auto',\n    fingerprints: lines.map(SDPUtils.parseFingerprint)\n  };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function (params, setupType) {\n  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":["f","exports","module","define","amd","window","global","self","this","adapter","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","adapterFactory","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","shimParameterlessSetLocalDescription","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","_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","s","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_","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","nativeSetLocalDescription","createOffer","createAnswer","_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","_arguments2","all","finally","origCreateAnswer","_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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"}