{"version":3,"file":"js/7164-2492847d171778a824ab.js","mappings":"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","sources":["webpack://AYTM/./node_modules/webrtc-adapter/src/js/utils.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/edge/getusermedia.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/edge/getdisplaymedia.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/edge/edge_shim.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/edge/filtericeservers.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/safari/safari_shim.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/common_shim.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/adapter_core.js","webpack://AYTM/./node_modules/webrtc-adapter/src/js/adapter_factory.js","webpack://AYTM/./node_modules/react-qr-reader/lib/createBlob.js","webpack://AYTM/./node_modules/react-qr-reader/lib/errors.js","webpack://AYTM/./node_modules/react-qr-reader/lib/getDeviceId.js","webpack://AYTM/./node_modules/react-qr-reader/lib/havePropsChanged.js","webpack://AYTM/./node_modules/react-qr-reader/lib/index.js","webpack://AYTM/./node_modules/rtcpeerconnection-shim/rtcpeerconnection.js","webpack://AYTM/./node_modules/sdp/sdp.js"],"sourcesContent":["/*\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\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection &&\n !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,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (navigator.mediaDevices &&\n navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)) { // Edge.\n result.browser = 'edge';\n result.version = extractVersion(navigator.userAgent,\n /Edge\\/(\\d+).(\\d+)$/, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * 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';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * 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';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function 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']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\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\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n const shimError_ = function(e) {\n return {\n name: {PermissionDeniedError: 'NotAllowedError'}[e.name] || e.name,\n message: e.message,\n constraint: e.constraint,\n toString() {\n return this.name;\n }\n };\n };\n\n // getUserMedia error shim.\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n return origGetUserMedia(c).catch(e => Promise.reject(shimError_(e)));\n };\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window) {\n if (!('getDisplayMedia' in window.navigator)) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n window.navigator.getDisplayMedia.bind(window.navigator);\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nimport {filterIceServers} from './filtericeservers';\nimport shimRTCPeerConnection from 'rtcpeerconnection-shim';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimPeerConnection(window, browserDetails) {\n if (window.RTCIceGatherer) {\n if (!window.RTCIceCandidate) {\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n return args;\n };\n }\n if (!window.RTCSessionDescription) {\n window.RTCSessionDescription = function RTCSessionDescription(args) {\n return args;\n };\n }\n // this adds an additional event listener to MediaStrackTrack that signals\n // when a tracks enabled property was changed. Workaround for a bug in\n // addStream, see below. No longer required in 15025+\n if (browserDetails.version < 15025) {\n const origMSTEnabled = Object.getOwnPropertyDescriptor(\n window.MediaStreamTrack.prototype, 'enabled');\n Object.defineProperty(window.MediaStreamTrack.prototype, 'enabled', {\n set(value) {\n origMSTEnabled.set.call(this, value);\n const ev = new Event('enabled');\n ev.enabled = value;\n this.dispatchEvent(ev);\n }\n });\n }\n }\n\n // ORTC defines the DTMF sender a bit different.\n // https://github.com/w3c/ortc/issues/714\n if (window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = new window.RTCDtmfSender(this);\n } else if (this.track.kind === 'video') {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n // Edge currently only implements the RTCDtmfSender, not the\n // RTCDTMFSender alias. See http://draft.ortc.org/#rtcdtmfsender2*\n if (window.RTCDtmfSender && !window.RTCDTMFSender) {\n window.RTCDTMFSender = window.RTCDtmfSender;\n }\n\n const RTCPeerConnectionShim = shimRTCPeerConnection(window,\n browserDetails.version);\n window.RTCPeerConnection = function RTCPeerConnection(config) {\n if (config && config.iceServers) {\n config.iceServers = filterIceServers(config.iceServers,\n browserDetails.version);\n utils.log('ICE servers after filtering:', config.iceServers);\n }\n return new RTCPeerConnectionShim(config);\n };\n window.RTCPeerConnection.prototype = RTCPeerConnectionShim.prototype;\n}\n\nexport function shimReplaceTrack(window) {\n // ORTC has replaceTrack -- https://github.com/w3c/ortc/issues/614\n if (window.RTCRtpSender &&\n !('replaceTrack' in window.RTCRtpSender.prototype)) {\n window.RTCRtpSender.prototype.replaceTrack =\n window.RTCRtpSender.prototype.setTrack;\n }\n}\n","/*\n * Copyright (c) 2018 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\nimport * as utils from '../utils';\n// Edge does not like\n// 1) stun: filtered after 14393 unless ?transport=udp is present\n// 2) turn: that does not have all of turn:host:port?transport=udp\n// 3) turn: with ipv6 addresses\n// 4) turn: occurring muliple times\nexport function filterIceServers(iceServers, edgeVersion) {\n let hasTurn = false;\n iceServers = JSON.parse(JSON.stringify(iceServers));\n return iceServers.filter(server => {\n if (server && (server.urls || server.url)) {\n let urls = server.urls || server.url;\n if (server.url && !server.urls) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n }\n const isString = typeof urls === 'string';\n if (isString) {\n urls = [urls];\n }\n urls = urls.filter(url => {\n // filter STUN unconditionally.\n if (url.indexOf('stun:') === 0) {\n return false;\n }\n\n const validTurn = url.startsWith('turn') &&\n !url.startsWith('turn:[') &&\n url.includes('transport=udp');\n if (validTurn && !hasTurn) {\n hasTurn = true;\n return true;\n }\n return validTurn && !hasTurn;\n });\n\n delete server.url;\n server.urls = isString ? urls[0] : urls;\n return !!urls.length;\n }\n });\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * 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\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * 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\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function 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\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n const initParameters = arguments[1];\n const shouldPerformCheck = initParameters &&\n 'sendEncodings' in initParameters;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n initParameters.sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = initParameters.sendEncodings;\n sender.sendEncodings = initParameters.sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\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';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n 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() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio');\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video');\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n","/*\n * 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\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\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 */\nimport * as utils from './utils';\n\n // Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as edgeShim from './edge/edge_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimEdge: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'edge':\n if (!edgeShim || !edgeShim.shimPeerConnection || !options.shimEdge) {\n logging('MS edge shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming edge.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = edgeShim;\n\n edgeShim.shimGetUserMedia(window, browserDetails);\n edgeShim.shimGetDisplayMedia(window, browserDetails);\n edgeShim.shimPeerConnection(window, browserDetails);\n edgeShim.shimReplaceTrack(window, browserDetails);\n\n // the edge shim implements the full RTCIceCandidate object.\n\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","\"use strict\";\n\n/**\n * From https://gist.github.com/nolanlawson/10340255\n */\nmodule.exports = function createBlob(parts, properties) {\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== \"TypeError\") {\n throw e;\n }\n var BlobBuilder = window.BlobBuilder || window.MSBlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder;\n var builder = new BlobBuilder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n};","'use strict';\n\nfunction NoVideoInputDevicesError() {\n this.name = 'NoVideoInputDevicesError';\n this.message = 'No video input devices found';\n}\nNoVideoInputDevicesError.prototype = new Error();\n\nmodule.exports = {\n NoVideoInputDevicesError: NoVideoInputDevicesError\n};","'use strict';\n\nvar _require = require('./errors'),\n NoVideoInputDevicesError = _require.NoVideoInputDevicesError;\n\nfunction defaultDeviceIdChooser(filteredDevices, videoDevices, facingMode) {\n if (filteredDevices.length > 0) {\n return filteredDevices[0].deviceId;\n }\n if (videoDevices.length == 1 || facingMode == 'user') {\n return videoDevices[0].deviceId;\n }\n return videoDevices[1].deviceId;\n}\n\nvar getFacingModePattern = function getFacingModePattern(facingMode) {\n return facingMode == 'environment' ? /rear|back|environment/ig : /front|user|face/ig;\n};\n\nfunction getDeviceId(facingMode) {\n var chooseDeviceId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultDeviceIdChooser;\n\n // Get manual deviceId from available devices.\n return new Promise(function (resolve, reject) {\n var enumerateDevices = void 0;\n try {\n enumerateDevices = navigator.mediaDevices.enumerateDevices();\n } catch (err) {\n reject(new NoVideoInputDevicesError());\n }\n enumerateDevices.then(function (devices) {\n // Filter out non-videoinputs\n var videoDevices = devices.filter(function (device) {\n return device.kind == 'videoinput';\n });\n\n if (videoDevices.length < 1) {\n reject(new NoVideoInputDevicesError());\n return;\n }\n\n var pattern = getFacingModePattern(facingMode);\n\n // Filter out video devices without the pattern\n var filteredDevices = videoDevices.filter(function (_ref) {\n var label = _ref.label;\n return pattern.test(label);\n });\n\n resolve(chooseDeviceId(filteredDevices, videoDevices, facingMode));\n });\n });\n}\n\nmodule.exports = { getDeviceId: getDeviceId, getFacingModePattern: getFacingModePattern };","\"use strict\";\n\nmodule.exports = function havePropsChanged(prevProps, nextProps, keys) {\n var changedProps = [];\n keys.forEach(function (key) {\n if (prevProps[key] != nextProps[key]) {\n changedProps.push(key);\n }\n });\n return changedProps;\n};","'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _temp;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar React = require('react');\nvar Component = React.Component;\n\nvar PropTypes = require('prop-types');\n\nvar _require = require('./getDeviceId'),\n getDeviceId = _require.getDeviceId,\n getFacingModePattern = _require.getFacingModePattern;\n\nvar havePropsChanged = require('./havePropsChanged');\nvar createBlob = require('./createBlob');\n\n// Require adapter to support older browser implementations\nrequire('webrtc-adapter');\n\n// Inline worker.js as a string value of workerBlob.\n// eslint-disable-next-line\nvar workerBlob = createBlob([\"!function(o,e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?module.exports=e():\\\"function\\\"==typeof define&&define.amd?define([],e):\\\"object\\\"==typeof exports?exports.jsQR=e():o.jsQR=e()}(\\\"undefined\\\"!=typeof self?self:this,function(){return function(o){function e(t){if(r[t])return r[t].exports;var c=r[t]={i:t,l:!1,exports:{}};return o[t].call(c.exports,c,c.exports,e),c.l=!0,c.exports}var r={};return e.m=o,e.c=r,e.d=function(o,r,t){e.o(o,r)||Object.defineProperty(o,r,{configurable:!1,enumerable:!0,get:t})},e.n=function(o){var r=o&&o.__esModule?function(){return o.default}:function(){return o};return e.d(r,\\\"a\\\",r),r},e.o=function(o,e){return Object.prototype.hasOwnProperty.call(o,e)},e.p=\\\"\\\",e(e.s=3)}([function(o,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var t=function(){function o(o,e){this.width=e,this.height=o.length/e,this.data=o}return o.createEmpty=function(e,r){return new o(new Uint8ClampedArray(e*r),e)},o.prototype.get=function(o,e){return!(o<0||o>=this.width||e<0||e>=this.height)&&!!this.data[e*this.width+o]},o.prototype.set=function(o,e,r){this.data[e*this.width+o]=r?1:0},o.prototype.setRegion=function(o,e,r,t,c){for(var s=e;s=this.size&&(t=(t^this.primitive)&this.size-1);for(var s=0;s1&&0===e[0]){for(var t=1;tc.length&&(n=[c,r],r=n[0],c=n[1]);for(var s=new Uint8ClampedArray(c.length),a=c.length-r.length,d=0;dr?r:o}function c(o,e,r,c){if(o.length!==e*r*4)throw new Error(\\\"Malformed data passed to binarizer.\\\");for(var l=new n(e,r),i=0;i0&&v>0)){var x=(w.get(v,P-1)+2*w.get(v-1,P)+w.get(v-1,P-1))/4;p6&&(r.setRegion(e-11,0,3,6,!0),r.setRegion(0,e-11,6,3,!0)),r}function a(o,e,r){for(var t=w[r.dataMask],a=o.height,d=s(e),n=[],l=0,i=0,B=!0,k=a-1;k>0;k-=2){6===k&&k--;for(var u=0;u=0;a--)for(var d=e-9;d>=e-11;d--)s=c(o.get(d,a),s);for(var n=0,d=5;d>=0;d--)for(var a=e-9;a>=e-11;a--)n=c(o.get(d,a),n);for(var l,i=1/0,B=0,k=m.VERSIONS;B=0;s--)6!==s&&(e=c(o.get(8,s),e));for(var a=o.height,d=0,s=a-1;s>=a-7;s--)d=c(o.get(8,s),d);for(var r=a-8;r1)for(var B=t.ecBlocks[0].numBlocks,k=t.ecBlocks[1].numBlocks,d=0;d0;)for(var u=0,C=c;u=3;){var a=o.readBits(10);if(a>=1e3)throw new Error(\\\"Invalid numeric value above 999\\\");var d=Math.floor(a/100),n=Math.floor(a/10)%10,l=a%10;r.push(48+d,48+n,48+l),t+=d.toString()+n.toString()+l.toString(),s-=3}if(2===s){var a=o.readBits(7);if(a>=100)throw new Error(\\\"Invalid numeric value above 99\\\");var d=Math.floor(a/10),n=a%10;r.push(48+d,48+n),t+=d.toString()+n.toString()}else if(1===s){var a=o.readBits(4);if(a>=10)throw new Error(\\\"Invalid numeric value above 9\\\");r.push(48+a),t+=a.toString()}return{bytes:r,text:t}}function c(o,e){for(var r=[],t=\\\"\\\",c=[9,11,13][e],s=o.readBits(c);s>=2;){var a=o.readBits(11),d=Math.floor(a/45),n=a%45;r.push(k[d].charCodeAt(0),k[n].charCodeAt(0)),t+=k[d]+k[n],s-=2}if(1===s){var d=o.readBits(6);r.push(k[d].charCodeAt(0)),t+=k[d]}return{bytes:r,text:t}}function s(o,e){for(var r=[],t=\\\"\\\",c=[8,16,16][e],s=o.readBits(c),a=0;a>8,255&n),t+=String.fromCharCode(i.shiftJISTable[n])}return{bytes:r,text:t}}function d(o,e){for(var r=new l.BitStream(o),d=e<=9?0:e<=26?1:2,i={text:\\\"\\\",bytes:[],chunks:[]};r.available()>=4;){var k=r.readBits(4);if(k===B.Terminator)return i;if(k===B.ECI)0===r.readBits(1)?i.chunks.push({type:n.ECI,assignmentNumber:r.readBits(7)}):0===r.readBits(1)?i.chunks.push({type:n.ECI,assignmentNumber:r.readBits(14)}):0===r.readBits(1)?i.chunks.push({type:n.ECI,assignmentNumber:r.readBits(21)}):i.chunks.push({type:n.ECI,assignmentNumber:-1});else if(k===B.Numeric){var u=t(r,d);i.text+=u.text,(w=i.bytes).push.apply(w,u.bytes),i.chunks.push({type:n.Numeric,text:u.text})}else if(k===B.Alphanumeric){var C=c(r,d);i.text+=C.text,(P=i.bytes).push.apply(P,C.bytes),i.chunks.push({type:n.Alphanumeric,text:C.text})}else if(k===B.Byte){var m=s(r,d);i.text+=m.text,(v=i.bytes).push.apply(v,m.bytes),i.chunks.push({type:n.Byte,bytes:m.bytes,text:m.text})}else if(k===B.Kanji){var f=a(r,d);i.text+=f.text,(h=i.bytes).push.apply(h,f.bytes),i.chunks.push({type:n.Kanji,bytes:f.bytes,text:f.text})}}var w,P,v,h}Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n,l=r(7),i=r(8);!function(o){o.Numeric=\\\"numeric\\\",o.Alphanumeric=\\\"alphanumeric\\\",o.Byte=\\\"byte\\\",o.Kanji=\\\"kanji\\\",o.ECI=\\\"eci\\\"}(n=e.Mode||(e.Mode={}));var B;!function(o){o[o.Terminator=0]=\\\"Terminator\\\",o[o.Numeric=1]=\\\"Numeric\\\",o[o.Alphanumeric=2]=\\\"Alphanumeric\\\",o[o.Byte=4]=\\\"Byte\\\",o[o.Kanji=8]=\\\"Kanji\\\",o[o.ECI=7]=\\\"ECI\\\"}(B||(B={}));var k=[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"A\\\",\\\"B\\\",\\\"C\\\",\\\"D\\\",\\\"E\\\",\\\"F\\\",\\\"G\\\",\\\"H\\\",\\\"I\\\",\\\"J\\\",\\\"K\\\",\\\"L\\\",\\\"M\\\",\\\"N\\\",\\\"O\\\",\\\"P\\\",\\\"Q\\\",\\\"R\\\",\\\"S\\\",\\\"T\\\",\\\"U\\\",\\\"V\\\",\\\"W\\\",\\\"X\\\",\\\"Y\\\",\\\"Z\\\",\\\" \\\",\\\"$\\\",\\\"%\\\",\\\"*\\\",\\\"+\\\",\\\"-\\\",\\\".\\\",\\\"/\\\",\\\":\\\"];e.decode=d},function(o,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var t=function(){function o(o){this.byteOffset=0,this.bitOffset=0,this.bytes=o}return o.prototype.readBits=function(o){if(o<1||o>32||o>this.available())throw new Error(\\\"Cannot read \\\"+o.toString()+\\\" bits\\\");var e=0;if(this.bitOffset>0){var r=8-this.bitOffset,t=o>8-t<>c,o-=t,this.bitOffset+=t,8===this.bitOffset&&(this.bitOffset=0,this.byteOffset++)}if(o>0){for(;o>=8;)e=e<<8|255&this.bytes[this.byteOffset],this.byteOffset++,o-=8;if(o>0){var c=8-o,s=255>>c<>c,this.bitOffset+=o}}return e},o.prototype.available=function(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset},o}();e.BitStream=t},function(o,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0}),e.shiftJISTable={32:32,33:33,34:34,35:35,36:36,37:37,38:38,39:39,40:40,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,58:58,59:59,60:60,61:61,62:62,63:63,64:64,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:165,93:93,94:94,95:95,96:96,97:97,98:98,99:99,100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:8254,33088:12288,33089:12289,33090:12290,33091:65292,33092:65294,33093:12539,33094:65306,33095:65307,33096:65311,33097:65281,33098:12443,33099:12444,33100:180,33101:65344,33102:168,33103:65342,33104:65507,33105:65343,33106:12541,33107:12542,33108:12445,33109:12446,33110:12291,33111:20189,33112:12293,33113:12294,33114:12295,33115:12540,33116:8213,33117:8208,33118:65295,33119:92,33120:12316,33121:8214,33122:65372,33123:8230,33124:8229,33125:8216,33126:8217,33127:8220,33128:8221,33129:65288,33130:65289,33131:12308,33132:12309,33133:65339,33134:65341,33135:65371,33136:65373,33137:12296,33138:12297,33139:12298,33140:12299,33141:12300,33142:12301,33143:12302,33144:12303,33145:12304,33146:12305,33147:65291,33148:8722,33149:177,33150:215,33152:247,33153:65309,33154:8800,33155:65308,33156:65310,33157:8806,33158:8807,33159:8734,33160:8756,33161:9794,33162:9792,33163:176,33164:8242,33165:8243,33166:8451,33167:65509,33168:65284,33169:162,33170:163,33171:65285,33172:65283,33173:65286,33174:65290,33175:65312,33176:167,33177:9734,33178:9733,33179:9675,33180:9679,33181:9678,33182:9671,33183:9670,33184:9633,33185:9632,33186:9651,33187:9650,33188:9661,33189:9660,33190:8251,33191:12306,33192:8594,33193:8592,33194:8593,33195:8595,33196:12307,33208:8712,33209:8715,33210:8838,33211:8839,33212:8834,33213:8835,33214:8746,33215:8745,33224:8743,33225:8744,33226:172,33227:8658,33228:8660,33229:8704,33230:8707,33242:8736,33243:8869,33244:8978,33245:8706,33246:8711,33247:8801,33248:8786,33249:8810,33250:8811,33251:8730,33252:8765,33253:8733,33254:8757,33255:8747,33256:8748,33264:8491,33265:8240,33266:9839,33267:9837,33268:9834,33269:8224,33270:8225,33271:182,33276:9711,33359:65296,33360:65297,33361:65298,33362:65299,33363:65300,33364:65301,33365:65302,33366:65303,33367:65304,33368:65305,33376:65313,33377:65314,33378:65315,33379:65316,33380:65317,33381:65318,33382:65319,33383:65320,33384:65321,33385:65322,33386:65323,33387:65324,33388:65325,33389:65326,33390:65327,33391:65328,33392:65329,33393:65330,33394:65331,33395:65332,33396:65333,33397:65334,33398:65335,33399:65336,33400:65337,33401:65338,33409:65345,33410:65346,33411:65347,33412:65348,33413:65349,33414:65350,33415:65351,33416:65352,33417:65353,33418:65354,33419:65355,33420:65356,33421:65357,33422:65358,33423:65359,33424:65360,33425:65361,33426:65362,33427:65363,33428:65364,33429:65365,33430:65366,33431:65367,33432:65368,33433:65369,33434:65370,33439:12353,33440:12354,33441:12355,33442:12356,33443:12357,33444:12358,33445:12359,33446:12360,33447:12361,33448:12362,33449:12363,33450:12364,33451:12365,33452:12366,33453:12367,33454:12368,33455:12369,33456:12370,33457:12371,33458:12372,33459:12373,33460:12374,33461:12375,33462:12376,33463:12377,33464:12378,33465:12379,33466:12380,33467:12381,33468:12382,33469:12383,33470:12384,33471:12385,33472:12386,33473:12387,33474:12388,33475:12389,33476:12390,33477:12391,33478:12392,33479:12393,33480:12394,33481:12395,33482:12396,33483:12397,33484:12398,33485:12399,33486:12400,33487:12401,33488:12402,33489:12403,33490:12404,33491:12405,33492:12406,33493:12407,33494:12408,33495:12409,33496:12410,33497:12411,33498:12412,33499:12413,33500:12414,33501:12415,33502:12416,33503:12417,33504:12418,33505:12419,33506:12420,33507:12421,33508:12422,33509:12423,33510:12424,33511:12425,33512:12426,33513:12427,33514:12428,33515:12429,33516:12430,33517:12431,33518:12432,33519:12433,33520:12434,33521:12435,33600:12449,33601:12450,33602:12451,33603:12452,33604:12453,33605:12454,33606:12455,33607:12456,33608:12457,33609:12458,33610:12459,33611:12460,33612:12461,33613:12462,33614:12463,33615:12464,33616:12465,33617:12466,33618:12467,33619:12468,33620:12469,33621:12470,33622:12471,33623:12472,33624:12473,33625:12474,33626:12475,33627:12476,33628:12477,33629:12478,33630:12479,33631:12480,33632:12481,33633:12482,33634:12483,33635:12484,33636:12485,33637:12486,33638:12487,33639:12488,33640:12489,33641:12490,33642:12491,33643:12492,33644:12493,33645:12494,33646:12495,33647:12496,33648:12497,33649:12498,33650:12499,33651:12500,33652:12501,33653:12502,33654:12503,33655:12504,33656:12505,33657:12506,33658:12507,33659:12508,33660:12509,33661:12510,33662:12511,33664:12512,33665:12513,33666:12514,33667:12515,33668:12516,33669:12517,33670:12518,33671:12519,33672:12520,33673:12521,33674:12522,33675:12523,33676:12524,33677:12525,33678:12526,33679:12527,33680:12528,33681:12529,33682:12530,33683:12531,33684:12532,33685:12533,33686:12534,33695:913,33696:914,33697:915,33698:916,33699:917,33700:918,33701:919,33702:920,33703:921,33704:922,33705:923,33706:924,33707:925,33708:926,33709:927,33710:928,33711:929,33712:931,33713:932,33714:933,33715:934,33716:935,33717:936,33718:937,33727:945,33728:946,33729:947,33730:948,33731:949,33732:950,33733:951,33734:952,33735:953,33736:954,33737:955,33738:956,33739:957,33740:958,33741:959,33742:960,33743:961,33744:963,33745:964,33746:965,33747:966,33748:967,33749:968,33750:969,33856:1040,33857:1041,33858:1042,33859:1043,33860:1044,33861:1045,33862:1025,33863:1046,33864:1047,33865:1048,33866:1049,33867:1050,33868:1051,33869:1052,33870:1053,33871:1054,33872:1055,33873:1056,33874:1057,33875:1058,33876:1059,33877:1060,33878:1061,33879:1062,33880:1063,33881:1064,33882:1065,33883:1066,33884:1067,33885:1068,33886:1069,33887:1070,33888:1071,33904:1072,33905:1073,33906:1074,33907:1075,33908:1076,33909:1077,33910:1105,33911:1078,33912:1079,33913:1080,33914:1081,33915:1082,33916:1083,33917:1084,33918:1085,33920:1086,33921:1087,33922:1088,33923:1089,33924:1090,33925:1091,33926:1092,33927:1093,33928:1094,33929:1095,33930:1096,33931:1097,33932:1098,33933:1099,33934:1100,33935:1101,33936:1102,33937:1103,33951:9472,33952:9474,33953:9484,33954:9488,33955:9496,33956:9492,33957:9500,33958:9516,33959:9508,33960:9524,33961:9532,33962:9473,33963:9475,33964:9487,33965:9491,33966:9499,33967:9495,33968:9507,33969:9523,33970:9515,33971:9531,33972:9547,33973:9504,33974:9519,33975:9512,33976:9527,33977:9535,33978:9501,33979:9520,33980:9509,33981:9528,33982:9538,34975:20124,34976:21782,34977:23043,34978:38463,34979:21696,34980:24859,34981:25384,34982:23030,34983:36898,34984:33909,34985:33564,34986:31312,34987:24746,34988:25569,34989:28197,34990:26093,34991:33894,34992:33446,34993:39925,34994:26771,34995:22311,34996:26017,34997:25201,34998:23451,34999:22992,35e3:34427,35001:39156,35002:32098,35003:32190,35004:39822,35005:25110,35006:31903,35007:34999,35008:23433,35009:24245,35010:25353,35011:26263,35012:26696,35013:38343,35014:38797,35015:26447,35016:20197,35017:20234,35018:20301,35019:20381,35020:20553,35021:22258,35022:22839,35023:22996,35024:23041,35025:23561,35026:24799,35027:24847,35028:24944,35029:26131,35030:26885,35031:28858,35032:30031,35033:30064,35034:31227,35035:32173,35036:32239,35037:32963,35038:33806,35039:34915,35040:35586,35041:36949,35042:36986,35043:21307,35044:20117,35045:20133,35046:22495,35047:32946,35048:37057,35049:30959,35050:19968,35051:22769,35052:28322,35053:36920,35054:31282,35055:33576,35056:33419,35057:39983,35058:20801,35059:21360,35060:21693,35061:21729,35062:22240,35063:23035,35064:24341,35065:39154,35066:28139,35067:32996,35068:34093,35136:38498,35137:38512,35138:38560,35139:38907,35140:21515,35141:21491,35142:23431,35143:28879,35144:32701,35145:36802,35146:38632,35147:21359,35148:40284,35149:31418,35150:19985,35151:30867,35152:33276,35153:28198,35154:22040,35155:21764,35156:27421,35157:34074,35158:39995,35159:23013,35160:21417,35161:28006,35162:29916,35163:38287,35164:22082,35165:20113,35166:36939,35167:38642,35168:33615,35169:39180,35170:21473,35171:21942,35172:23344,35173:24433,35174:26144,35175:26355,35176:26628,35177:27704,35178:27891,35179:27945,35180:29787,35181:30408,35182:31310,35183:38964,35184:33521,35185:34907,35186:35424,35187:37613,35188:28082,35189:30123,35190:30410,35191:39365,35192:24742,35193:35585,35194:36234,35195:38322,35196:27022,35197:21421,35198:20870,35200:22290,35201:22576,35202:22852,35203:23476,35204:24310,35205:24616,35206:25513,35207:25588,35208:27839,35209:28436,35210:28814,35211:28948,35212:29017,35213:29141,35214:29503,35215:32257,35216:33398,35217:33489,35218:34199,35219:36960,35220:37467,35221:40219,35222:22633,35223:26044,35224:27738,35225:29989,35226:20985,35227:22830,35228:22885,35229:24448,35230:24540,35231:25276,35232:26106,35233:27178,35234:27431,35235:27572,35236:29579,35237:32705,35238:35158,35239:40236,35240:40206,35241:40644,35242:23713,35243:27798,35244:33659,35245:20740,35246:23627,35247:25014,35248:33222,35249:26742,35250:29281,35251:20057,35252:20474,35253:21368,35254:24681,35255:28201,35256:31311,35257:38899,35258:19979,35259:21270,35260:20206,35261:20309,35262:20285,35263:20385,35264:20339,35265:21152,35266:21487,35267:22025,35268:22799,35269:23233,35270:23478,35271:23521,35272:31185,35273:26247,35274:26524,35275:26550,35276:27468,35277:27827,35278:28779,35279:29634,35280:31117,35281:31166,35282:31292,35283:31623,35284:33457,35285:33499,35286:33540,35287:33655,35288:33775,35289:33747,35290:34662,35291:35506,35292:22057,35293:36008,35294:36838,35295:36942,35296:38686,35297:34442,35298:20420,35299:23784,35300:25105,35301:29273,35302:30011,35303:33253,35304:33469,35305:34558,35306:36032,35307:38597,35308:39187,35309:39381,35310:20171,35311:20250,35312:35299,35313:22238,35314:22602,35315:22730,35316:24315,35317:24555,35318:24618,35319:24724,35320:24674,35321:25040,35322:25106,35323:25296,35324:25913,35392:39745,35393:26214,35394:26800,35395:28023,35396:28784,35397:30028,35398:30342,35399:32117,35400:33445,35401:34809,35402:38283,35403:38542,35404:35997,35405:20977,35406:21182,35407:22806,35408:21683,35409:23475,35410:23830,35411:24936,35412:27010,35413:28079,35414:30861,35415:33995,35416:34903,35417:35442,35418:37799,35419:39608,35420:28012,35421:39336,35422:34521,35423:22435,35424:26623,35425:34510,35426:37390,35427:21123,35428:22151,35429:21508,35430:24275,35431:25313,35432:25785,35433:26684,35434:26680,35435:27579,35436:29554,35437:30906,35438:31339,35439:35226,35440:35282,35441:36203,35442:36611,35443:37101,35444:38307,35445:38548,35446:38761,35447:23398,35448:23731,35449:27005,35450:38989,35451:38990,35452:25499,35453:31520,35454:27179,35456:27263,35457:26806,35458:39949,35459:28511,35460:21106,35461:21917,35462:24688,35463:25324,35464:27963,35465:28167,35466:28369,35467:33883,35468:35088,35469:36676,35470:19988,35471:39993,35472:21494,35473:26907,35474:27194,35475:38788,35476:26666,35477:20828,35478:31427,35479:33970,35480:37340,35481:37772,35482:22107,35483:40232,35484:26658,35485:33541,35486:33841,35487:31909,35488:21e3,35489:33477,35490:29926,35491:20094,35492:20355,35493:20896,35494:23506,35495:21002,35496:21208,35497:21223,35498:24059,35499:21914,35500:22570,35501:23014,35502:23436,35503:23448,35504:23515,35505:24178,35506:24185,35507:24739,35508:24863,35509:24931,35510:25022,35511:25563,35512:25954,35513:26577,35514:26707,35515:26874,35516:27454,35517:27475,35518:27735,35519:28450,35520:28567,35521:28485,35522:29872,35523:29976,35524:30435,35525:30475,35526:31487,35527:31649,35528:31777,35529:32233,35530:32566,35531:32752,35532:32925,35533:33382,35534:33694,35535:35251,35536:35532,35537:36011,35538:36996,35539:37969,35540:38291,35541:38289,35542:38306,35543:38501,35544:38867,35545:39208,35546:33304,35547:20024,35548:21547,35549:23736,35550:24012,35551:29609,35552:30284,35553:30524,35554:23721,35555:32747,35556:36107,35557:38593,35558:38929,35559:38996,35560:39e3,35561:20225,35562:20238,35563:21361,35564:21916,35565:22120,35566:22522,35567:22855,35568:23305,35569:23492,35570:23696,35571:24076,35572:24190,35573:24524,35574:25582,35575:26426,35576:26071,35577:26082,35578:26399,35579:26827,35580:26820,35648:27231,35649:24112,35650:27589,35651:27671,35652:27773,35653:30079,35654:31048,35655:23395,35656:31232,35657:32e3,35658:24509,35659:35215,35660:35352,35661:36020,35662:36215,35663:36556,35664:36637,35665:39138,35666:39438,35667:39740,35668:20096,35669:20605,35670:20736,35671:22931,35672:23452,35673:25135,35674:25216,35675:25836,35676:27450,35677:29344,35678:30097,35679:31047,35680:32681,35681:34811,35682:35516,35683:35696,35684:25516,35685:33738,35686:38816,35687:21513,35688:21507,35689:21931,35690:26708,35691:27224,35692:35440,35693:30759,35694:26485,35695:40653,35696:21364,35697:23458,35698:33050,35699:34384,35700:36870,35701:19992,35702:20037,35703:20167,35704:20241,35705:21450,35706:21560,35707:23470,35708:24339,35709:24613,35710:25937,35712:26429,35713:27714,35714:27762,35715:27875,35716:28792,35717:29699,35718:31350,35719:31406,35720:31496,35721:32026,35722:31998,35723:32102,35724:26087,35725:29275,35726:21435,35727:23621,35728:24040,35729:25298,35730:25312,35731:25369,35732:28192,35733:34394,35734:35377,35735:36317,35736:37624,35737:28417,35738:31142,35739:39770,35740:20136,35741:20139,35742:20140,35743:20379,35744:20384,35745:20689,35746:20807,35747:31478,35748:20849,35749:20982,35750:21332,35751:21281,35752:21375,35753:21483,35754:21932,35755:22659,35756:23777,35757:24375,35758:24394,35759:24623,35760:24656,35761:24685,35762:25375,35763:25945,35764:27211,35765:27841,35766:29378,35767:29421,35768:30703,35769:33016,35770:33029,35771:33288,35772:34126,35773:37111,35774:37857,35775:38911,35776:39255,35777:39514,35778:20208,35779:20957,35780:23597,35781:26241,35782:26989,35783:23616,35784:26354,35785:26997,35786:29577,35787:26704,35788:31873,35789:20677,35790:21220,35791:22343,35792:24062,35793:37670,35794:26020,35795:27427,35796:27453,35797:29748,35798:31105,35799:31165,35800:31563,35801:32202,35802:33465,35803:33740,35804:34943,35805:35167,35806:35641,35807:36817,35808:37329,35809:21535,35810:37504,35811:20061,35812:20534,35813:21477,35814:21306,35815:29399,35816:29590,35817:30697,35818:33510,35819:36527,35820:39366,35821:39368,35822:39378,35823:20855,35824:24858,35825:34398,35826:21936,35827:31354,35828:20598,35829:23507,35830:36935,35831:38533,35832:20018,35833:27355,35834:37351,35835:23633,35836:23624,35904:25496,35905:31391,35906:27795,35907:38772,35908:36705,35909:31402,35910:29066,35911:38536,35912:31874,35913:26647,35914:32368,35915:26705,35916:37740,35917:21234,35918:21531,35919:34219,35920:35347,35921:32676,35922:36557,35923:37089,35924:21350,35925:34952,35926:31041,35927:20418,35928:20670,35929:21009,35930:20804,35931:21843,35932:22317,35933:29674,35934:22411,35935:22865,35936:24418,35937:24452,35938:24693,35939:24950,35940:24935,35941:25001,35942:25522,35943:25658,35944:25964,35945:26223,35946:26690,35947:28179,35948:30054,35949:31293,35950:31995,35951:32076,35952:32153,35953:32331,35954:32619,35955:33550,35956:33610,35957:34509,35958:35336,35959:35427,35960:35686,35961:36605,35962:38938,35963:40335,35964:33464,35965:36814,35966:39912,35968:21127,35969:25119,35970:25731,35971:28608,35972:38553,35973:26689,35974:20625,35975:27424,35976:27770,35977:28500,35978:31348,35979:32080,35980:34880,35981:35363,35982:26376,35983:20214,35984:20537,35985:20518,35986:20581,35987:20860,35988:21048,35989:21091,35990:21927,35991:22287,35992:22533,35993:23244,35994:24314,35995:25010,35996:25080,35997:25331,35998:25458,35999:26908,36e3:27177,36001:29309,36002:29356,36003:29486,36004:30740,36005:30831,36006:32121,36007:30476,36008:32937,36009:35211,36010:35609,36011:36066,\\n36012:36562,36013:36963,36014:37749,36015:38522,36016:38997,36017:39443,36018:40568,36019:20803,36020:21407,36021:21427,36022:24187,36023:24358,36024:28187,36025:28304,36026:29572,36027:29694,36028:32067,36029:33335,36030:35328,36031:35578,36032:38480,36033:20046,36034:20491,36035:21476,36036:21628,36037:22266,36038:22993,36039:23396,36040:24049,36041:24235,36042:24359,36043:25144,36044:25925,36045:26543,36046:28246,36047:29392,36048:31946,36049:34996,36050:32929,36051:32993,36052:33776,36053:34382,36054:35463,36055:36328,36056:37431,36057:38599,36058:39015,36059:40723,36060:20116,36061:20114,36062:20237,36063:21320,36064:21577,36065:21566,36066:23087,36067:24460,36068:24481,36069:24735,36070:26791,36071:27278,36072:29786,36073:30849,36074:35486,36075:35492,36076:35703,36077:37264,36078:20062,36079:39881,36080:20132,36081:20348,36082:20399,36083:20505,36084:20502,36085:20809,36086:20844,36087:21151,36088:21177,36089:21246,36090:21402,36091:21475,36092:21521,36160:21518,36161:21897,36162:22353,36163:22434,36164:22909,36165:23380,36166:23389,36167:23439,36168:24037,36169:24039,36170:24055,36171:24184,36172:24195,36173:24218,36174:24247,36175:24344,36176:24658,36177:24908,36178:25239,36179:25304,36180:25511,36181:25915,36182:26114,36183:26179,36184:26356,36185:26477,36186:26657,36187:26775,36188:27083,36189:27743,36190:27946,36191:28009,36192:28207,36193:28317,36194:30002,36195:30343,36196:30828,36197:31295,36198:31968,36199:32005,36200:32024,36201:32094,36202:32177,36203:32789,36204:32771,36205:32943,36206:32945,36207:33108,36208:33167,36209:33322,36210:33618,36211:34892,36212:34913,36213:35611,36214:36002,36215:36092,36216:37066,36217:37237,36218:37489,36219:30783,36220:37628,36221:38308,36222:38477,36224:38917,36225:39321,36226:39640,36227:40251,36228:21083,36229:21163,36230:21495,36231:21512,36232:22741,36233:25335,36234:28640,36235:35946,36236:36703,36237:40633,36238:20811,36239:21051,36240:21578,36241:22269,36242:31296,36243:37239,36244:40288,36245:40658,36246:29508,36247:28425,36248:33136,36249:29969,36250:24573,36251:24794,36252:39592,36253:29403,36254:36796,36255:27492,36256:38915,36257:20170,36258:22256,36259:22372,36260:22718,36261:23130,36262:24680,36263:25031,36264:26127,36265:26118,36266:26681,36267:26801,36268:28151,36269:30165,36270:32058,36271:33390,36272:39746,36273:20123,36274:20304,36275:21449,36276:21766,36277:23919,36278:24038,36279:24046,36280:26619,36281:27801,36282:29811,36283:30722,36284:35408,36285:37782,36286:35039,36287:22352,36288:24231,36289:25387,36290:20661,36291:20652,36292:20877,36293:26368,36294:21705,36295:22622,36296:22971,36297:23472,36298:24425,36299:25165,36300:25505,36301:26685,36302:27507,36303:28168,36304:28797,36305:37319,36306:29312,36307:30741,36308:30758,36309:31085,36310:25998,36311:32048,36312:33756,36313:35009,36314:36617,36315:38555,36316:21092,36317:22312,36318:26448,36319:32618,36320:36001,36321:20916,36322:22338,36323:38442,36324:22586,36325:27018,36326:32948,36327:21682,36328:23822,36329:22524,36330:30869,36331:40442,36332:20316,36333:21066,36334:21643,36335:25662,36336:26152,36337:26388,36338:26613,36339:31364,36340:31574,36341:32034,36342:37679,36343:26716,36344:39853,36345:31545,36346:21273,36347:20874,36348:21047,36416:23519,36417:25334,36418:25774,36419:25830,36420:26413,36421:27578,36422:34217,36423:38609,36424:30352,36425:39894,36426:25420,36427:37638,36428:39851,36429:30399,36430:26194,36431:19977,36432:20632,36433:21442,36434:23665,36435:24808,36436:25746,36437:25955,36438:26719,36439:29158,36440:29642,36441:29987,36442:31639,36443:32386,36444:34453,36445:35715,36446:36059,36447:37240,36448:39184,36449:26028,36450:26283,36451:27531,36452:20181,36453:20180,36454:20282,36455:20351,36456:21050,36457:21496,36458:21490,36459:21987,36460:22235,36461:22763,36462:22987,36463:22985,36464:23039,36465:23376,36466:23629,36467:24066,36468:24107,36469:24535,36470:24605,36471:25351,36472:25903,36473:23388,36474:26031,36475:26045,36476:26088,36477:26525,36478:27490,36480:27515,36481:27663,36482:29509,36483:31049,36484:31169,36485:31992,36486:32025,36487:32043,36488:32930,36489:33026,36490:33267,36491:35222,36492:35422,36493:35433,36494:35430,36495:35468,36496:35566,36497:36039,36498:36060,36499:38604,36500:39164,36501:27503,36502:20107,36503:20284,36504:20365,36505:20816,36506:23383,36507:23546,36508:24904,36509:25345,36510:26178,36511:27425,36512:28363,36513:27835,36514:29246,36515:29885,36516:30164,36517:30913,36518:31034,36519:32780,36520:32819,36521:33258,36522:33940,36523:36766,36524:27728,36525:40575,36526:24335,36527:35672,36528:40235,36529:31482,36530:36600,36531:23437,36532:38635,36533:19971,36534:21489,36535:22519,36536:22833,36537:23241,36538:23460,36539:24713,36540:28287,36541:28422,36542:30142,36543:36074,36544:23455,36545:34048,36546:31712,36547:20594,36548:26612,36549:33437,36550:23649,36551:34122,36552:32286,36553:33294,36554:20889,36555:23556,36556:25448,36557:36198,36558:26012,36559:29038,36560:31038,36561:32023,36562:32773,36563:35613,36564:36554,36565:36974,36566:34503,36567:37034,36568:20511,36569:21242,36570:23610,36571:26451,36572:28796,36573:29237,36574:37196,36575:37320,36576:37675,36577:33509,36578:23490,36579:24369,36580:24825,36581:20027,36582:21462,36583:23432,36584:25163,36585:26417,36586:27530,36587:29417,36588:29664,36589:31278,36590:33131,36591:36259,36592:37202,36593:39318,36594:20754,36595:21463,36596:21610,36597:23551,36598:25480,36599:27193,36600:32172,36601:38656,36602:22234,36603:21454,36604:21608,36672:23447,36673:23601,36674:24030,36675:20462,36676:24833,36677:25342,36678:27954,36679:31168,36680:31179,36681:32066,36682:32333,36683:32722,36684:33261,36685:33311,36686:33936,36687:34886,36688:35186,36689:35728,36690:36468,36691:36655,36692:36913,36693:37195,36694:37228,36695:38598,36696:37276,36697:20160,36698:20303,36699:20805,36700:21313,36701:24467,36702:25102,36703:26580,36704:27713,36705:28171,36706:29539,36707:32294,36708:37325,36709:37507,36710:21460,36711:22809,36712:23487,36713:28113,36714:31069,36715:32302,36716:31899,36717:22654,36718:29087,36719:20986,36720:34899,36721:36848,36722:20426,36723:23803,36724:26149,36725:30636,36726:31459,36727:33308,36728:39423,36729:20934,36730:24490,36731:26092,36732:26991,36733:27529,36734:28147,36736:28310,36737:28516,36738:30462,36739:32020,36740:24033,36741:36981,36742:37255,36743:38918,36744:20966,36745:21021,36746:25152,36747:26257,36748:26329,36749:28186,36750:24246,36751:32210,36752:32626,36753:26360,36754:34223,36755:34295,36756:35576,36757:21161,36758:21465,36759:22899,36760:24207,36761:24464,36762:24661,36763:37604,36764:38500,36765:20663,36766:20767,36767:21213,36768:21280,36769:21319,36770:21484,36771:21736,36772:21830,36773:21809,36774:22039,36775:22888,36776:22974,36777:23100,36778:23477,36779:23558,36780:23567,36781:23569,36782:23578,36783:24196,36784:24202,36785:24288,36786:24432,36787:25215,36788:25220,36789:25307,36790:25484,36791:25463,36792:26119,36793:26124,36794:26157,36795:26230,36796:26494,36797:26786,36798:27167,36799:27189,36800:27836,36801:28040,36802:28169,36803:28248,36804:28988,36805:28966,36806:29031,36807:30151,36808:30465,36809:30813,36810:30977,36811:31077,36812:31216,36813:31456,36814:31505,36815:31911,36816:32057,36817:32918,36818:33750,36819:33931,36820:34121,36821:34909,36822:35059,36823:35359,36824:35388,36825:35412,36826:35443,36827:35937,36828:36062,36829:37284,36830:37478,36831:37758,36832:37912,36833:38556,36834:38808,36835:19978,36836:19976,36837:19998,36838:20055,36839:20887,36840:21104,36841:22478,36842:22580,36843:22732,36844:23330,36845:24120,36846:24773,36847:25854,36848:26465,36849:26454,36850:27972,36851:29366,36852:30067,36853:31331,36854:33976,36855:35698,36856:37304,36857:37664,36858:22065,36859:22516,36860:39166,36928:25325,36929:26893,36930:27542,36931:29165,36932:32340,36933:32887,36934:33394,36935:35302,36936:39135,36937:34645,36938:36785,36939:23611,36940:20280,36941:20449,36942:20405,36943:21767,36944:23072,36945:23517,36946:23529,36947:24515,36948:24910,36949:25391,36950:26032,36951:26187,36952:26862,36953:27035,36954:28024,36955:28145,36956:30003,36957:30137,36958:30495,36959:31070,36960:31206,36961:32051,36962:33251,36963:33455,36964:34218,36965:35242,36966:35386,36967:36523,36968:36763,36969:36914,36970:37341,36971:38663,36972:20154,36973:20161,36974:20995,36975:22645,36976:22764,36977:23563,36978:29978,36979:23613,36980:33102,36981:35338,36982:36805,36983:38499,36984:38765,36985:31525,36986:35535,36987:38920,36988:37218,36989:22259,36990:21416,36992:36887,36993:21561,36994:22402,36995:24101,36996:25512,36997:27700,36998:28810,36999:30561,37e3:31883,37001:32736,37002:34928,37003:36930,37004:37204,37005:37648,37006:37656,37007:38543,37008:29790,37009:39620,37010:23815,37011:23913,37012:25968,37013:26530,37014:36264,37015:38619,37016:25454,37017:26441,37018:26905,37019:33733,37020:38935,37021:38592,37022:35070,37023:28548,37024:25722,37025:23544,37026:19990,37027:28716,37028:30045,37029:26159,37030:20932,37031:21046,37032:21218,37033:22995,37034:24449,37035:24615,37036:25104,37037:25919,37038:25972,37039:26143,37040:26228,37041:26866,37042:26646,37043:27491,37044:28165,37045:29298,37046:29983,37047:30427,37048:31934,37049:32854,37050:22768,37051:35069,37052:35199,37053:35488,37054:35475,37055:35531,37056:36893,37057:37266,37058:38738,37059:38745,37060:25993,37061:31246,37062:33030,37063:38587,37064:24109,37065:24796,37066:25114,37067:26021,37068:26132,37069:26512,37070:30707,37071:31309,37072:31821,37073:32318,37074:33034,37075:36012,37076:36196,37077:36321,37078:36447,37079:30889,37080:20999,37081:25305,37082:25509,37083:25666,37084:25240,37085:35373,37086:31363,37087:31680,37088:35500,37089:38634,37090:32118,37091:33292,37092:34633,37093:20185,37094:20808,37095:21315,37096:21344,37097:23459,37098:23554,37099:23574,37100:24029,37101:25126,37102:25159,37103:25776,37104:26643,37105:26676,37106:27849,37107:27973,37108:27927,37109:26579,37110:28508,37111:29006,37112:29053,37113:26059,37114:31359,37115:31661,37116:32218,37184:32330,37185:32680,37186:33146,37187:33307,37188:33337,37189:34214,37190:35438,37191:36046,37192:36341,37193:36984,37194:36983,37195:37549,37196:37521,37197:38275,37198:39854,37199:21069,37200:21892,37201:28472,37202:28982,37203:20840,37204:31109,37205:32341,37206:33203,37207:31950,37208:22092,37209:22609,37210:23720,37211:25514,37212:26366,37213:26365,37214:26970,37215:29401,37216:30095,37217:30094,37218:30990,37219:31062,37220:31199,37221:31895,37222:32032,37223:32068,37224:34311,37225:35380,37226:38459,37227:36961,37228:40736,37229:20711,37230:21109,37231:21452,37232:21474,37233:20489,37234:21930,37235:22766,37236:22863,37237:29245,37238:23435,37239:23652,37240:21277,37241:24803,37242:24819,37243:25436,37244:25475,37245:25407,37246:25531,37248:25805,37249:26089,37250:26361,37251:24035,37252:27085,37253:27133,37254:28437,37255:29157,37256:20105,37257:30185,37258:30456,37259:31379,37260:31967,37261:32207,37262:32156,37263:32865,37264:33609,37265:33624,37266:33900,37267:33980,37268:34299,37269:35013,37270:36208,37271:36865,37272:36973,37273:37783,37274:38684,37275:39442,37276:20687,37277:22679,37278:24974,37279:33235,37280:34101,37281:36104,37282:36896,37283:20419,37284:20596,37285:21063,37286:21363,37287:24687,37288:25417,37289:26463,37290:28204,37291:36275,37292:36895,37293:20439,37294:23646,37295:36042,37296:26063,37297:32154,37298:21330,37299:34966,37300:20854,37301:25539,37302:23384,37303:23403,37304:23562,37305:25613,37306:26449,37307:36956,37308:20182,37309:22810,37310:22826,37311:27760,37312:35409,37313:21822,37314:22549,37315:22949,37316:24816,37317:25171,37318:26561,37319:33333,37320:26965,37321:38464,37322:39364,37323:39464,37324:20307,37325:22534,37326:23550,37327:32784,37328:23729,37329:24111,37330:24453,37331:24608,37332:24907,37333:25140,37334:26367,37335:27888,37336:28382,37337:32974,37338:33151,37339:33492,37340:34955,37341:36024,37342:36864,37343:36910,37344:38538,37345:40667,37346:39899,37347:20195,37348:21488,37349:22823,37350:31532,37351:37261,37352:38988,37353:40441,37354:28381,37355:28711,37356:21331,37357:21828,37358:23429,37359:25176,37360:25246,37361:25299,37362:27810,37363:28655,37364:29730,37365:35351,37366:37944,37367:28609,37368:35582,37369:33592,37370:20967,37371:34552,37372:21482,37440:21481,37441:20294,37442:36948,37443:36784,37444:22890,37445:33073,37446:24061,37447:31466,37448:36799,37449:26842,37450:35895,37451:29432,37452:40008,37453:27197,37454:35504,37455:20025,37456:21336,37457:22022,37458:22374,37459:25285,37460:25506,37461:26086,37462:27470,37463:28129,37464:28251,37465:28845,37466:30701,37467:31471,37468:31658,37469:32187,37470:32829,37471:32966,37472:34507,37473:35477,37474:37723,37475:22243,37476:22727,37477:24382,37478:26029,37479:26262,37480:27264,37481:27573,37482:30007,37483:35527,37484:20516,37485:30693,37486:22320,37487:24347,37488:24677,37489:26234,37490:27744,37491:30196,37492:31258,37493:32622,37494:33268,37495:34584,37496:36933,37497:39347,37498:31689,37499:30044,37500:31481,37501:31569,37502:33988,37504:36880,37505:31209,37506:31378,37507:33590,37508:23265,37509:30528,37510:20013,37511:20210,37512:23449,37513:24544,37514:25277,37515:26172,37516:26609,37517:27880,37518:34411,37519:34935,37520:35387,37521:37198,37522:37619,37523:39376,37524:27159,37525:28710,37526:29482,37527:33511,37528:33879,37529:36015,37530:19969,37531:20806,37532:20939,37533:21899,37534:23541,37535:24086,37536:24115,37537:24193,37538:24340,37539:24373,37540:24427,37541:24500,37542:25074,37543:25361,37544:26274,37545:26397,37546:28526,37547:29266,37548:30010,37549:30522,37550:32884,37551:33081,37552:33144,37553:34678,37554:35519,37555:35548,37556:36229,37557:36339,37558:37530,37559:38263,37560:38914,37561:40165,37562:21189,37563:25431,37564:30452,37565:26389,37566:27784,37567:29645,37568:36035,37569:37806,37570:38515,37571:27941,37572:22684,37573:26894,37574:27084,37575:36861,37576:37786,37577:30171,37578:36890,37579:22618,37580:26626,37581:25524,37582:27131,37583:20291,37584:28460,37585:26584,37586:36795,37587:34086,37588:32180,37589:37716,37590:26943,37591:28528,37592:22378,37593:22775,37594:23340,37595:32044,37596:29226,37597:21514,37598:37347,37599:40372,37600:20141,37601:20302,37602:20572,37603:20597,37604:21059,37605:35998,37606:21576,37607:22564,37608:23450,37609:24093,37610:24213,37611:24237,37612:24311,37613:24351,37614:24716,37615:25269,37616:25402,37617:25552,37618:26799,37619:27712,37620:30855,37621:31118,37622:31243,37623:32224,37624:33351,37625:35330,37626:35558,37627:36420,37628:36883,37696:37048,37697:37165,37698:37336,37699:40718,37700:27877,37701:25688,37702:25826,37703:25973,37704:28404,37705:30340,37706:31515,37707:36969,37708:37841,37709:28346,37710:21746,37711:24505,37712:25764,37713:36685,37714:36845,37715:37444,37716:20856,37717:22635,37718:22825,37719:23637,37720:24215,37721:28155,37722:32399,37723:29980,37724:36028,37725:36578,37726:39003,37727:28857,37728:20253,37729:27583,37730:28593,37731:3e4,37732:38651,37733:20814,37734:21520,37735:22581,37736:22615,37737:22956,37738:23648,37739:24466,37740:26007,37741:26460,37742:28193,37743:30331,37744:33759,37745:36077,37746:36884,37747:37117,37748:37709,37749:30757,37750:30778,37751:21162,37752:24230,37753:22303,37754:22900,37755:24594,37756:20498,37757:20826,37758:20908,37760:20941,37761:20992,37762:21776,37763:22612,37764:22616,37765:22871,37766:23445,37767:23798,37768:23947,37769:24764,37770:25237,37771:25645,37772:26481,37773:26691,37774:26812,37775:26847,37776:30423,37777:28120,37778:28271,37779:28059,37780:28783,37781:29128,37782:24403,37783:30168,37784:31095,37785:31561,37786:31572,37787:31570,37788:31958,37789:32113,37790:21040,37791:33891,37792:34153,37793:34276,37794:35342,37795:35588,37796:35910,37797:36367,37798:36867,37799:36879,37800:37913,37801:38518,37802:38957,37803:39472,37804:38360,37805:20685,37806:21205,37807:21516,37808:22530,37809:23566,37810:24999,37811:25758,37812:27934,37813:30643,37814:31461,37815:33012,37816:33796,37817:36947,37818:37509,37819:23776,37820:40199,37821:21311,37822:24471,37823:24499,37824:28060,37825:29305,37826:30563,37827:31167,37828:31716,37829:27602,37830:29420,37831:35501,37832:26627,37833:27233,37834:20984,37835:31361,37836:26932,37837:23626,37838:40182,37839:33515,37840:23493,37841:37193,37842:28702,37843:22136,37844:23663,37845:24775,37846:25958,37847:27788,37848:35930,37849:36929,37850:38931,37851:21585,37852:26311,37853:37389,37854:22856,37855:37027,37856:20869,37857:20045,37858:20970,37859:34201,37860:35598,37861:28760,37862:25466,37863:37707,37864:26978,37865:39348,37866:32260,37867:30071,37868:21335,37869:26976,37870:36575,37871:38627,37872:27741,37873:20108,37874:23612,37875:24336,37876:36841,37877:21250,37878:36049,37879:32905,37880:34425,37881:24319,37882:26085,37883:20083,37884:20837,37952:22914,37953:23615,37954:38894,37955:20219,37956:22922,37957:24525,37958:35469,37959:28641,37960:31152,37961:31074,37962:23527,37963:33905,37964:29483,37965:29105,37966:24180,37967:24565,37968:25467,37969:25754,37970:29123,37971:31896,37972:20035,37973:24316,37974:20043,37975:22492,37976:22178,37977:24745,37978:28611,37979:32013,37980:33021,37981:33075,37982:33215,37983:36786,37984:35223,37985:34468,37986:24052,37987:25226,37988:25773,37989:35207,37990:26487,37991:27874,37992:27966,37993:29750,37994:30772,37995:23110,37996:32629,37997:33453,37998:39340,37999:20467,38e3:24259,38001:25309,38002:25490,38003:25943,38004:26479,38005:30403,38006:29260,38007:32972,38008:32954,38009:36649,38010:37197,38011:20493,38012:22521,38013:23186,38014:26757,38016:26995,38017:29028,38018:29437,38019:36023,38020:22770,38021:36064,38022:38506,38023:36889,38024:34687,38025:31204,38026:30695,38027:33833,38028:20271,38029:21093,38030:21338,38031:25293,38032:26575,38033:27850,38034:30333,38035:31636,38036:31893,38037:33334,38038:34180,38039:36843,38040:26333,38041:28448,38042:29190,38043:32283,38044:33707,38045:39361,38046:40614,38047:20989,38048:31665,38049:30834,38050:31672,38051:32903,38052:31560,38053:27368,38054:24161,38055:32908,38056:30033,38057:30048,38058:20843,38059:37474,38060:28300,38061:30330,38062:37271,38063:39658,38064:20240,38065:32624,38066:25244,38067:31567,38068:38309,38069:40169,38070:22138,38071:22617,38072:34532,38073:38588,38074:20276,38075:21028,38076:21322,38077:21453,38078:21467,38079:24070,38080:25644,38081:26001,38082:26495,38083:27710,38084:27726,38085:29256,38086:29359,38087:29677,38088:30036,38089:32321,38090:33324,38091:34281,38092:36009,38093:31684,38094:37318,38095:29033,38096:38930,38097:39151,38098:25405,38099:26217,38100:30058,38101:30436,38102:30928,38103:34115,38104:34542,38105:21290,38106:21329,38107:21542,38108:22915,38109:24199,38110:24444,38111:24754,38112:25161,38113:25209,38114:25259,38115:26e3,38116:27604,38117:27852,38118:30130,38119:30382,38120:30865,38121:31192,38122:32203,38123:32631,38124:32933,38125:34987,38126:35513,38127:36027,38128:36991,38129:38750,38130:39131,38131:27147,38132:31800,38133:20633,38134:23614,38135:24494,38136:26503,38137:27608,38138:29749,38139:30473,38140:32654,38208:40763,38209:26570,38210:31255,38211:21305,38212:30091,38213:39661,38214:24422,38215:33181,38216:33777,38217:32920,38218:24380,38219:24517,38220:30050,38221:31558,38222:36924,38223:26727,38224:23019,38225:23195,38226:32016,38227:30334,38228:35628,38229:20469,38230:24426,38231:27161,38232:27703,38233:28418,38234:29922,38235:31080,38236:34920,38237:35413,38238:35961,38239:24287,38240:25551,38241:30149,38242:31186,38243:33495,38244:37672,38245:37618,38246:33948,38247:34541,38248:39981,38249:21697,38250:24428,38251:25996,38252:27996,38253:28693,38254:36007,38255:36051,38256:38971,38257:25935,38258:29942,38259:19981,38260:20184,38261:22496,38262:22827,38263:23142,38264:23500,38265:20904,38266:24067,38267:24220,38268:24598,38269:25206,38270:25975,38272:26023,38273:26222,38274:28014,38275:29238,38276:31526,38277:33104,38278:33178,38279:33433,38280:35676,38281:36e3,38282:36070,38283:36212,38284:38428,38285:38468,38286:20398,38287:25771,38288:27494,38289:33310,38290:33889,38291:34154,38292:37096,38293:23553,38294:26963,38295:39080,38296:33914,38297:34135,38298:20239,38299:21103,38300:24489,38301:24133,38302:26381,38303:31119,38304:33145,38305:35079,38306:35206,38307:28149,38308:24343,38309:25173,38310:27832,38311:20175,38312:29289,38313:39826,38314:20998,38315:21563,38316:22132,38317:22707,38318:24996,38319:25198,38320:28954,38321:22894,38322:31881,38323:31966,38324:32027,38325:38640,38326:25991,38327:32862,38328:19993,38329:20341,38330:20853,38331:22592,38332:24163,38333:24179,38334:24330,38335:26564,38336:20006,38337:34109,38338:38281,38339:38491,38340:31859,38341:38913,38342:20731,38343:22721,38344:30294,38345:30887,38346:21029,38347:30629,38348:34065,38349:31622,38350:20559,38351:22793,38352:29255,38353:31687,38354:32232,38355:36794,38356:36820,38357:36941,38358:20415,38359:21193,38360:23081,38361:24321,38362:38829,38363:20445,38364:33303,38365:37610,38366:22275,38367:25429,38368:27497,38369:29995,38370:35036,38371:36628,38372:31298,38373:21215,38374:22675,38375:24917,38376:25098,38377:26286,38378:27597,38379:31807,38380:33769,38381:20515,38382:20472,38383:21253,38384:21574,38385:22577,38386:22857,38387:23453,38388:23792,38389:23791,38390:23849,38391:24214,38392:25265,38393:25447,38394:25918,38395:26041,38396:26379,38464:27861,38465:27873,38466:28921,38467:30770,38468:32299,38469:32990,38470:33459,38471:33804,38472:34028,38473:34562,38474:35090,38475:35370,38476:35914,38477:37030,38478:37586,38479:39165,38480:40179,38481:40300,38482:20047,38483:20129,38484:20621,38485:21078,38486:22346,38487:22952,38488:24125,38489:24536,38490:24537,38491:25151,38492:26292,38493:26395,38494:26576,38495:26834,38496:20882,38497:32033,38498:32938,38499:33192,38500:35584,38501:35980,38502:36031,38503:37502,38504:38450,38505:21536,38506:38956,38507:21271,38508:20693,38509:21340,38510:22696,38511:25778,38512:26420,38513:29287,38514:30566,38515:31302,38516:37350,38517:21187,38518:27809,38519:27526,38520:22528,38521:24140,38522:22868,38523:26412,38524:32763,38525:20961,38526:30406,38528:25705,38529:30952,38530:39764,38531:40635,38532:22475,38533:22969,38534:26151,38535:26522,38536:27598,38537:21737,38538:27097,38539:24149,38540:33180,38541:26517,38542:39850,38543:26622,38544:40018,38545:26717,38546:20134,38547:20451,38548:21448,38549:25273,38550:26411,38551:27819,38552:36804,38553:20397,38554:32365,38555:40639,38556:19975,38557:24930,38558:28288,38559:28459,38560:34067,38561:21619,38562:26410,38563:39749,38564:24051,38565:31637,38566:23724,38567:23494,38568:34588,38569:28234,38570:34001,38571:31252,38572:33032,38573:22937,38574:31885,38575:27665,38576:30496,38577:21209,38578:22818,38579:28961,38580:29279,38581:30683,38582:38695,38583:40289,38584:26891,38585:23167,38586:23064,38587:20901,38588:21517,38589:21629,38590:26126,38591:30431,38592:36855,38593:37528,38594:40180,38595:23018,38596:29277,38597:28357,38598:20813,38599:26825,38600:32191,38601:32236,38602:38754,38603:40634,38604:25720,38605:27169,38606:33538,38607:22916,38608:23391,38609:27611,38610:29467,38611:30450,38612:32178,38613:32791,38614:33945,38615:20786,38616:26408,38617:40665,38618:30446,38619:26466,38620:21247,38621:39173,38622:23588,38623:25147,38624:31870,38625:36016,38626:21839,38627:24758,38628:32011,38629:38272,38630:21249,38631:20063,38632:20918,38633:22812,38634:29242,38635:32822,38636:37326,38637:24357,38638:30690,38639:21380,38640:24441,38641:32004,38642:34220,38643:35379,38644:36493,38645:38742,38646:26611,38647:34222,38648:37971,38649:24841,38650:24840,38651:27833,38652:30290,38720:35565,38721:36664,38722:21807,38723:20305,38724:20778,38725:21191,38726:21451,38727:23461,38728:24189,38729:24736,38730:24962,38731:25558,38732:26377,38733:26586,38734:28263,38735:28044,38736:29494,38737:29495,38738:30001,38739:31056,38740:35029,38741:35480,38742:36938,38743:37009,38744:37109,38745:38596,38746:34701,38747:22805,38748:20104,38749:20313,38750:19982,38751:35465,38752:36671,38753:38928,38754:20653,38755:24188,38756:22934,38757:23481,38758:24248,38759:25562,38760:25594,38761:25793,38762:26332,38763:26954,38764:27096,38765:27915,38766:28342,38767:29076,38768:29992,38769:31407,38770:32650,38771:32768,38772:33865,38773:33993,38774:35201,38775:35617,38776:36362,38777:36965,38778:38525,38779:39178,38780:24958,38781:25233,38782:27442,38784:27779,38785:28020,38786:32716,38787:32764,38788:28096,38789:32645,38790:34746,38791:35064,38792:26469,38793:33713,38794:38972,38795:38647,38796:27931,38797:32097,38798:33853,38799:37226,38800:20081,38801:21365,38802:23888,38803:27396,38804:28651,38805:34253,38806:34349,38807:35239,38808:21033,38809:21519,38810:23653,38811:26446,38812:26792,38813:29702,38814:29827,38815:30178,38816:35023,38817:35041,38818:37324,38819:38626,38820:38520,38821:24459,38822:29575,38823:31435,38824:33870,38825:25504,38826:30053,38827:21129,38828:27969,38829:28316,38830:29705,38831:30041,38832:30827,38833:31890,38834:38534,38835:31452,38836:40845,38837:20406,38838:24942,38839:26053,38840:34396,38841:20102,38842:20142,38843:20698,38844:20001,38845:20940,38846:23534,38847:26009,38848:26753,38849:28092,38850:29471,38851:30274,38852:30637,38853:31260,38854:31975,38855:33391,38856:35538,38857:36988,38858:37327,38859:38517,38860:38936,38861:21147,38862:32209,38863:20523,38864:21400,38865:26519,38866:28107,38867:29136,38868:29747,38869:33256,38870:36650,38871:38563,38872:40023,38873:40607,38874:29792,38875:22593,38876:28057,38877:32047,38878:39006,38879:20196,38880:20278,38881:20363,38882:20919,38883:21169,38884:23994,38885:24604,38886:29618,38887:31036,38888:33491,38889:37428,38890:38583,38891:38646,38892:38666,38893:40599,38894:40802,38895:26278,38896:27508,38897:21015,38898:21155,38899:28872,38900:35010,38901:24265,38902:24651,38903:24976,38904:28451,38905:29001,38906:31806,38907:32244,38908:32879,38976:34030,38977:36899,38978:37676,38979:21570,38980:39791,38981:27347,38982:28809,38983:36034,38984:36335,38985:38706,38986:21172,38987:23105,38988:24266,38989:24324,38990:26391,38991:27004,38992:27028,38993:28010,38994:28431,38995:29282,38996:29436,38997:31725,38998:32769,38999:32894,39e3:34635,39001:37070,39002:20845,39003:40595,39004:31108,39005:32907,39006:37682,39007:35542,39008:20525,39009:21644,39010:35441,39011:27498,39012:36036,39013:33031,39014:24785,39015:26528,39016:40434,39017:20121,39018:20120,39019:39952,39020:35435,39021:34241,39022:34152,39023:26880,39024:28286,39025:30871,39026:33109,39071:24332,39072:19984,39073:19989,39074:20010,39075:20017,39076:20022,39077:20028,39078:20031,39079:20034,39080:20054,39081:20056,39082:20098,39083:20101,39084:35947,39085:20106,39086:33298,39087:24333,39088:20110,39089:20126,39090:20127,39091:20128,39092:20130,39093:20144,39094:20147,39095:20150,39096:20174,39097:20173,39098:20164,39099:20166,39100:20162,39101:20183,39102:20190,39103:20205,39104:20191,39105:20215,39106:20233,39107:20314,39108:20272,39109:20315,39110:20317,39111:20311,39112:20295,39113:20342,39114:20360,39115:20367,39116:20376,39117:20347,39118:20329,39119:20336,39120:20369,39121:20335,39122:20358,39123:20374,39124:20760,39125:20436,39126:20447,39127:20430,39128:20440,39129:20443,39130:20433,39131:20442,39132:20432,39133:20452,39134:20453,39135:20506,39136:20520,39137:20500,39138:20522,39139:20517,39140:20485,39141:20252,39142:20470,39143:20513,39144:20521,39145:20524,39146:20478,39147:20463,39148:20497,39149:20486,39150:20547,39151:20551,39152:26371,39153:20565,39154:20560,39155:20552,39156:20570,39157:20566,39158:20588,39159:20600,39160:20608,39161:20634,39162:20613,39163:20660,39164:20658,39232:20681,39233:20682,39234:20659,39235:20674,39236:20694,39237:20702,39238:20709,39239:20717,39240:20707,39241:20718,39242:20729,39243:20725,39244:20745,39245:20737,39246:20738,39247:20758,39248:20757,39249:20756,39250:20762,39251:20769,39252:20794,39253:20791,39254:20796,39255:20795,39256:20799,39257:20800,39258:20818,39259:20812,39260:20820,39261:20834,39262:31480,39263:20841,39264:20842,39265:20846,39266:20864,39267:20866,39268:22232,39269:20876,39270:20873,39271:20879,39272:20881,39273:20883,39274:20885,39275:20886,39276:20900,39277:20902,39278:20898,39279:20905,39280:20906,39281:20907,39282:20915,39283:20913,39284:20914,39285:20912,39286:20917,39287:20925,39288:20933,39289:20937,39290:20955,39291:20960,39292:34389,39293:20969,39294:20973,39296:20976,39297:20981,39298:20990,39299:20996,39300:21003,39301:21012,39302:21006,39303:21031,39304:21034,39305:21038,39306:21043,39307:21049,39308:21071,39309:21060,39310:21067,39311:21068,39312:21086,39313:21076,39314:21098,39315:21108,39316:21097,39317:21107,39318:21119,39319:21117,39320:21133,39321:21140,39322:21138,39323:21105,39324:21128,39325:21137,39326:36776,39327:36775,39328:21164,39329:21165,39330:21180,39331:21173,39332:21185,39333:21197,39334:21207,39335:21214,39336:21219,39337:21222,39338:39149,39339:21216,39340:21235,39341:21237,39342:21240,39343:21241,39344:21254,39345:21256,39346:30008,39347:21261,39348:21264,39349:21263,39350:21269,39351:21274,39352:21283,39353:21295,39354:21297,39355:21299,39356:21304,39357:21312,39358:21318,39359:21317,39360:19991,39361:21321,39362:21325,39363:20950,39364:21342,39365:21353,39366:21358,39367:22808,39368:21371,39369:21367,39370:21378,39371:21398,39372:21408,39373:21414,39374:21413,39375:21422,39376:21424,39377:21430,39378:21443,39379:31762,39380:38617,39381:21471,39382:26364,39383:29166,39384:21486,39385:21480,39386:21485,39387:21498,39388:21505,39389:21565,39390:21568,39391:21548,39392:21549,39393:21564,39394:21550,39395:21558,39396:21545,39397:21533,39398:21582,39399:21647,39400:21621,39401:21646,39402:21599,39403:21617,39404:21623,39405:21616,39406:21650,39407:21627,39408:21632,39409:21622,39410:21636,39411:21648,39412:21638,39413:21703,39414:21666,39415:21688,39416:21669,39417:21676,39418:21700,39419:21704,39420:21672,39488:21675,39489:21698,39490:21668,39491:21694,39492:21692,39493:21720,39494:21733,39495:21734,39496:21775,39497:21780,39498:21757,39499:21742,39500:21741,39501:21754,39502:21730,39503:21817,39504:21824,39505:21859,39506:21836,39507:21806,39508:21852,39509:21829,39510:21846,39511:21847,39512:21816,39513:21811,39514:21853,39515:21913,39516:21888,39517:21679,39518:21898,39519:21919,39520:21883,39521:21886,39522:21912,39523:21918,39524:21934,39525:21884,39526:21891,39527:21929,39528:21895,39529:21928,39530:21978,39531:21957,39532:21983,39533:21956,39534:21980,39535:21988,39536:21972,39537:22036,39538:22007,39539:22038,39540:22014,39541:22013,39542:22043,39543:22009,39544:22094,39545:22096,39546:29151,39547:22068,39548:22070,39549:22066,39550:22072,39552:22123,39553:22116,39554:22063,39555:22124,39556:22122,39557:22150,39558:22144,39559:22154,39560:22176,39561:22164,39562:22159,39563:22181,39564:22190,39565:22198,39566:22196,39567:22210,39568:22204,39569:22209,39570:22211,39571:22208,39572:22216,39573:22222,39574:22225,39575:22227,39576:22231,39577:22254,39578:22265,39579:22272,39580:22271,39581:22276,39582:22281,39583:22280,39584:22283,39585:22285,39586:22291,39587:22296,39588:22294,39589:21959,39590:22300,39591:22310,39592:22327,39593:22328,39594:22350,39595:22331,39596:22336,39597:22351,39598:22377,39599:22464,39600:22408,39601:22369,39602:22399,39603:22409,39604:22419,39605:22432,39606:22451,39607:22436,39608:22442,39609:22448,39610:22467,39611:22470,39612:22484,39613:22482,39614:22483,39615:22538,39616:22486,39617:22499,39618:22539,39619:22553,39620:22557,39621:22642,39622:22561,39623:22626,39624:22603,39625:22640,39626:27584,39627:22610,39628:22589,39629:22649,39630:22661,39631:22713,39632:22687,39633:22699,39634:22714,39635:22750,39636:22715,39637:22712,39638:22702,39639:22725,39640:22739,39641:22737,39642:22743,39643:22745,39644:22744,39645:22757,39646:22748,39647:22756,39648:22751,39649:22767,39650:22778,39651:22777,39652:22779,39653:22780,39654:22781,39655:22786,39656:22794,39657:22800,39658:22811,39659:26790,39660:22821,39661:22828,39662:22829,39663:22834,39664:22840,39665:22846,39666:31442,39667:22869,39668:22864,39669:22862,39670:22874,39671:22872,39672:22882,39673:22880,\\n39674:22887,39675:22892,39676:22889,39744:22904,39745:22913,39746:22941,39747:20318,39748:20395,39749:22947,39750:22962,39751:22982,39752:23016,39753:23004,39754:22925,39755:23001,39756:23002,39757:23077,39758:23071,39759:23057,39760:23068,39761:23049,39762:23066,39763:23104,39764:23148,39765:23113,39766:23093,39767:23094,39768:23138,39769:23146,39770:23194,39771:23228,39772:23230,39773:23243,39774:23234,39775:23229,39776:23267,39777:23255,39778:23270,39779:23273,39780:23254,39781:23290,39782:23291,39783:23308,39784:23307,39785:23318,39786:23346,39787:23248,39788:23338,39789:23350,39790:23358,39791:23363,39792:23365,39793:23360,39794:23377,39795:23381,39796:23386,39797:23387,39798:23397,39799:23401,39800:23408,39801:23411,39802:23413,39803:23416,39804:25992,39805:23418,39806:23424,39808:23427,39809:23462,39810:23480,39811:23491,39812:23495,39813:23497,39814:23508,39815:23504,39816:23524,39817:23526,39818:23522,39819:23518,39820:23525,39821:23531,39822:23536,39823:23542,39824:23539,39825:23557,39826:23559,39827:23560,39828:23565,39829:23571,39830:23584,39831:23586,39832:23592,39833:23608,39834:23609,39835:23617,39836:23622,39837:23630,39838:23635,39839:23632,39840:23631,39841:23409,39842:23660,39843:23662,39844:20066,39845:23670,39846:23673,39847:23692,39848:23697,39849:23700,39850:22939,39851:23723,39852:23739,39853:23734,39854:23740,39855:23735,39856:23749,39857:23742,39858:23751,39859:23769,39860:23785,39861:23805,39862:23802,39863:23789,39864:23948,39865:23786,39866:23819,39867:23829,39868:23831,39869:23900,39870:23839,39871:23835,39872:23825,39873:23828,39874:23842,39875:23834,39876:23833,39877:23832,39878:23884,39879:23890,39880:23886,39881:23883,39882:23916,39883:23923,39884:23926,39885:23943,39886:23940,39887:23938,39888:23970,39889:23965,39890:23980,39891:23982,39892:23997,39893:23952,39894:23991,39895:23996,39896:24009,39897:24013,39898:24019,39899:24018,39900:24022,39901:24027,39902:24043,39903:24050,39904:24053,39905:24075,39906:24090,39907:24089,39908:24081,39909:24091,39910:24118,39911:24119,39912:24132,39913:24131,39914:24128,39915:24142,39916:24151,39917:24148,39918:24159,39919:24162,39920:24164,39921:24135,39922:24181,39923:24182,39924:24186,39925:40636,39926:24191,39927:24224,39928:24257,39929:24258,39930:24264,39931:24272,39932:24271,4e4:24278,40001:24291,40002:24285,40003:24282,40004:24283,40005:24290,40006:24289,40007:24296,40008:24297,40009:24300,40010:24305,40011:24307,40012:24304,40013:24308,40014:24312,40015:24318,40016:24323,40017:24329,40018:24413,40019:24412,40020:24331,40021:24337,40022:24342,40023:24361,40024:24365,40025:24376,40026:24385,40027:24392,40028:24396,40029:24398,40030:24367,40031:24401,40032:24406,40033:24407,40034:24409,40035:24417,40036:24429,40037:24435,40038:24439,40039:24451,40040:24450,40041:24447,40042:24458,40043:24456,40044:24465,40045:24455,40046:24478,40047:24473,40048:24472,40049:24480,40050:24488,40051:24493,40052:24508,40053:24534,40054:24571,40055:24548,40056:24568,40057:24561,40058:24541,40059:24755,40060:24575,40061:24609,40062:24672,40064:24601,40065:24592,40066:24617,40067:24590,40068:24625,40069:24603,40070:24597,40071:24619,40072:24614,40073:24591,40074:24634,40075:24666,40076:24641,40077:24682,40078:24695,40079:24671,40080:24650,40081:24646,40082:24653,40083:24675,40084:24643,40085:24676,40086:24642,40087:24684,40088:24683,40089:24665,40090:24705,40091:24717,40092:24807,40093:24707,40094:24730,40095:24708,40096:24731,40097:24726,40098:24727,40099:24722,40100:24743,40101:24715,40102:24801,40103:24760,40104:24800,40105:24787,40106:24756,40107:24560,40108:24765,40109:24774,40110:24757,40111:24792,40112:24909,40113:24853,40114:24838,40115:24822,40116:24823,40117:24832,40118:24820,40119:24826,40120:24835,40121:24865,40122:24827,40123:24817,40124:24845,40125:24846,40126:24903,40127:24894,40128:24872,40129:24871,40130:24906,40131:24895,40132:24892,40133:24876,40134:24884,40135:24893,40136:24898,40137:24900,40138:24947,40139:24951,40140:24920,40141:24921,40142:24922,40143:24939,40144:24948,40145:24943,40146:24933,40147:24945,40148:24927,40149:24925,40150:24915,40151:24949,40152:24985,40153:24982,40154:24967,40155:25004,40156:24980,40157:24986,40158:24970,40159:24977,40160:25003,40161:25006,40162:25036,40163:25034,40164:25033,40165:25079,40166:25032,40167:25027,40168:25030,40169:25018,40170:25035,40171:32633,40172:25037,40173:25062,40174:25059,40175:25078,40176:25082,40177:25076,40178:25087,40179:25085,40180:25084,40181:25086,40182:25088,40183:25096,40184:25097,40185:25101,40186:25100,40187:25108,40188:25115,40256:25118,40257:25121,40258:25130,40259:25134,40260:25136,40261:25138,40262:25139,40263:25153,40264:25166,40265:25182,40266:25187,40267:25179,40268:25184,40269:25192,40270:25212,40271:25218,40272:25225,40273:25214,40274:25234,40275:25235,40276:25238,40277:25300,40278:25219,40279:25236,40280:25303,40281:25297,40282:25275,40283:25295,40284:25343,40285:25286,40286:25812,40287:25288,40288:25308,40289:25292,40290:25290,40291:25282,40292:25287,40293:25243,40294:25289,40295:25356,40296:25326,40297:25329,40298:25383,40299:25346,40300:25352,40301:25327,40302:25333,40303:25424,40304:25406,40305:25421,40306:25628,40307:25423,40308:25494,40309:25486,40310:25472,40311:25515,40312:25462,40313:25507,40314:25487,40315:25481,40316:25503,40317:25525,40318:25451,40320:25449,40321:25534,40322:25577,40323:25536,40324:25542,40325:25571,40326:25545,40327:25554,40328:25590,40329:25540,40330:25622,40331:25652,40332:25606,40333:25619,40334:25638,40335:25654,40336:25885,40337:25623,40338:25640,40339:25615,40340:25703,40341:25711,40342:25718,40343:25678,40344:25898,40345:25749,40346:25747,40347:25765,40348:25769,40349:25736,40350:25788,40351:25818,40352:25810,40353:25797,40354:25799,40355:25787,40356:25816,40357:25794,40358:25841,40359:25831,40360:33289,40361:25824,40362:25825,40363:25260,40364:25827,40365:25839,40366:25900,40367:25846,40368:25844,40369:25842,40370:25850,40371:25856,40372:25853,40373:25880,40374:25884,40375:25861,40376:25892,40377:25891,40378:25899,40379:25908,40380:25909,40381:25911,40382:25910,40383:25912,40384:30027,40385:25928,40386:25942,40387:25941,40388:25933,40389:25944,40390:25950,40391:25949,40392:25970,40393:25976,40394:25986,40395:25987,40396:35722,40397:26011,40398:26015,40399:26027,40400:26039,40401:26051,40402:26054,40403:26049,40404:26052,40405:26060,40406:26066,40407:26075,40408:26073,40409:26080,40410:26081,40411:26097,40412:26482,40413:26122,40414:26115,40415:26107,40416:26483,40417:26165,40418:26166,40419:26164,40420:26140,40421:26191,40422:26180,40423:26185,40424:26177,40425:26206,40426:26205,40427:26212,40428:26215,40429:26216,40430:26207,40431:26210,40432:26224,40433:26243,40434:26248,40435:26254,40436:26249,40437:26244,40438:26264,40439:26269,40440:26305,40441:26297,40442:26313,40443:26302,40444:26300,40512:26308,40513:26296,40514:26326,40515:26330,40516:26336,40517:26175,40518:26342,40519:26345,40520:26352,40521:26357,40522:26359,40523:26383,40524:26390,40525:26398,40526:26406,40527:26407,40528:38712,40529:26414,40530:26431,40531:26422,40532:26433,40533:26424,40534:26423,40535:26438,40536:26462,40537:26464,40538:26457,40539:26467,40540:26468,40541:26505,40542:26480,40543:26537,40544:26492,40545:26474,40546:26508,40547:26507,40548:26534,40549:26529,40550:26501,40551:26551,40552:26607,40553:26548,40554:26604,40555:26547,40556:26601,40557:26552,40558:26596,40559:26590,40560:26589,40561:26594,40562:26606,40563:26553,40564:26574,40565:26566,40566:26599,40567:27292,40568:26654,40569:26694,40570:26665,40571:26688,40572:26701,40573:26674,40574:26702,40576:26803,40577:26667,40578:26713,40579:26723,40580:26743,40581:26751,40582:26783,40583:26767,40584:26797,40585:26772,40586:26781,40587:26779,40588:26755,40589:27310,40590:26809,40591:26740,40592:26805,40593:26784,40594:26810,40595:26895,40596:26765,40597:26750,40598:26881,40599:26826,40600:26888,40601:26840,40602:26914,40603:26918,40604:26849,40605:26892,40606:26829,40607:26836,40608:26855,40609:26837,40610:26934,40611:26898,40612:26884,40613:26839,40614:26851,40615:26917,40616:26873,40617:26848,40618:26863,40619:26920,40620:26922,40621:26906,40622:26915,40623:26913,40624:26822,40625:27001,40626:26999,40627:26972,40628:27e3,40629:26987,40630:26964,40631:27006,40632:26990,40633:26937,40634:26996,40635:26941,40636:26969,40637:26928,40638:26977,40639:26974,40640:26973,40641:27009,40642:26986,40643:27058,40644:27054,40645:27088,40646:27071,40647:27073,40648:27091,40649:27070,40650:27086,40651:23528,40652:27082,40653:27101,40654:27067,40655:27075,40656:27047,40657:27182,40658:27025,40659:27040,40660:27036,40661:27029,40662:27060,40663:27102,40664:27112,40665:27138,40666:27163,40667:27135,40668:27402,40669:27129,40670:27122,40671:27111,40672:27141,40673:27057,40674:27166,40675:27117,40676:27156,40677:27115,40678:27146,40679:27154,40680:27329,40681:27171,40682:27155,40683:27204,40684:27148,40685:27250,40686:27190,40687:27256,40688:27207,40689:27234,40690:27225,40691:27238,40692:27208,40693:27192,40694:27170,40695:27280,40696:27277,40697:27296,40698:27268,40699:27298,40700:27299,40768:27287,40769:34327,40770:27323,40771:27331,40772:27330,40773:27320,40774:27315,40775:27308,40776:27358,40777:27345,40778:27359,40779:27306,40780:27354,40781:27370,40782:27387,40783:27397,40784:34326,40785:27386,40786:27410,40787:27414,40788:39729,40789:27423,40790:27448,40791:27447,40792:30428,40793:27449,40794:39150,40795:27463,40796:27459,40797:27465,40798:27472,40799:27481,40800:27476,40801:27483,40802:27487,40803:27489,40804:27512,40805:27513,40806:27519,40807:27520,40808:27524,40809:27523,40810:27533,40811:27544,40812:27541,40813:27550,40814:27556,40815:27562,40816:27563,40817:27567,40818:27570,40819:27569,40820:27571,40821:27575,40822:27580,40823:27590,40824:27595,40825:27603,40826:27615,40827:27628,40828:27627,40829:27635,40830:27631,40832:40638,40833:27656,40834:27667,40835:27668,40836:27675,40837:27684,40838:27683,40839:27742,40840:27733,40841:27746,40842:27754,40843:27778,40844:27789,40845:27802,40846:27777,40847:27803,40848:27774,40849:27752,40850:27763,40851:27794,40852:27792,40853:27844,40854:27889,40855:27859,40856:27837,40857:27863,40858:27845,40859:27869,40860:27822,40861:27825,40862:27838,40863:27834,40864:27867,40865:27887,40866:27865,40867:27882,40868:27935,40869:34893,40870:27958,40871:27947,40872:27965,40873:27960,40874:27929,40875:27957,40876:27955,40877:27922,40878:27916,40879:28003,40880:28051,40881:28004,40882:27994,40883:28025,40884:27993,40885:28046,40886:28053,40887:28644,40888:28037,40889:28153,40890:28181,40891:28170,40892:28085,40893:28103,40894:28134,40895:28088,40896:28102,40897:28140,40898:28126,40899:28108,40900:28136,40901:28114,40902:28101,40903:28154,40904:28121,40905:28132,40906:28117,40907:28138,40908:28142,40909:28205,40910:28270,40911:28206,40912:28185,40913:28274,40914:28255,40915:28222,40916:28195,40917:28267,40918:28203,40919:28278,40920:28237,40921:28191,40922:28227,40923:28218,40924:28238,40925:28196,40926:28415,40927:28189,40928:28216,40929:28290,40930:28330,40931:28312,40932:28361,40933:28343,40934:28371,40935:28349,40936:28335,40937:28356,40938:28338,40939:28372,40940:28373,40941:28303,40942:28325,40943:28354,40944:28319,40945:28481,40946:28433,40947:28748,40948:28396,40949:28408,40950:28414,40951:28479,40952:28402,40953:28465,40954:28399,40955:28466,40956:28364,161:65377,162:65378,163:65379,164:65380,165:65381,166:65382,167:65383,168:65384,169:65385,170:65386,171:65387,172:65388,173:65389,174:65390,175:65391,176:65392,177:65393,178:65394,179:65395,180:65396,181:65397,182:65398,183:65399,184:65400,185:65401,186:65402,187:65403,188:65404,189:65405,190:65406,191:65407,192:65408,193:65409,194:65410,195:65411,196:65412,197:65413,198:65414,199:65415,200:65416,201:65417,202:65418,203:65419,204:65420,205:65421,206:65422,207:65423,208:65424,209:65425,210:65426,211:65427,212:65428,213:65429,214:65430,215:65431,216:65432,217:65433,218:65434,219:65435,220:65436,221:65437,222:65438,223:65439,57408:28478,57409:28435,57410:28407,57411:28550,57412:28538,57413:28536,57414:28545,57415:28544,57416:28527,57417:28507,57418:28659,57419:28525,57420:28546,57421:28540,57422:28504,57423:28558,57424:28561,57425:28610,57426:28518,57427:28595,57428:28579,57429:28577,57430:28580,57431:28601,57432:28614,57433:28586,57434:28639,57435:28629,57436:28652,57437:28628,57438:28632,57439:28657,57440:28654,57441:28635,57442:28681,57443:28683,57444:28666,57445:28689,57446:28673,57447:28687,57448:28670,57449:28699,57450:28698,57451:28532,57452:28701,57453:28696,57454:28703,57455:28720,57456:28734,57457:28722,57458:28753,57459:28771,57460:28825,57461:28818,57462:28847,57463:28913,57464:28844,57465:28856,57466:28851,57467:28846,57468:28895,57469:28875,57470:28893,57472:28889,57473:28937,57474:28925,57475:28956,57476:28953,57477:29029,57478:29013,57479:29064,57480:29030,57481:29026,57482:29004,57483:29014,57484:29036,57485:29071,57486:29179,57487:29060,57488:29077,57489:29096,57490:29100,57491:29143,57492:29113,57493:29118,57494:29138,57495:29129,57496:29140,57497:29134,57498:29152,57499:29164,57500:29159,57501:29173,57502:29180,57503:29177,57504:29183,57505:29197,57506:29200,57507:29211,57508:29224,57509:29229,57510:29228,57511:29232,57512:29234,57513:29243,57514:29244,57515:29247,57516:29248,57517:29254,57518:29259,57519:29272,57520:29300,57521:29310,57522:29314,57523:29313,57524:29319,57525:29330,57526:29334,57527:29346,57528:29351,57529:29369,57530:29362,57531:29379,57532:29382,57533:29380,57534:29390,57535:29394,57536:29410,57537:29408,57538:29409,57539:29433,57540:29431,57541:20495,57542:29463,57543:29450,57544:29468,57545:29462,57546:29469,57547:29492,57548:29487,57549:29481,57550:29477,57551:29502,57552:29518,57553:29519,57554:40664,57555:29527,57556:29546,57557:29544,57558:29552,57559:29560,57560:29557,57561:29563,57562:29562,57563:29640,57564:29619,57565:29646,57566:29627,57567:29632,57568:29669,57569:29678,57570:29662,57571:29858,57572:29701,57573:29807,57574:29733,57575:29688,57576:29746,57577:29754,57578:29781,57579:29759,57580:29791,57581:29785,57582:29761,57583:29788,57584:29801,57585:29808,57586:29795,57587:29802,57588:29814,57589:29822,57590:29835,57591:29854,57592:29863,57593:29898,57594:29903,57595:29908,57596:29681,57664:29920,57665:29923,57666:29927,57667:29929,57668:29934,57669:29938,57670:29936,57671:29937,57672:29944,57673:29943,57674:29956,57675:29955,57676:29957,57677:29964,57678:29966,57679:29965,57680:29973,57681:29971,57682:29982,57683:29990,57684:29996,57685:30012,57686:30020,57687:30029,57688:30026,57689:30025,57690:30043,57691:30022,57692:30042,57693:30057,57694:30052,57695:30055,57696:30059,57697:30061,57698:30072,57699:30070,57700:30086,57701:30087,57702:30068,57703:30090,57704:30089,57705:30082,57706:30100,57707:30106,57708:30109,57709:30117,57710:30115,57711:30146,57712:30131,57713:30147,57714:30133,57715:30141,57716:30136,57717:30140,57718:30129,57719:30157,57720:30154,57721:30162,57722:30169,57723:30179,57724:30174,57725:30206,57726:30207,57728:30204,57729:30209,57730:30192,57731:30202,57732:30194,57733:30195,57734:30219,57735:30221,57736:30217,57737:30239,57738:30247,57739:30240,57740:30241,57741:30242,57742:30244,57743:30260,57744:30256,57745:30267,57746:30279,57747:30280,57748:30278,57749:30300,57750:30296,57751:30305,57752:30306,57753:30312,57754:30313,57755:30314,57756:30311,57757:30316,57758:30320,57759:30322,57760:30326,57761:30328,57762:30332,57763:30336,57764:30339,57765:30344,57766:30347,57767:30350,57768:30358,57769:30355,57770:30361,57771:30362,57772:30384,57773:30388,57774:30392,57775:30393,57776:30394,57777:30402,57778:30413,57779:30422,57780:30418,57781:30430,57782:30433,57783:30437,57784:30439,57785:30442,57786:34351,57787:30459,57788:30472,57789:30471,57790:30468,57791:30505,57792:30500,57793:30494,57794:30501,57795:30502,57796:30491,57797:30519,57798:30520,57799:30535,57800:30554,57801:30568,57802:30571,57803:30555,57804:30565,57805:30591,57806:30590,57807:30585,57808:30606,57809:30603,57810:30609,57811:30624,57812:30622,57813:30640,57814:30646,57815:30649,57816:30655,57817:30652,57818:30653,57819:30651,57820:30663,57821:30669,57822:30679,57823:30682,57824:30684,57825:30691,57826:30702,57827:30716,57828:30732,57829:30738,57830:31014,57831:30752,57832:31018,57833:30789,57834:30862,57835:30836,57836:30854,57837:30844,57838:30874,57839:30860,57840:30883,57841:30901,57842:30890,57843:30895,57844:30929,57845:30918,57846:30923,57847:30932,57848:30910,57849:30908,57850:30917,57851:30922,57852:30956,57920:30951,57921:30938,57922:30973,57923:30964,57924:30983,57925:30994,57926:30993,57927:31001,57928:31020,57929:31019,57930:31040,57931:31072,57932:31063,57933:31071,57934:31066,57935:31061,57936:31059,57937:31098,57938:31103,57939:31114,57940:31133,57941:31143,57942:40779,57943:31146,57944:31150,57945:31155,57946:31161,57947:31162,57948:31177,57949:31189,57950:31207,57951:31212,57952:31201,57953:31203,57954:31240,57955:31245,57956:31256,57957:31257,57958:31264,57959:31263,57960:31104,57961:31281,57962:31291,57963:31294,57964:31287,57965:31299,57966:31319,57967:31305,57968:31329,57969:31330,57970:31337,57971:40861,57972:31344,57973:31353,57974:31357,57975:31368,57976:31383,57977:31381,57978:31384,57979:31382,57980:31401,57981:31432,57982:31408,57984:31414,57985:31429,57986:31428,57987:31423,57988:36995,57989:31431,57990:31434,57991:31437,57992:31439,57993:31445,57994:31443,57995:31449,57996:31450,57997:31453,57998:31457,57999:31458,58e3:31462,58001:31469,58002:31472,58003:31490,58004:31503,58005:31498,58006:31494,58007:31539,58008:31512,58009:31513,58010:31518,58011:31541,58012:31528,58013:31542,58014:31568,58015:31610,58016:31492,58017:31565,58018:31499,58019:31564,58020:31557,58021:31605,58022:31589,58023:31604,58024:31591,58025:31600,58026:31601,58027:31596,58028:31598,58029:31645,58030:31640,58031:31647,58032:31629,58033:31644,58034:31642,58035:31627,58036:31634,58037:31631,58038:31581,58039:31641,58040:31691,58041:31681,58042:31692,58043:31695,58044:31668,58045:31686,58046:31709,58047:31721,58048:31761,58049:31764,58050:31718,58051:31717,58052:31840,58053:31744,58054:31751,58055:31763,58056:31731,58057:31735,58058:31767,58059:31757,58060:31734,58061:31779,58062:31783,58063:31786,58064:31775,58065:31799,58066:31787,58067:31805,58068:31820,58069:31811,58070:31828,58071:31823,58072:31808,58073:31824,58074:31832,58075:31839,58076:31844,58077:31830,58078:31845,58079:31852,58080:31861,58081:31875,58082:31888,58083:31908,58084:31917,58085:31906,58086:31915,58087:31905,58088:31912,58089:31923,58090:31922,58091:31921,58092:31918,58093:31929,58094:31933,58095:31936,58096:31941,58097:31938,58098:31960,58099:31954,58100:31964,58101:31970,58102:39739,58103:31983,58104:31986,58105:31988,58106:31990,58107:31994,58108:32006,58176:32002,58177:32028,58178:32021,58179:32010,58180:32069,58181:32075,58182:32046,58183:32050,58184:32063,58185:32053,58186:32070,58187:32115,58188:32086,58189:32078,58190:32114,58191:32104,58192:32110,58193:32079,58194:32099,58195:32147,58196:32137,58197:32091,58198:32143,58199:32125,58200:32155,58201:32186,58202:32174,58203:32163,58204:32181,58205:32199,58206:32189,58207:32171,58208:32317,58209:32162,58210:32175,58211:32220,58212:32184,58213:32159,58214:32176,58215:32216,58216:32221,58217:32228,58218:32222,58219:32251,58220:32242,58221:32225,58222:32261,58223:32266,58224:32291,58225:32289,58226:32274,58227:32305,58228:32287,58229:32265,58230:32267,58231:32290,58232:32326,58233:32358,58234:32315,58235:32309,58236:32313,58237:32323,58238:32311,58240:32306,58241:32314,58242:32359,58243:32349,58244:32342,58245:32350,58246:32345,58247:32346,58248:32377,58249:32362,58250:32361,58251:32380,58252:32379,58253:32387,58254:32213,58255:32381,58256:36782,58257:32383,58258:32392,58259:32393,58260:32396,58261:32402,58262:32400,58263:32403,58264:32404,58265:32406,58266:32398,58267:32411,58268:32412,58269:32568,58270:32570,58271:32581,58272:32588,58273:32589,58274:32590,58275:32592,58276:32593,58277:32597,58278:32596,58279:32600,58280:32607,58281:32608,58282:32616,58283:32617,58284:32615,58285:32632,58286:32642,58287:32646,58288:32643,58289:32648,58290:32647,58291:32652,58292:32660,58293:32670,58294:32669,58295:32666,58296:32675,58297:32687,58298:32690,58299:32697,58300:32686,58301:32694,58302:32696,58303:35697,58304:32709,58305:32710,58306:32714,58307:32725,58308:32724,58309:32737,58310:32742,58311:32745,58312:32755,58313:32761,58314:39132,58315:32774,58316:32772,58317:32779,58318:32786,58319:32792,58320:32793,58321:32796,58322:32801,58323:32808,58324:32831,58325:32827,58326:32842,58327:32838,58328:32850,58329:32856,58330:32858,58331:32863,58332:32866,58333:32872,58334:32883,58335:32882,58336:32880,58337:32886,58338:32889,58339:32893,58340:32895,58341:32900,58342:32902,58343:32901,58344:32923,58345:32915,58346:32922,58347:32941,58348:20880,58349:32940,58350:32987,58351:32997,58352:32985,58353:32989,58354:32964,58355:32986,58356:32982,58357:33033,58358:33007,58359:33009,58360:33051,58361:33065,58362:33059,58363:33071,58364:33099,58432:38539,58433:33094,58434:33086,58435:33107,58436:33105,58437:33020,58438:33137,58439:33134,58440:33125,58441:33126,58442:33140,58443:33155,58444:33160,58445:33162,58446:33152,58447:33154,58448:33184,58449:33173,58450:33188,58451:33187,58452:33119,58453:33171,58454:33193,58455:33200,58456:33205,58457:33214,58458:33208,58459:33213,58460:33216,58461:33218,58462:33210,58463:33225,58464:33229,58465:33233,58466:33241,58467:33240,58468:33224,58469:33242,58470:33247,58471:33248,58472:33255,58473:33274,58474:33275,58475:33278,58476:33281,58477:33282,58478:33285,58479:33287,58480:33290,58481:33293,58482:33296,58483:33302,58484:33321,58485:33323,58486:33336,58487:33331,58488:33344,58489:33369,58490:33368,58491:33373,58492:33370,58493:33375,58494:33380,58496:33378,58497:33384,58498:33386,58499:33387,58500:33326,58501:33393,58502:33399,58503:33400,58504:33406,58505:33421,58506:33426,58507:33451,58508:33439,58509:33467,58510:33452,58511:33505,58512:33507,58513:33503,58514:33490,58515:33524,58516:33523,58517:33530,58518:33683,58519:33539,58520:33531,58521:33529,58522:33502,58523:33542,58524:33500,58525:33545,58526:33497,58527:33589,58528:33588,58529:33558,58530:33586,58531:33585,58532:33600,58533:33593,58534:33616,58535:33605,58536:33583,58537:33579,58538:33559,58539:33560,58540:33669,58541:33690,58542:33706,58543:33695,58544:33698,58545:33686,58546:33571,58547:33678,58548:33671,58549:33674,58550:33660,58551:33717,58552:33651,58553:33653,58554:33696,58555:33673,58556:33704,58557:33780,58558:33811,58559:33771,58560:33742,58561:33789,58562:33795,58563:33752,58564:33803,58565:33729,58566:33783,58567:33799,58568:33760,58569:33778,58570:33805,58571:33826,58572:33824,58573:33725,58574:33848,58575:34054,58576:33787,58577:33901,58578:33834,58579:33852,58580:34138,58581:33924,58582:33911,58583:33899,58584:33965,58585:33902,58586:33922,58587:33897,58588:33862,58589:33836,58590:33903,58591:33913,58592:33845,58593:33994,58594:33890,58595:33977,58596:33983,58597:33951,58598:34009,58599:33997,58600:33979,58601:34010,58602:34e3,58603:33985,58604:33990,58605:34006,58606:33953,58607:34081,58608:34047,58609:34036,58610:34071,58611:34072,58612:34092,58613:34079,58614:34069,58615:34068,58616:34044,58617:34112,58618:34147,58619:34136,58620:34120,58688:34113,58689:34306,58690:34123,58691:34133,58692:34176,58693:34212,58694:34184,58695:34193,58696:34186,58697:34216,58698:34157,58699:34196,58700:34203,58701:34282,58702:34183,58703:34204,58704:34167,58705:34174,58706:34192,58707:34249,58708:34234,58709:34255,58710:34233,58711:34256,58712:34261,58713:34269,58714:34277,58715:34268,58716:34297,58717:34314,58718:34323,58719:34315,58720:34302,58721:34298,58722:34310,58723:34338,58724:34330,58725:34352,58726:34367,58727:34381,58728:20053,58729:34388,58730:34399,58731:34407,58732:34417,58733:34451,58734:34467,58735:34473,58736:34474,58737:34443,58738:34444,58739:34486,58740:34479,58741:34500,58742:34502,58743:34480,58744:34505,58745:34851,58746:34475,58747:34516,58748:34526,58749:34537,58750:34540,58752:34527,58753:34523,58754:34543,58755:34578,58756:34566,58757:34568,58758:34560,58759:34563,58760:34555,58761:34577,58762:34569,58763:34573,58764:34553,58765:34570,58766:34612,58767:34623,58768:34615,58769:34619,58770:34597,58771:34601,58772:34586,58773:34656,58774:34655,58775:34680,58776:34636,58777:34638,58778:34676,58779:34647,58780:34664,58781:34670,58782:34649,58783:34643,58784:34659,58785:34666,58786:34821,58787:34722,58788:34719,58789:34690,58790:34735,58791:34763,58792:34749,58793:34752,58794:34768,58795:38614,58796:34731,58797:34756,58798:34739,58799:34759,58800:34758,58801:34747,58802:34799,58803:34802,58804:34784,58805:34831,58806:34829,58807:34814,58808:34806,58809:34807,58810:34830,58811:34770,58812:34833,58813:34838,58814:34837,58815:34850,58816:34849,58817:34865,58818:34870,58819:34873,58820:34855,58821:34875,58822:34884,58823:34882,58824:34898,58825:34905,58826:34910,58827:34914,58828:34923,58829:34945,58830:34942,58831:34974,58832:34933,58833:34941,58834:34997,58835:34930,58836:34946,58837:34967,58838:34962,58839:34990,58840:34969,58841:34978,58842:34957,58843:34980,58844:34992,58845:35007,58846:34993,58847:35011,58848:35012,58849:35028,58850:35032,58851:35033,58852:35037,58853:35065,58854:35074,58855:35068,58856:35060,58857:35048,58858:35058,58859:35076,58860:35084,58861:35082,58862:35091,58863:35139,58864:35102,58865:35109,58866:35114,58867:35115,58868:35137,58869:35140,58870:35131,58871:35126,58872:35128,58873:35148,58874:35101,58875:35168,58876:35166,58944:35174,58945:35172,58946:35181,58947:35178,58948:35183,58949:35188,58950:35191,58951:35198,58952:35203,58953:35208,58954:35210,58955:35219,58956:35224,58957:35233,58958:35241,58959:35238,58960:35244,58961:35247,58962:35250,58963:35258,58964:35261,58965:35263,58966:35264,58967:35290,58968:35292,58969:35293,58970:35303,58971:35316,58972:35320,58973:35331,58974:35350,58975:35344,58976:35340,58977:35355,58978:35357,58979:35365,58980:35382,58981:35393,58982:35419,58983:35410,58984:35398,58985:35400,58986:35452,58987:35437,58988:35436,58989:35426,58990:35461,58991:35458,58992:35460,58993:35496,58994:35489,58995:35473,58996:35493,58997:35494,58998:35482,58999:35491,59e3:35524,59001:35533,59002:35522,59003:35546,59004:35563,59005:35571,59006:35559,59008:35556,59009:35569,59010:35604,59011:35552,59012:35554,59013:35575,59014:35550,59015:35547,59016:35596,59017:35591,59018:35610,59019:35553,59020:35606,59021:35600,59022:35607,59023:35616,59024:35635,59025:38827,59026:35622,59027:35627,59028:35646,59029:35624,59030:35649,59031:35660,59032:35663,59033:35662,59034:35657,59035:35670,59036:35675,59037:35674,59038:35691,59039:35679,59040:35692,59041:35695,59042:35700,59043:35709,59044:35712,59045:35724,59046:35726,59047:35730,59048:35731,59049:35734,59050:35737,59051:35738,59052:35898,59053:35905,59054:35903,59055:35912,59056:35916,59057:35918,59058:35920,59059:35925,59060:35938,59061:35948,59062:35960,59063:35962,59064:35970,59065:35977,59066:35973,59067:35978,59068:35981,59069:35982,59070:35988,59071:35964,59072:35992,59073:25117,59074:36013,59075:36010,59076:36029,59077:36018,59078:36019,59079:36014,59080:36022,59081:36040,59082:36033,59083:36068,59084:36067,59085:36058,59086:36093,59087:36090,59088:36091,59089:36100,59090:36101,59091:36106,59092:36103,59093:36111,59094:36109,59095:36112,59096:40782,59097:36115,59098:36045,59099:36116,59100:36118,59101:36199,59102:36205,59103:36209,59104:36211,59105:36225,59106:36249,59107:36290,59108:36286,59109:36282,59110:36303,59111:36314,59112:36310,59113:36300,59114:36315,59115:36299,59116:36330,59117:36331,59118:36319,59119:36323,59120:36348,59121:36360,59122:36361,59123:36351,59124:36381,59125:36382,59126:36368,59127:36383,59128:36418,59129:36405,59130:36400,59131:36404,59132:36426,59200:36423,59201:36425,59202:36428,59203:36432,59204:36424,59205:36441,59206:36452,59207:36448,59208:36394,59209:36451,59210:36437,59211:36470,59212:36466,59213:36476,59214:36481,59215:36487,59216:36485,59217:36484,59218:36491,59219:36490,59220:36499,59221:36497,59222:36500,59223:36505,59224:36522,59225:36513,59226:36524,59227:36528,59228:36550,59229:36529,59230:36542,59231:36549,59232:36552,59233:36555,59234:36571,59235:36579,59236:36604,59237:36603,59238:36587,59239:36606,59240:36618,59241:36613,59242:36629,59243:36626,59244:36633,59245:36627,59246:36636,59247:36639,59248:36635,59249:36620,59250:36646,59251:36659,59252:36667,59253:36665,59254:36677,59255:36674,59256:36670,59257:36684,59258:36681,59259:36678,59260:36686,59261:36695,59262:36700,59264:36706,59265:36707,59266:36708,59267:36764,59268:36767,59269:36771,59270:36781,59271:36783,59272:36791,59273:36826,59274:36837,59275:36834,59276:36842,59277:36847,59278:36999,59279:36852,59280:36869,59281:36857,59282:36858,59283:36881,59284:36885,59285:36897,59286:36877,59287:36894,59288:36886,59289:36875,59290:36903,59291:36918,59292:36917,59293:36921,59294:36856,59295:36943,59296:36944,59297:36945,59298:36946,59299:36878,59300:36937,59301:36926,59302:36950,59303:36952,59304:36958,59305:36968,59306:36975,59307:36982,59308:38568,59309:36978,59310:36994,59311:36989,59312:36993,59313:36992,59314:37002,59315:37001,59316:37007,59317:37032,59318:37039,59319:37041,59320:37045,59321:37090,59322:37092,59323:25160,59324:37083,59325:37122,59326:37138,59327:37145,59328:37170,59329:37168,59330:37194,59331:37206,59332:37208,59333:37219,59334:37221,59335:37225,59336:37235,59337:37234,59338:37259,59339:37257,59340:37250,59341:37282,59342:37291,59343:37295,59344:37290,59345:37301,59346:37300,59347:37306,59348:37312,59349:37313,59350:37321,59351:37323,59352:37328,59353:37334,59354:37343,59355:37345,59356:37339,59357:37372,59358:37365,59359:37366,59360:37406,59361:37375,59362:37396,59363:37420,59364:37397,59365:37393,59366:37470,59367:37463,59368:37445,59369:37449,59370:37476,59371:37448,59372:37525,59373:37439,59374:37451,59375:37456,59376:37532,59377:37526,59378:37523,59379:37531,59380:37466,59381:37583,59382:37561,59383:37559,59384:37609,59385:37647,59386:37626,59387:37700,59388:37678,59456:37657,59457:37666,59458:37658,59459:37667,59460:37690,59461:37685,59462:37691,59463:37724,59464:37728,59465:37756,59466:37742,59467:37718,59468:37808,59469:37804,59470:37805,59471:37780,59472:37817,59473:37846,59474:37847,59475:37864,59476:37861,59477:37848,59478:37827,59479:37853,59480:37840,59481:37832,59482:37860,59483:37914,59484:37908,59485:37907,59486:37891,59487:37895,59488:37904,59489:37942,59490:37931,59491:37941,59492:37921,59493:37946,59494:37953,59495:37970,59496:37956,59497:37979,59498:37984,59499:37986,59500:37982,59501:37994,59502:37417,59503:38e3,59504:38005,59505:38007,59506:38013,59507:37978,59508:38012,59509:38014,59510:38017,59511:38015,59512:38274,59513:38279,59514:38282,59515:38292,59516:38294,59517:38296,59518:38297,59520:38304,59521:38312,59522:38311,59523:38317,59524:38332,59525:38331,59526:38329,59527:38334,59528:38346,59529:28662,59530:38339,59531:38349,59532:38348,59533:38357,59534:38356,59535:38358,59536:38364,59537:38369,59538:38373,59539:38370,59540:38433,59541:38440,59542:38446,59543:38447,59544:38466,59545:38476,59546:38479,59547:38475,59548:38519,59549:38492,59550:38494,59551:38493,59552:38495,59553:38502,59554:38514,59555:38508,59556:38541,59557:38552,59558:38549,59559:38551,59560:38570,59561:38567,59562:38577,59563:38578,59564:38576,59565:38580,59566:38582,59567:38584,59568:38585,59569:38606,59570:38603,59571:38601,59572:38605,59573:35149,59574:38620,59575:38669,59576:38613,59577:38649,59578:38660,59579:38662,59580:38664,59581:38675,59582:38670,59583:38673,59584:38671,59585:38678,59586:38681,59587:38692,59588:38698,59589:38704,59590:38713,59591:38717,59592:38718,59593:38724,59594:38726,59595:38728,59596:38722,59597:38729,59598:38748,59599:38752,59600:38756,59601:38758,59602:38760,59603:21202,59604:38763,59605:38769,59606:38777,59607:38789,59608:38780,59609:38785,59610:38778,59611:38790,59612:38795,59613:38799,59614:38800,59615:38812,59616:38824,59617:38822,59618:38819,59619:38835,59620:38836,59621:38851,59622:38854,59623:38856,\\n59624:38859,59625:38876,59626:38893,59627:40783,59628:38898,59629:31455,59630:38902,59631:38901,59632:38927,59633:38924,59634:38968,59635:38948,59636:38945,59637:38967,59638:38973,59639:38982,59640:38991,59641:38987,59642:39019,59643:39023,59644:39024,59712:39025,59713:39028,59714:39027,59715:39082,59716:39087,59717:39089,59718:39094,59719:39108,59720:39107,59721:39110,59722:39145,59723:39147,59724:39171,59725:39177,59726:39186,59727:39188,59728:39192,59729:39201,59730:39197,59731:39198,59732:39204,59733:39200,59734:39212,59735:39214,59736:39229,59737:39230,59738:39234,59739:39241,59740:39237,59741:39248,59742:39243,59743:39249,59744:39250,59745:39244,59746:39253,59747:39319,59748:39320,59749:39333,59750:39341,59751:39342,59752:39356,59753:39391,59754:39387,59755:39389,59756:39384,59757:39377,59758:39405,59759:39406,59760:39409,59761:39410,59762:39419,59763:39416,59764:39425,59765:39439,59766:39429,59767:39394,59768:39449,59769:39467,59770:39479,59771:39493,59772:39490,59773:39488,59774:39491,59776:39486,59777:39509,59778:39501,59779:39515,59780:39511,59781:39519,59782:39522,59783:39525,59784:39524,59785:39529,59786:39531,59787:39530,59788:39597,59789:39600,59790:39612,59791:39616,59792:39631,59793:39633,59794:39635,59795:39636,59796:39646,59797:39647,59798:39650,59799:39651,59800:39654,59801:39663,59802:39659,59803:39662,59804:39668,59805:39665,59806:39671,59807:39675,59808:39686,59809:39704,59810:39706,59811:39711,59812:39714,59813:39715,59814:39717,59815:39719,59816:39720,59817:39721,59818:39722,59819:39726,59820:39727,59821:39730,59822:39748,59823:39747,59824:39759,59825:39757,59826:39758,59827:39761,59828:39768,59829:39796,59830:39827,59831:39811,59832:39825,59833:39830,59834:39831,59835:39839,59836:39840,59837:39848,59838:39860,59839:39872,59840:39882,59841:39865,59842:39878,59843:39887,59844:39889,59845:39890,59846:39907,59847:39906,59848:39908,59849:39892,59850:39905,59851:39994,59852:39922,59853:39921,59854:39920,59855:39957,59856:39956,59857:39945,59858:39955,59859:39948,59860:39942,59861:39944,59862:39954,59863:39946,59864:39940,59865:39982,59866:39963,59867:39973,59868:39972,59869:39969,59870:39984,59871:40007,59872:39986,59873:40006,59874:39998,59875:40026,59876:40032,59877:40039,59878:40054,59879:40056,59880:40167,59881:40172,59882:40176,59883:40201,59884:40200,59885:40171,59886:40195,59887:40198,59888:40234,59889:40230,59890:40367,59891:40227,59892:40223,59893:40260,59894:40213,59895:40210,59896:40257,59897:40255,59898:40254,59899:40262,59900:40264,59968:40285,59969:40286,59970:40292,59971:40273,59972:40272,59973:40281,59974:40306,59975:40329,59976:40327,59977:40363,59978:40303,59979:40314,59980:40346,59981:40356,59982:40361,59983:40370,59984:40388,59985:40385,59986:40379,59987:40376,59988:40378,59989:40390,59990:40399,59991:40386,59992:40409,59993:40403,59994:40440,59995:40422,59996:40429,59997:40431,59998:40445,59999:40474,6e4:40475,60001:40478,60002:40565,60003:40569,60004:40573,60005:40577,60006:40584,60007:40587,60008:40588,60009:40594,60010:40597,60011:40593,60012:40605,60013:40613,60014:40617,60015:40632,60016:40618,60017:40621,60018:38753,60019:40652,60020:40654,60021:40655,60022:40656,60023:40660,60024:40668,60025:40670,60026:40669,60027:40672,60028:40677,60029:40680,60030:40687,60032:40692,60033:40694,60034:40695,60035:40697,60036:40699,60037:40700,60038:40701,60039:40711,60040:40712,60041:30391,60042:40725,60043:40737,60044:40748,60045:40766,60046:40778,60047:40786,60048:40788,60049:40803,60050:40799,60051:40800,60052:40801,60053:40806,60054:40807,60055:40812,60056:40810,60057:40823,60058:40818,60059:40822,60060:40853,60061:40860,60062:40864,60063:22575,60064:27079,60065:36953,60066:29796,60067:20956,60068:29081}},function(o,e,r){\\\"use strict\\\";function t(o,e,r,t){e.degree()=t/2;){var n=c,l=a;if(c=s,a=d,c.isZero())return null;s=n;for(var i=o.zero,B=c.getCoefficient(c.degree()),k=o.inverse(B);s.degree()>=c.degree()&&!s.isZero();){var u=s.degree()-c.degree(),C=o.multiply(s.getCoefficient(s.degree()),k);i=i.addOrSubtract(o.buildMonomial(u,C)),s=s.addOrSubtract(c.multiplyByMonomial(u,C))}if(d=i.multiplyPoly(a).addOrSubtract(l),s.degree()>=c.degree())return null}var m=d.getCoefficient(0);if(0===m)return null;var f=o.inverse(m);return[d.multiply(f),s.multiply(f)];var w}function c(o,e){var r=e.degree();if(1===r)return[e.getCoefficient(1)];for(var t=new Array(r),c=0,s=1;s=a&&d>=n?(l=[e,o,r],t=l[0],c=l[1],s=l[2]):n>=d&&n>=a?(i=[o,e,r],t=i[0],c=i[1],s=i[2]):(B=[o,r,e],t=B[0],c=B[1],s=B[2]),(s.x-c.x)*(t.y-c.y)-(s.y-c.y)*(t.x-c.x)<0&&(k=[s,t],t=k[0],s=k[1]),{bottomLeft:t,topLeft:c,topRight:s};var l,i,B,k}function s(o,e,r,c){var s=(t(d(o,r,c,5))/7+t(d(o,e,c,5))/7+t(d(r,o,c,5))/7+t(d(e,o,c,5))/7)/4;if(s<1)throw new Error(\\\"Invalid module size\\\");var a=Math.round(C(o,e)/s),n=Math.round(C(o,r)/s),l=Math.floor((a+n)/2)+7;switch(l%4){case 0:l++;break;case 2:l--}return{dimension:l,moduleSize:s}}function a(o,e,r,t){var c,s,a,d,n=[{x:Math.floor(o.x),y:Math.floor(o.y)}],l=Math.abs(e.y-o.y)>Math.abs(e.x-o.x);l?(c=Math.floor(o.y),s=Math.floor(o.x),a=Math.floor(e.y),d=Math.floor(e.x)):(c=Math.floor(o.x),s=Math.floor(o.y),a=Math.floor(e.x),d=Math.floor(e.y));for(var i=Math.abs(a-c),B=Math.abs(d-s),k=Math.floor(-i/2),u=c0){if(P===d)break;P+=m,k-=i}}for(var p=[],y=0;y=o.bottom.startX&&w<=o.bottom.endX||f>=o.bottom.startX&&w<=o.bottom.endX||w<=o.bottom.startX&&f>=o.bottom.endX&&l[2]/(o.bottom.endX-o.bottom.startX)k});v.length>0?v[0].bottom=P:r.push({top:P,bottom:P})}if(m){var h=e-l[4],p=h-l[3],P={startX:p,y:c,endX:h},v=d.filter(function(o){return p>=o.bottom.startX&&p<=o.bottom.endX||h>=o.bottom.startX&&p<=o.bottom.endX||p<=o.bottom.startX&&h>=o.bottom.endX&&l[2]/(o.bottom.endX-o.bottom.startX)k});v.length>0?v[0].bottom=P:d.push({top:P,bottom:P})}}}(i);e.push.apply(e,r.filter(function(o){return o.bottom.y!==c&&o.bottom.y-o.top.y>=2})),r=r.filter(function(o){return o.bottom.y===c}),a.push.apply(a,d.filter(function(o){return o.bottom.y!==c})),d=d.filter(function(o){return o.bottom.y===c})}(n);e.push.apply(e,r.filter(function(o){return o.bottom.y-o.top.y>=2})),a.push.apply(a,d);var i=e.filter(function(o){return o.bottom.y-o.top.y>=2}).map(function(e){var r=(e.top.startX+e.top.endX+e.bottom.startX+e.bottom.endX)/4,c=(e.top.y+e.bottom.y+1)/2;if(o.get(Math.round(r),Math.round(c))){\\nvar s=[e.top.endX-e.top.startX,e.bottom.endX-e.bottom.startX,e.bottom.y-e.top.y+1],a=t(s)/s.length;return{score:l({x:Math.round(r),y:Math.round(c)},[1,1,3,1,1],o),x:r,y:c,size:a}}}).filter(function(o){return!!o}).sort(function(o,e){return o.score-e.score}).map(function(o,e,r){if(e>B)return null;var t=r.filter(function(o,r){return e!==r}).map(function(e){return{x:e.x,y:e.y,score:e.score+Math.pow(e.size-o.size,2)/o.size,size:e.size}}).sort(function(o,e){return o.score-e.score});if(t.length<2)return null;var c=o.score+t[0].score+t[1].score;return{points:[o].concat(t.slice(0,2)),score:c}}).filter(function(o){return!!o}).sort(function(o,e){return o.score-e.score});if(0===i.length)return null;var m,f,w=c(i[0].points[0],i[0].points[1],i[0].points[2]),P=w.topRight,v=w.topLeft,h=w.bottomLeft;try{L=s(v,P,h,o),m=L.dimension,f=L.moduleSize}catch(o){return null}var p={x:P.x-v.x+h.x,y:P.y-v.y+h.y},y=(C(v,h)+C(v,P))/2/f,b=1-3/y,g={x:v.x+b*(p.x-v.x),y:v.y+b*(p.y-v.y)},x=a.map(function(e){var r=(e.top.startX+e.top.endX+e.bottom.startX+e.bottom.endX)/4,c=(e.top.y+e.bottom.y+1)/2;if(o.get(Math.floor(r),Math.floor(c))){var s=[e.top.endX-e.top.startX,e.bottom.endX-e.bottom.startX,e.bottom.y-e.top.y+1];t(s);return{x:r,y:c,score:l({x:Math.floor(r),y:Math.floor(c)},[1,1,1],o)+C({x:r,y:c},g)}}}).filter(function(o){return!!o}).sort(function(o,e){return o.score-e.score}),M=y>=15&&x.length?x[0]:g;return{alignmentPattern:{x:M.x,y:M.y},bottomLeft:{x:h.x,y:h.y},dimension:m,topLeft:{x:v.x,y:v.y},topRight:{x:P.x,y:P.y}};var L}Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var B=4,k=.5,u=1.5,C=function(o,e){return Math.sqrt(Math.pow(e.x-o.x,2)+Math.pow(e.y-o.y,2))};e.locate=i}]).default}),self.addEventListener(\\\"message\\\",function(o){var e=jsQR(o.data.data,o.data.width,o.data.height);e?postMessage(e.data):postMessage(null)});\"], {\n type: 'application/javascript'\n});\n\n// Props that are allowed to change dynamicly\nvar propsKeys = ['delay', 'legacyMode', 'facingMode'];\n\nmodule.exports = (_temp = _class = function (_Component) {\n _inherits(Reader, _Component);\n\n function Reader(props) {\n _classCallCheck(this, Reader);\n\n var _this = _possibleConstructorReturn(this, (Reader.__proto__ || Object.getPrototypeOf(Reader)).call(this, props));\n\n _this.els = {};\n\n\n _this.state = {\n mirrorVideo: false\n\n // Bind function to the class\n };_this.initiate = _this.initiate.bind(_this);\n _this.initiateLegacyMode = _this.initiateLegacyMode.bind(_this);\n _this.check = _this.check.bind(_this);\n _this.handleVideo = _this.handleVideo.bind(_this);\n _this.handleLoadStart = _this.handleLoadStart.bind(_this);\n _this.handleInputChange = _this.handleInputChange.bind(_this);\n _this.clearComponent = _this.clearComponent.bind(_this);\n _this.handleReaderLoad = _this.handleReaderLoad.bind(_this);\n _this.openImageDialog = _this.openImageDialog.bind(_this);\n _this.handleWorkerMessage = _this.handleWorkerMessage.bind(_this);\n _this.setRefFactory = _this.setRefFactory.bind(_this);\n return _this;\n }\n\n _createClass(Reader, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // Initiate web worker execute handler according to mode.\n this.worker = new Worker(URL.createObjectURL(workerBlob));\n this.worker.onmessage = this.handleWorkerMessage;\n\n if (!this.props.legacyMode) {\n this.initiate();\n } else {\n this.initiateLegacyMode();\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // React according to change in props\n var changedProps = havePropsChanged(this.props, nextProps, propsKeys);\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = changedProps[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n\n if (prop == 'facingMode') {\n this.clearComponent();\n this.initiate(nextProps);\n break;\n } else if (prop == 'delay') {\n if (this.props.delay == false && !nextProps.legacyMode) {\n this.timeout = setTimeout(this.check, nextProps.delay);\n }\n if (nextProps.delay == false) {\n clearTimeout(this.timeout);\n }\n } else if (prop == 'legacyMode') {\n if (this.props.legacyMode && !nextProps.legacyMode) {\n this.clearComponent();\n this.initiate(nextProps);\n } else {\n this.clearComponent();\n this.componentDidUpdate = this.initiateLegacyMode;\n }\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }, {\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps, nextState) {\n if (nextState !== this.state) {\n return true;\n }\n\n // Only render when the `propsKeys` have changed.\n var changedProps = havePropsChanged(this.props, nextProps, propsKeys);\n return changedProps.length > 0;\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n // Stop web-worker and clear the component\n if (this.worker) {\n this.worker.terminate();\n this.worker = undefined;\n }\n this.clearComponent();\n }\n }, {\n key: 'clearComponent',\n value: function clearComponent() {\n // Remove all event listeners and variables\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n if (this.stopCamera) {\n this.stopCamera();\n }\n if (this.reader) {\n this.reader.removeEventListener('load', this.handleReaderLoad);\n }\n if (this.els.img) {\n this.els.img.removeEventListener('load', this.check);\n }\n }\n }, {\n key: 'initiate',\n value: function initiate() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var onError = props.onError,\n facingMode = props.facingMode;\n\n // Check browser facingMode constraint support\n // Firefox ignores facingMode or deviceId constraints\n\n var isFirefox = /firefox/i.test(navigator.userAgent);\n var supported = {};\n if (navigator.mediaDevices && typeof navigator.mediaDevices.getSupportedConstraints === 'function') {\n supported = navigator.mediaDevices.getSupportedConstraints();\n }\n var constraints = {};\n\n if (supported.facingMode) {\n constraints.facingMode = { ideal: facingMode };\n }\n if (supported.frameRate) {\n constraints.frameRate = { ideal: 25, min: 10 };\n }\n\n var vConstraintsPromise = supported.facingMode || isFirefox ? Promise.resolve(props.constraints || constraints) : getDeviceId(facingMode).then(function (deviceId) {\n return Object.assign({}, { deviceId: deviceId }, props.constraints);\n });\n\n vConstraintsPromise.then(function (video) {\n return navigator.mediaDevices.getUserMedia({ video: video });\n }).then(this.handleVideo).catch(onError);\n }\n }, {\n key: 'handleVideo',\n value: function handleVideo(stream) {\n var preview = this.els.preview;\n var facingMode = this.props.facingMode;\n\n // Preview element hasn't been rendered so wait for it.\n\n if (!preview) {\n return setTimeout(this.handleVideo, 200, stream);\n }\n\n // Handle different browser implementations of MediaStreams as src\n if ((preview || {}).srcObject !== undefined) {\n preview.srcObject = stream;\n } else if (preview.mozSrcObject !== undefined) {\n preview.mozSrcObject = stream;\n } else if (window.URL.createObjectURL) {\n preview.src = window.URL.createObjectURL(stream);\n } else if (window.webkitURL) {\n preview.src = window.webkitURL.createObjectURL(stream);\n } else {\n preview.src = stream;\n }\n\n // IOS play in fullscreen\n preview.playsInline = true;\n\n var streamTrack = stream.getTracks()[0];\n // Assign `stopCamera` so the track can be stopped once component is cleared\n this.stopCamera = streamTrack.stop.bind(streamTrack);\n\n preview.addEventListener('loadstart', this.handleLoadStart);\n\n this.setState({ mirrorVideo: facingMode == 'user', streamLabel: streamTrack.label });\n }\n }, {\n key: 'handleLoadStart',\n value: function handleLoadStart() {\n var _props = this.props,\n delay = _props.delay,\n onLoad = _props.onLoad;\n var _state = this.state,\n mirrorVideo = _state.mirrorVideo,\n streamLabel = _state.streamLabel;\n\n var preview = this.els.preview;\n preview.play();\n\n if (typeof onLoad == 'function') {\n onLoad({ mirrorVideo: mirrorVideo, streamLabel: streamLabel });\n }\n\n if (typeof delay == 'number') {\n this.timeout = setTimeout(this.check, delay);\n }\n\n // Some browsers call loadstart continuously\n preview.removeEventListener('loadstart', this.handleLoadStart);\n }\n }, {\n key: 'check',\n value: function check() {\n var _props2 = this.props,\n legacyMode = _props2.legacyMode,\n resolution = _props2.resolution,\n delay = _props2.delay;\n var _els = this.els,\n preview = _els.preview,\n canvas = _els.canvas,\n img = _els.img;\n\n // Get image/video dimensions\n\n var width = Math.floor(legacyMode ? img.naturalWidth : preview.videoWidth);\n var height = Math.floor(legacyMode ? img.naturalHeight : preview.videoHeight);\n\n // Canvas draw offsets\n var hozOffset = 0;\n var vertOffset = 0;\n\n // Scale image to correct resolution\n if (legacyMode) {\n // Keep image aspect ratio\n var greatestSize = width > height ? width : height;\n var ratio = resolution / greatestSize;\n\n height = ratio * height;\n width = ratio * width;\n\n canvas.width = width;\n canvas.height = height;\n } else {\n // Crop image to fit 1:1 aspect ratio\n var smallestSize = width < height ? width : height;\n var _ratio = resolution / smallestSize;\n\n height = _ratio * height;\n width = _ratio * width;\n\n vertOffset = (height - resolution) / 2 * -1;\n hozOffset = (width - resolution) / 2 * -1;\n\n canvas.width = resolution;\n canvas.height = resolution;\n }\n\n var previewIsPlaying = preview && preview.readyState === preview.HAVE_ENOUGH_DATA;\n\n if (legacyMode || previewIsPlaying) {\n var ctx = canvas.getContext('2d');\n\n ctx.drawImage(legacyMode ? img : preview, hozOffset, vertOffset, width, height);\n\n var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n // Send data to web-worker\n this.worker.postMessage(imageData);\n } else {\n // Preview not ready -> check later\n this.timeout = setTimeout(this.check, delay);\n }\n }\n }, {\n key: 'handleWorkerMessage',\n value: function handleWorkerMessage(e) {\n var _props3 = this.props,\n onScan = _props3.onScan,\n legacyMode = _props3.legacyMode,\n delay = _props3.delay;\n\n var decoded = e.data;\n onScan(decoded || null);\n\n if (!legacyMode && typeof delay == 'number' && this.worker) {\n this.timeout = setTimeout(this.check, delay);\n }\n }\n }, {\n key: 'initiateLegacyMode',\n value: function initiateLegacyMode() {\n this.reader = new FileReader();\n this.reader.addEventListener('load', this.handleReaderLoad);\n this.els.img.addEventListener('load', this.check, false);\n\n // Reset componentDidUpdate\n this.componentDidUpdate = undefined;\n\n if (typeof this.props.onLoad == 'function') {\n this.props.onLoad();\n }\n }\n }, {\n key: 'handleInputChange',\n value: function handleInputChange(e) {\n var selectedImg = e.target.files[0];\n this.reader.readAsDataURL(selectedImg);\n }\n }, {\n key: 'handleReaderLoad',\n value: function handleReaderLoad(e) {\n // Set selected image blob as img source\n this.els.img.src = e.target.result;\n }\n }, {\n key: 'openImageDialog',\n value: function openImageDialog() {\n // Function to be executed by parent in user action context to trigger img file uploader\n this.els.input.click();\n }\n }, {\n key: 'setRefFactory',\n value: function setRefFactory(key) {\n var _this2 = this;\n\n return function (element) {\n _this2.els[key] = element;\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _props4 = this.props,\n style = _props4.style,\n className = _props4.className,\n onImageLoad = _props4.onImageLoad,\n legacyMode = _props4.legacyMode,\n showViewFinder = _props4.showViewFinder,\n facingMode = _props4.facingMode;\n\n\n var containerStyle = {\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n paddingTop: '100%'\n };\n var hiddenStyle = { display: 'none' };\n var previewStyle = {\n top: 0,\n left: 0,\n display: 'block',\n position: 'absolute',\n overflow: 'hidden',\n width: '100%',\n height: '100%'\n };\n var videoPreviewStyle = _extends({}, previewStyle, {\n objectFit: 'cover',\n transform: this.state.mirrorVideo ? 'scaleX(-1)' : undefined\n });\n var imgPreviewStyle = _extends({}, previewStyle, {\n objectFit: 'scale-down'\n });\n\n var viewFinderStyle = {\n top: 0,\n left: 0,\n zIndex: 1,\n boxSizing: 'border-box',\n border: '50px solid rgba(0, 0, 0, 0.3)',\n boxShadow: 'inset 0 0 0 5px rgba(255, 0, 0, 0.5)',\n position: 'absolute',\n width: '100%',\n height: '100%'\n };\n\n return React.createElement(\n 'section',\n { className: className, style: style },\n React.createElement(\n 'section',\n { style: containerStyle },\n !legacyMode && showViewFinder ? React.createElement('div', { style: viewFinderStyle }) : null,\n legacyMode ? React.createElement('input', {\n style: hiddenStyle,\n type: 'file',\n accept: 'image/*',\n ref: this.setRefFactory('input'),\n onChange: this.handleInputChange\n }) : null,\n legacyMode ? React.createElement('img', { style: imgPreviewStyle, ref: this.setRefFactory('img'), onLoad: onImageLoad }) : React.createElement('video', { style: videoPreviewStyle, ref: this.setRefFactory('preview') }),\n React.createElement('canvas', { style: hiddenStyle, ref: this.setRefFactory('canvas') })\n )\n );\n }\n }]);\n\n return Reader;\n}(Component), _class.propTypes = {\n onScan: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n onLoad: PropTypes.func,\n onImageLoad: PropTypes.func,\n delay: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n facingMode: PropTypes.oneOf(['user', 'environment']),\n legacyMode: PropTypes.bool,\n resolution: PropTypes.number,\n showViewFinder: PropTypes.bool,\n style: PropTypes.any,\n className: PropTypes.string,\n constraints: PropTypes.object\n}, _class.defaultProps = {\n delay: 500,\n resolution: 600,\n facingMode: 'environment',\n showViewFinder: true,\n constraints: null\n}, _temp);","/*\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\nvar SDPUtils = require('sdp');\n\nfunction fixStatsType(stat) {\n return {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[stat.type] || stat.type;\n}\n\nfunction writeMediaSection(transceiver, caps, type, stream, dtlsRole) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : dtlsRole || 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n if (transceiver.rtpSender) {\n var trackId = transceiver.rtpSender._initialTrackId ||\n transceiver.rtpSender.track.id;\n transceiver.rtpSender._initialTrackId = trackId;\n // spec.\n var msid = 'msid:' + (stream ? stream.id : '-') + ' ' +\n trackId + '\\r\\n';\n sdp += 'a=' + msid;\n // for Chrome. Legacy should no longer be required.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n\n // RTX\n if (transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' ' + msid;\n sdp += 'a=ssrc-group:FID ' +\n transceiver.sendEncodingParameters[0].ssrc + ' ' +\n transceiver.sendEncodingParameters[0].rtx.ssrc +\n '\\r\\n';\n }\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n }\n return sdp;\n}\n\n// Edge does not like\n// 1) stun: filtered after 14393 unless ?transport=udp is present\n// 2) turn: that does not have all of turn:host:port?transport=udp\n// 3) turn: with ipv6 addresses\n// 4) turn: occurring muliple times\nfunction filterIceServers(iceServers, edgeVersion) {\n var hasTurn = false;\n iceServers = JSON.parse(JSON.stringify(iceServers));\n return iceServers.filter(function(server) {\n if (server && (server.urls || server.url)) {\n var urls = server.urls || server.url;\n if (server.url && !server.urls) {\n console.warn('RTCIceServer.url is deprecated! Use urls instead.');\n }\n var isString = typeof urls === 'string';\n if (isString) {\n urls = [urls];\n }\n urls = urls.filter(function(url) {\n var validTurn = url.indexOf('turn:') === 0 &&\n url.indexOf('transport=udp') !== -1 &&\n url.indexOf('turn:[') === -1 &&\n !hasTurn;\n\n if (validTurn) {\n hasTurn = true;\n return true;\n }\n return url.indexOf('stun:') === 0 && edgeVersion >= 14393 &&\n url.indexOf('?transport=udp') === -1;\n });\n\n delete server.url;\n server.urls = isString ? urls[0] : urls;\n return !!urls.length;\n }\n });\n}\n\n// Determines the intersection of local and remote capabilities.\nfunction getCommonCapabilities(localCapabilities, remoteCapabilities) {\n var commonCapabilities = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: []\n };\n\n var findCodecByPayloadType = function(pt, codecs) {\n pt = parseInt(pt, 10);\n for (var i = 0; i < codecs.length; i++) {\n if (codecs[i].payloadType === pt ||\n codecs[i].preferredPayloadType === pt) {\n return codecs[i];\n }\n }\n };\n\n var rtxCapabilityMatches = function(lRtx, rRtx, lCodecs, rCodecs) {\n var lCodec = findCodecByPayloadType(lRtx.parameters.apt, lCodecs);\n var rCodec = findCodecByPayloadType(rRtx.parameters.apt, rCodecs);\n return lCodec && rCodec &&\n lCodec.name.toLowerCase() === rCodec.name.toLowerCase();\n };\n\n localCapabilities.codecs.forEach(function(lCodec) {\n for (var i = 0; i < remoteCapabilities.codecs.length; i++) {\n var rCodec = remoteCapabilities.codecs[i];\n if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() &&\n lCodec.clockRate === rCodec.clockRate) {\n if (lCodec.name.toLowerCase() === 'rtx' &&\n lCodec.parameters && rCodec.parameters.apt) {\n // for RTX we need to find the local rtx that has a apt\n // which points to the same local codec as the remote one.\n if (!rtxCapabilityMatches(lCodec, rCodec,\n localCapabilities.codecs, remoteCapabilities.codecs)) {\n continue;\n }\n }\n rCodec = JSON.parse(JSON.stringify(rCodec)); // deepcopy\n // number of channels is the highest common number of channels\n rCodec.numChannels = Math.min(lCodec.numChannels,\n rCodec.numChannels);\n // push rCodec so we reply with offerer payload type\n commonCapabilities.codecs.push(rCodec);\n\n // determine common feedback mechanisms\n rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) {\n for (var j = 0; j < lCodec.rtcpFeedback.length; j++) {\n if (lCodec.rtcpFeedback[j].type === fb.type &&\n lCodec.rtcpFeedback[j].parameter === fb.parameter) {\n return true;\n }\n }\n return false;\n });\n // FIXME: also need to determine .parameters\n // see https://github.com/openpeer/ortc/issues/569\n break;\n }\n }\n });\n\n localCapabilities.headerExtensions.forEach(function(lHeaderExtension) {\n for (var i = 0; i < remoteCapabilities.headerExtensions.length;\n i++) {\n var rHeaderExtension = remoteCapabilities.headerExtensions[i];\n if (lHeaderExtension.uri === rHeaderExtension.uri) {\n commonCapabilities.headerExtensions.push(rHeaderExtension);\n break;\n }\n }\n });\n\n // FIXME: fecMechanisms\n return commonCapabilities;\n}\n\n// is action=setLocalDescription with type allowed in signalingState\nfunction isActionAllowedInSignalingState(action, type, signalingState) {\n return {\n offer: {\n setLocalDescription: ['stable', 'have-local-offer'],\n setRemoteDescription: ['stable', 'have-remote-offer']\n },\n answer: {\n setLocalDescription: ['have-remote-offer', 'have-local-pranswer'],\n setRemoteDescription: ['have-local-offer', 'have-remote-pranswer']\n }\n }[type][action].indexOf(signalingState) !== -1;\n}\n\nfunction maybeAddCandidate(iceTransport, candidate) {\n // Edge's internal representation adds some fields therefore\n // not all fieldŅ• are taken into account.\n var alreadyAdded = iceTransport.getRemoteCandidates()\n .find(function(remoteCandidate) {\n return candidate.foundation === remoteCandidate.foundation &&\n candidate.ip === remoteCandidate.ip &&\n candidate.port === remoteCandidate.port &&\n candidate.priority === remoteCandidate.priority &&\n candidate.protocol === remoteCandidate.protocol &&\n candidate.type === remoteCandidate.type;\n });\n if (!alreadyAdded) {\n iceTransport.addRemoteCandidate(candidate);\n }\n return !alreadyAdded;\n}\n\n\nfunction makeError(name, description) {\n var e = new Error(description);\n e.name = name;\n // legacy error codes from https://heycam.github.io/webidl/#idl-DOMException-error-names\n e.code = {\n NotSupportedError: 9,\n InvalidStateError: 11,\n InvalidAccessError: 15,\n TypeError: undefined,\n OperationError: undefined\n }[name];\n return e;\n}\n\nmodule.exports = function(window, edgeVersion) {\n // https://w3c.github.io/mediacapture-main/#mediastream\n // Helper function to add the track to the stream and\n // dispatch the event ourselves.\n function addTrackToStreamAndFireEvent(track, stream) {\n stream.addTrack(track);\n stream.dispatchEvent(new window.MediaStreamTrackEvent('addtrack',\n {track: track}));\n }\n\n function removeTrackFromStreamAndFireEvent(track, stream) {\n stream.removeTrack(track);\n stream.dispatchEvent(new window.MediaStreamTrackEvent('removetrack',\n {track: track}));\n }\n\n function fireAddTrack(pc, track, receiver, streams) {\n var trackEvent = new Event('track');\n trackEvent.track = track;\n trackEvent.receiver = receiver;\n trackEvent.transceiver = {receiver: receiver};\n trackEvent.streams = streams;\n window.setTimeout(function() {\n pc._dispatchEvent('track', trackEvent);\n });\n }\n\n var RTCPeerConnection = function(config) {\n var pc = this;\n\n var _eventTarget = document.createDocumentFragment();\n ['addEventListener', 'removeEventListener', 'dispatchEvent']\n .forEach(function(method) {\n pc[method] = _eventTarget[method].bind(_eventTarget);\n });\n\n this.canTrickleIceCandidates = null;\n\n this.needNegotiation = false;\n\n this.localStreams = [];\n this.remoteStreams = [];\n\n this._localDescription = null;\n this._remoteDescription = null;\n\n this.signalingState = 'stable';\n this.iceConnectionState = 'new';\n this.connectionState = 'new';\n this.iceGatheringState = 'new';\n\n config = JSON.parse(JSON.stringify(config || {}));\n\n this.usingBundle = config.bundlePolicy === 'max-bundle';\n if (config.rtcpMuxPolicy === 'negotiate') {\n throw(makeError('NotSupportedError',\n 'rtcpMuxPolicy \\'negotiate\\' is not supported'));\n } else if (!config.rtcpMuxPolicy) {\n config.rtcpMuxPolicy = 'require';\n }\n\n switch (config.iceTransportPolicy) {\n case 'all':\n case 'relay':\n break;\n default:\n config.iceTransportPolicy = 'all';\n break;\n }\n\n switch (config.bundlePolicy) {\n case 'balanced':\n case 'max-compat':\n case 'max-bundle':\n break;\n default:\n config.bundlePolicy = 'balanced';\n break;\n }\n\n config.iceServers = filterIceServers(config.iceServers || [], edgeVersion);\n\n this._iceGatherers = [];\n if (config.iceCandidatePoolSize) {\n for (var i = config.iceCandidatePoolSize; i > 0; i--) {\n this._iceGatherers.push(new window.RTCIceGatherer({\n iceServers: config.iceServers,\n gatherPolicy: config.iceTransportPolicy\n }));\n }\n } else {\n config.iceCandidatePoolSize = 0;\n }\n\n this._config = config;\n\n // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ...\n // everything that is needed to describe a SDP m-line.\n this.transceivers = [];\n\n this._sdpSessionId = SDPUtils.generateSessionId();\n this._sdpSessionVersion = 0;\n\n this._dtlsRole = undefined; // role for a=setup to use in answers.\n\n this._isClosed = false;\n };\n\n Object.defineProperty(RTCPeerConnection.prototype, 'localDescription', {\n configurable: true,\n get: function() {\n return this._localDescription;\n }\n });\n Object.defineProperty(RTCPeerConnection.prototype, 'remoteDescription', {\n configurable: true,\n get: function() {\n return this._remoteDescription;\n }\n });\n\n // set up event handlers on prototype\n RTCPeerConnection.prototype.onicecandidate = null;\n RTCPeerConnection.prototype.onaddstream = null;\n RTCPeerConnection.prototype.ontrack = null;\n RTCPeerConnection.prototype.onremovestream = null;\n RTCPeerConnection.prototype.onsignalingstatechange = null;\n RTCPeerConnection.prototype.oniceconnectionstatechange = null;\n RTCPeerConnection.prototype.onconnectionstatechange = null;\n RTCPeerConnection.prototype.onicegatheringstatechange = null;\n RTCPeerConnection.prototype.onnegotiationneeded = null;\n RTCPeerConnection.prototype.ondatachannel = null;\n\n RTCPeerConnection.prototype._dispatchEvent = function(name, event) {\n if (this._isClosed) {\n return;\n }\n this.dispatchEvent(event);\n if (typeof this['on' + name] === 'function') {\n this['on' + name](event);\n }\n };\n\n RTCPeerConnection.prototype._emitGatheringStateChange = function() {\n var event = new Event('icegatheringstatechange');\n this._dispatchEvent('icegatheringstatechange', event);\n };\n\n RTCPeerConnection.prototype.getConfiguration = function() {\n return this._config;\n };\n\n RTCPeerConnection.prototype.getLocalStreams = function() {\n return this.localStreams;\n };\n\n RTCPeerConnection.prototype.getRemoteStreams = function() {\n return this.remoteStreams;\n };\n\n // internal helper to create a transceiver object.\n // (which is not yet the same as the WebRTC 1.0 transceiver)\n RTCPeerConnection.prototype._createTransceiver = function(kind, doNotAdd) {\n var hasBundleTransport = this.transceivers.length > 0;\n var transceiver = {\n track: null,\n iceGatherer: null,\n iceTransport: null,\n dtlsTransport: null,\n localCapabilities: null,\n remoteCapabilities: null,\n rtpSender: null,\n rtpReceiver: null,\n kind: kind,\n mid: null,\n sendEncodingParameters: null,\n recvEncodingParameters: null,\n stream: null,\n associatedRemoteMediaStreams: [],\n wantReceive: true\n };\n if (this.usingBundle && hasBundleTransport) {\n transceiver.iceTransport = this.transceivers[0].iceTransport;\n transceiver.dtlsTransport = this.transceivers[0].dtlsTransport;\n } else {\n var transports = this._createIceAndDtlsTransports();\n transceiver.iceTransport = transports.iceTransport;\n transceiver.dtlsTransport = transports.dtlsTransport;\n }\n if (!doNotAdd) {\n this.transceivers.push(transceiver);\n }\n return transceiver;\n };\n\n RTCPeerConnection.prototype.addTrack = function(track, stream) {\n if (this._isClosed) {\n throw makeError('InvalidStateError',\n 'Attempted to call addTrack on a closed peerconnection.');\n }\n\n var alreadyExists = this.transceivers.find(function(s) {\n return s.track === track;\n });\n\n if (alreadyExists) {\n throw makeError('InvalidAccessError', 'Track already exists.');\n }\n\n var transceiver;\n for (var i = 0; i < this.transceivers.length; i++) {\n if (!this.transceivers[i].track &&\n this.transceivers[i].kind === track.kind) {\n transceiver = this.transceivers[i];\n }\n }\n if (!transceiver) {\n transceiver = this._createTransceiver(track.kind);\n }\n\n this._maybeFireNegotiationNeeded();\n\n if (this.localStreams.indexOf(stream) === -1) {\n this.localStreams.push(stream);\n }\n\n transceiver.track = track;\n transceiver.stream = stream;\n transceiver.rtpSender = new window.RTCRtpSender(track,\n transceiver.dtlsTransport);\n return transceiver.rtpSender;\n };\n\n RTCPeerConnection.prototype.addStream = function(stream) {\n var pc = this;\n if (edgeVersion >= 15025) {\n stream.getTracks().forEach(function(track) {\n pc.addTrack(track, stream);\n });\n } else {\n // Clone is necessary for local demos mostly, attaching directly\n // to two different senders does not work (build 10547).\n // Fixed in 15025 (or earlier)\n var clonedStream = stream.clone();\n stream.getTracks().forEach(function(track, idx) {\n var clonedTrack = clonedStream.getTracks()[idx];\n track.addEventListener('enabled', function(event) {\n clonedTrack.enabled = event.enabled;\n });\n });\n clonedStream.getTracks().forEach(function(track) {\n pc.addTrack(track, clonedStream);\n });\n }\n };\n\n RTCPeerConnection.prototype.removeTrack = function(sender) {\n if (this._isClosed) {\n throw makeError('InvalidStateError',\n 'Attempted to call removeTrack on a closed peerconnection.');\n }\n\n if (!(sender instanceof window.RTCRtpSender)) {\n throw new TypeError('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.');\n }\n\n var transceiver = this.transceivers.find(function(t) {\n return t.rtpSender === sender;\n });\n\n if (!transceiver) {\n throw makeError('InvalidAccessError',\n 'Sender was not created by this connection.');\n }\n var stream = transceiver.stream;\n\n transceiver.rtpSender.stop();\n transceiver.rtpSender = null;\n transceiver.track = null;\n transceiver.stream = null;\n\n // remove the stream from the set of local streams\n var localStreams = this.transceivers.map(function(t) {\n return t.stream;\n });\n if (localStreams.indexOf(stream) === -1 &&\n this.localStreams.indexOf(stream) > -1) {\n this.localStreams.splice(this.localStreams.indexOf(stream), 1);\n }\n\n this._maybeFireNegotiationNeeded();\n };\n\n RTCPeerConnection.prototype.removeStream = function(stream) {\n var pc = this;\n stream.getTracks().forEach(function(track) {\n var sender = pc.getSenders().find(function(s) {\n return s.track === track;\n });\n if (sender) {\n pc.removeTrack(sender);\n }\n });\n };\n\n RTCPeerConnection.prototype.getSenders = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpSender;\n })\n .map(function(transceiver) {\n return transceiver.rtpSender;\n });\n };\n\n RTCPeerConnection.prototype.getReceivers = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpReceiver;\n })\n .map(function(transceiver) {\n return transceiver.rtpReceiver;\n });\n };\n\n\n RTCPeerConnection.prototype._createIceGatherer = function(sdpMLineIndex,\n usingBundle) {\n var pc = this;\n if (usingBundle && sdpMLineIndex > 0) {\n return this.transceivers[0].iceGatherer;\n } else if (this._iceGatherers.length) {\n return this._iceGatherers.shift();\n }\n var iceGatherer = new window.RTCIceGatherer({\n iceServers: this._config.iceServers,\n gatherPolicy: this._config.iceTransportPolicy\n });\n Object.defineProperty(iceGatherer, 'state',\n {value: 'new', writable: true}\n );\n\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents = [];\n this.transceivers[sdpMLineIndex].bufferCandidates = function(event) {\n var end = !event.candidate || Object.keys(event.candidate).length === 0;\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n iceGatherer.state = end ? 'completed' : 'gathering';\n if (pc.transceivers[sdpMLineIndex].bufferedCandidateEvents !== null) {\n pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event);\n }\n };\n iceGatherer.addEventListener('localcandidate',\n this.transceivers[sdpMLineIndex].bufferCandidates);\n return iceGatherer;\n };\n\n // start gathering from an RTCIceGatherer.\n RTCPeerConnection.prototype._gather = function(mid, sdpMLineIndex) {\n var pc = this;\n var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n if (iceGatherer.onlocalcandidate) {\n return;\n }\n var bufferedCandidateEvents =\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents;\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents = null;\n iceGatherer.removeEventListener('localcandidate',\n this.transceivers[sdpMLineIndex].bufferCandidates);\n iceGatherer.onlocalcandidate = function(evt) {\n if (pc.usingBundle && sdpMLineIndex > 0) {\n // if we know that we use bundle we can drop candidates with\n // Ņ•dpMLineIndex > 0. If we don't do this then our state gets\n // confused since we dispose the extra ice gatherer.\n return;\n }\n var event = new Event('icecandidate');\n event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex};\n\n var cand = evt.candidate;\n // Edge emits an empty object for RTCIceCandidateCompleteâ€Ĩ\n var end = !cand || Object.keys(cand).length === 0;\n if (end) {\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n if (iceGatherer.state === 'new' || iceGatherer.state === 'gathering') {\n iceGatherer.state = 'completed';\n }\n } else {\n if (iceGatherer.state === 'new') {\n iceGatherer.state = 'gathering';\n }\n // RTCIceCandidate doesn't have a component, needs to be added\n cand.component = 1;\n // also the usernameFragment. TODO: update SDP to take both variants.\n cand.ufrag = iceGatherer.getLocalParameters().usernameFragment;\n\n var serializedCandidate = SDPUtils.writeCandidate(cand);\n event.candidate = Object.assign(event.candidate,\n SDPUtils.parseCandidate(serializedCandidate));\n\n event.candidate.candidate = serializedCandidate;\n event.candidate.toJSON = function() {\n return {\n candidate: event.candidate.candidate,\n sdpMid: event.candidate.sdpMid,\n sdpMLineIndex: event.candidate.sdpMLineIndex,\n usernameFragment: event.candidate.usernameFragment\n };\n };\n }\n\n // update local description.\n var sections = SDPUtils.getMediaSections(pc._localDescription.sdp);\n if (!end) {\n sections[event.candidate.sdpMLineIndex] +=\n 'a=' + event.candidate.candidate + '\\r\\n';\n } else {\n sections[event.candidate.sdpMLineIndex] +=\n 'a=end-of-candidates\\r\\n';\n }\n pc._localDescription.sdp =\n SDPUtils.getDescription(pc._localDescription.sdp) +\n sections.join('');\n var complete = pc.transceivers.every(function(transceiver) {\n return transceiver.iceGatherer &&\n transceiver.iceGatherer.state === 'completed';\n });\n\n if (pc.iceGatheringState !== 'gathering') {\n pc.iceGatheringState = 'gathering';\n pc._emitGatheringStateChange();\n }\n\n // Emit candidate. Also emit null candidate when all gatherers are\n // complete.\n if (!end) {\n pc._dispatchEvent('icecandidate', event);\n }\n if (complete) {\n pc._dispatchEvent('icecandidate', new Event('icecandidate'));\n pc.iceGatheringState = 'complete';\n pc._emitGatheringStateChange();\n }\n };\n\n // emit already gathered candidates.\n window.setTimeout(function() {\n bufferedCandidateEvents.forEach(function(e) {\n iceGatherer.onlocalcandidate(e);\n });\n }, 0);\n };\n\n // Create ICE transport and DTLS transport.\n RTCPeerConnection.prototype._createIceAndDtlsTransports = function() {\n var pc = this;\n var iceTransport = new window.RTCIceTransport(null);\n iceTransport.onicestatechange = function() {\n pc._updateIceConnectionState();\n pc._updateConnectionState();\n };\n\n var dtlsTransport = new window.RTCDtlsTransport(iceTransport);\n dtlsTransport.ondtlsstatechange = function() {\n pc._updateConnectionState();\n };\n dtlsTransport.onerror = function() {\n // onerror does not set state to failed by itself.\n Object.defineProperty(dtlsTransport, 'state',\n {value: 'failed', writable: true});\n pc._updateConnectionState();\n };\n\n return {\n iceTransport: iceTransport,\n dtlsTransport: dtlsTransport\n };\n };\n\n // Destroy ICE gatherer, ICE transport and DTLS transport.\n // Without triggering the callbacks.\n RTCPeerConnection.prototype._disposeIceAndDtlsTransports = function(\n sdpMLineIndex) {\n var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n if (iceGatherer) {\n delete iceGatherer.onlocalcandidate;\n delete this.transceivers[sdpMLineIndex].iceGatherer;\n }\n var iceTransport = this.transceivers[sdpMLineIndex].iceTransport;\n if (iceTransport) {\n delete iceTransport.onicestatechange;\n delete this.transceivers[sdpMLineIndex].iceTransport;\n }\n var dtlsTransport = this.transceivers[sdpMLineIndex].dtlsTransport;\n if (dtlsTransport) {\n delete dtlsTransport.ondtlsstatechange;\n delete dtlsTransport.onerror;\n delete this.transceivers[sdpMLineIndex].dtlsTransport;\n }\n };\n\n // Start the RTP Sender and Receiver for a transceiver.\n RTCPeerConnection.prototype._transceive = function(transceiver,\n send, recv) {\n var params = getCommonCapabilities(transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n if (send && transceiver.rtpSender) {\n params.encodings = transceiver.sendEncodingParameters;\n params.rtcp = {\n cname: SDPUtils.localCName,\n compound: transceiver.rtcpParameters.compound\n };\n if (transceiver.recvEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc;\n }\n transceiver.rtpSender.send(params);\n }\n if (recv && transceiver.rtpReceiver && params.codecs.length > 0) {\n // remove RTX field in Edge 14942\n if (transceiver.kind === 'video'\n && transceiver.recvEncodingParameters\n && edgeVersion < 15019) {\n transceiver.recvEncodingParameters.forEach(function(p) {\n delete p.rtx;\n });\n }\n if (transceiver.recvEncodingParameters.length) {\n params.encodings = transceiver.recvEncodingParameters;\n } else {\n params.encodings = [{}];\n }\n params.rtcp = {\n compound: transceiver.rtcpParameters.compound\n };\n if (transceiver.rtcpParameters.cname) {\n params.rtcp.cname = transceiver.rtcpParameters.cname;\n }\n if (transceiver.sendEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc;\n }\n transceiver.rtpReceiver.receive(params);\n }\n };\n\n RTCPeerConnection.prototype.setLocalDescription = function(description) {\n var pc = this;\n\n // Note: pranswer is not supported.\n if (['offer', 'answer'].indexOf(description.type) === -1) {\n return Promise.reject(makeError('TypeError',\n 'Unsupported type \"' + description.type + '\"'));\n }\n\n if (!isActionAllowedInSignalingState('setLocalDescription',\n description.type, pc.signalingState) || pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not set local ' + description.type +\n ' in state ' + pc.signalingState));\n }\n\n var sections;\n var sessionpart;\n if (description.type === 'offer') {\n // VERY limited support for SDP munging. Limited to:\n // * changing the order of codecs\n sections = SDPUtils.splitSections(description.sdp);\n sessionpart = sections.shift();\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var caps = SDPUtils.parseRtpParameters(mediaSection);\n pc.transceivers[sdpMLineIndex].localCapabilities = caps;\n });\n\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n pc._gather(transceiver.mid, sdpMLineIndex);\n });\n } else if (description.type === 'answer') {\n sections = SDPUtils.splitSections(pc._remoteDescription.sdp);\n sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var transceiver = pc.transceivers[sdpMLineIndex];\n var iceGatherer = transceiver.iceGatherer;\n var iceTransport = transceiver.iceTransport;\n var dtlsTransport = transceiver.dtlsTransport;\n var localCapabilities = transceiver.localCapabilities;\n var remoteCapabilities = transceiver.remoteCapabilities;\n\n // treat bundle-only as not-rejected.\n var rejected = SDPUtils.isRejected(mediaSection) &&\n SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n\n if (!rejected && !transceiver.rejected) {\n var remoteIceParameters = SDPUtils.getIceParameters(\n mediaSection, sessionpart);\n var remoteDtlsParameters = SDPUtils.getDtlsParameters(\n mediaSection, sessionpart);\n if (isIceLite) {\n remoteDtlsParameters.role = 'server';\n }\n\n if (!pc.usingBundle || sdpMLineIndex === 0) {\n pc._gather(transceiver.mid, sdpMLineIndex);\n if (iceTransport.state === 'new') {\n iceTransport.start(iceGatherer, remoteIceParameters,\n isIceLite ? 'controlling' : 'controlled');\n }\n if (dtlsTransport.state === 'new') {\n dtlsTransport.start(remoteDtlsParameters);\n }\n }\n\n // Calculate intersection of capabilities.\n var params = getCommonCapabilities(localCapabilities,\n remoteCapabilities);\n\n // Start the RTCRtpSender. The RTCRtpReceiver for this\n // transceiver has already been started in setRemoteDescription.\n pc._transceive(transceiver,\n params.codecs.length > 0,\n false);\n }\n });\n }\n\n pc._localDescription = {\n type: description.type,\n sdp: description.sdp\n };\n if (description.type === 'offer') {\n pc._updateSignalingState('have-local-offer');\n } else {\n pc._updateSignalingState('stable');\n }\n\n return Promise.resolve();\n };\n\n RTCPeerConnection.prototype.setRemoteDescription = function(description) {\n var pc = this;\n\n // Note: pranswer is not supported.\n if (['offer', 'answer'].indexOf(description.type) === -1) {\n return Promise.reject(makeError('TypeError',\n 'Unsupported type \"' + description.type + '\"'));\n }\n\n if (!isActionAllowedInSignalingState('setRemoteDescription',\n description.type, pc.signalingState) || pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not set remote ' + description.type +\n ' in state ' + pc.signalingState));\n }\n\n var streams = {};\n pc.remoteStreams.forEach(function(stream) {\n streams[stream.id] = stream;\n });\n var receiverList = [];\n var sections = SDPUtils.splitSections(description.sdp);\n var sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n var usingBundle = SDPUtils.matchPrefix(sessionpart,\n 'a=group:BUNDLE ').length > 0;\n pc.usingBundle = usingBundle;\n var iceOptions = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-options:')[0];\n if (iceOptions) {\n pc.canTrickleIceCandidates = iceOptions.substr(14).split(' ')\n .indexOf('trickle') >= 0;\n } else {\n pc.canTrickleIceCandidates = false;\n }\n\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var lines = SDPUtils.splitLines(mediaSection);\n var kind = SDPUtils.getKind(mediaSection);\n // treat bundle-only as not-rejected.\n var rejected = SDPUtils.isRejected(mediaSection) &&\n SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n var protocol = lines[0].substr(2).split(' ')[2];\n\n var direction = SDPUtils.getDirection(mediaSection, sessionpart);\n var remoteMsid = SDPUtils.parseMsid(mediaSection);\n\n var mid = SDPUtils.getMid(mediaSection) || SDPUtils.generateIdentifier();\n\n // Reject datachannels which are not implemented yet.\n if (rejected || (kind === 'application' && (protocol === 'DTLS/SCTP' ||\n protocol === 'UDP/DTLS/SCTP'))) {\n // TODO: this is dangerous in the case where a non-rejected m-line\n // becomes rejected.\n pc.transceivers[sdpMLineIndex] = {\n mid: mid,\n kind: kind,\n protocol: protocol,\n rejected: true\n };\n return;\n }\n\n if (!rejected && pc.transceivers[sdpMLineIndex] &&\n pc.transceivers[sdpMLineIndex].rejected) {\n // recycle a rejected transceiver.\n pc.transceivers[sdpMLineIndex] = pc._createTransceiver(kind, true);\n }\n\n var transceiver;\n var iceGatherer;\n var iceTransport;\n var dtlsTransport;\n var rtpReceiver;\n var sendEncodingParameters;\n var recvEncodingParameters;\n var localCapabilities;\n\n var track;\n // FIXME: ensure the mediaSection has rtcp-mux set.\n var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection);\n var remoteIceParameters;\n var remoteDtlsParameters;\n if (!rejected) {\n remoteIceParameters = SDPUtils.getIceParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters.role = 'client';\n }\n recvEncodingParameters =\n SDPUtils.parseRtpEncodingParameters(mediaSection);\n\n var rtcpParameters = SDPUtils.parseRtcpParameters(mediaSection);\n\n var isComplete = SDPUtils.matchPrefix(mediaSection,\n 'a=end-of-candidates', sessionpart).length > 0;\n var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:')\n .map(function(cand) {\n return SDPUtils.parseCandidate(cand);\n })\n .filter(function(cand) {\n return cand.component === 1;\n });\n\n // Check if we can use BUNDLE and dispose transports.\n if ((description.type === 'offer' || description.type === 'answer') &&\n !rejected && usingBundle && sdpMLineIndex > 0 &&\n pc.transceivers[sdpMLineIndex]) {\n pc._disposeIceAndDtlsTransports(sdpMLineIndex);\n pc.transceivers[sdpMLineIndex].iceGatherer =\n pc.transceivers[0].iceGatherer;\n pc.transceivers[sdpMLineIndex].iceTransport =\n pc.transceivers[0].iceTransport;\n pc.transceivers[sdpMLineIndex].dtlsTransport =\n pc.transceivers[0].dtlsTransport;\n if (pc.transceivers[sdpMLineIndex].rtpSender) {\n pc.transceivers[sdpMLineIndex].rtpSender.setTransport(\n pc.transceivers[0].dtlsTransport);\n }\n if (pc.transceivers[sdpMLineIndex].rtpReceiver) {\n pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(\n pc.transceivers[0].dtlsTransport);\n }\n }\n if (description.type === 'offer' && !rejected) {\n transceiver = pc.transceivers[sdpMLineIndex] ||\n pc._createTransceiver(kind);\n transceiver.mid = mid;\n\n if (!transceiver.iceGatherer) {\n transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n usingBundle);\n }\n\n if (cands.length && transceiver.iceTransport.state === 'new') {\n if (isComplete && (!usingBundle || sdpMLineIndex === 0)) {\n transceiver.iceTransport.setRemoteCandidates(cands);\n } else {\n cands.forEach(function(candidate) {\n maybeAddCandidate(transceiver.iceTransport, candidate);\n });\n }\n }\n\n localCapabilities = window.RTCRtpReceiver.getCapabilities(kind);\n\n // filter RTX until additional stuff needed for RTX is implemented\n // in adapter.js\n if (edgeVersion < 15019) {\n localCapabilities.codecs = localCapabilities.codecs.filter(\n function(codec) {\n return codec.name !== 'rtx';\n });\n }\n\n sendEncodingParameters = transceiver.sendEncodingParameters || [{\n ssrc: (2 * sdpMLineIndex + 2) * 1001\n }];\n\n // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n var isNewTrack = false;\n if (direction === 'sendrecv' || direction === 'sendonly') {\n isNewTrack = !transceiver.rtpReceiver;\n rtpReceiver = transceiver.rtpReceiver ||\n new window.RTCRtpReceiver(transceiver.dtlsTransport, kind);\n\n if (isNewTrack) {\n var stream;\n track = rtpReceiver.track;\n // FIXME: does not work with Plan B.\n if (remoteMsid && remoteMsid.stream === '-') {\n // no-op. a stream id of '-' means: no associated stream.\n } else if (remoteMsid) {\n if (!streams[remoteMsid.stream]) {\n streams[remoteMsid.stream] = new window.MediaStream();\n Object.defineProperty(streams[remoteMsid.stream], 'id', {\n get: function() {\n return remoteMsid.stream;\n }\n });\n }\n Object.defineProperty(track, 'id', {\n get: function() {\n return remoteMsid.track;\n }\n });\n stream = streams[remoteMsid.stream];\n } else {\n if (!streams.default) {\n streams.default = new window.MediaStream();\n }\n stream = streams.default;\n }\n if (stream) {\n addTrackToStreamAndFireEvent(track, stream);\n transceiver.associatedRemoteMediaStreams.push(stream);\n }\n receiverList.push([track, rtpReceiver, stream]);\n }\n } else if (transceiver.rtpReceiver && transceiver.rtpReceiver.track) {\n transceiver.associatedRemoteMediaStreams.forEach(function(s) {\n var nativeTrack = s.getTracks().find(function(t) {\n return t.id === transceiver.rtpReceiver.track.id;\n });\n if (nativeTrack) {\n removeTrackFromStreamAndFireEvent(nativeTrack, s);\n }\n });\n transceiver.associatedRemoteMediaStreams = [];\n }\n\n transceiver.localCapabilities = localCapabilities;\n transceiver.remoteCapabilities = remoteCapabilities;\n transceiver.rtpReceiver = rtpReceiver;\n transceiver.rtcpParameters = rtcpParameters;\n transceiver.sendEncodingParameters = sendEncodingParameters;\n transceiver.recvEncodingParameters = recvEncodingParameters;\n\n // Start the RTCRtpReceiver now. The RTPSender is started in\n // setLocalDescription.\n pc._transceive(pc.transceivers[sdpMLineIndex],\n false,\n isNewTrack);\n } else if (description.type === 'answer' && !rejected) {\n transceiver = pc.transceivers[sdpMLineIndex];\n iceGatherer = transceiver.iceGatherer;\n iceTransport = transceiver.iceTransport;\n dtlsTransport = transceiver.dtlsTransport;\n rtpReceiver = transceiver.rtpReceiver;\n sendEncodingParameters = transceiver.sendEncodingParameters;\n localCapabilities = transceiver.localCapabilities;\n\n pc.transceivers[sdpMLineIndex].recvEncodingParameters =\n recvEncodingParameters;\n pc.transceivers[sdpMLineIndex].remoteCapabilities =\n remoteCapabilities;\n pc.transceivers[sdpMLineIndex].rtcpParameters = rtcpParameters;\n\n if (cands.length && iceTransport.state === 'new') {\n if ((isIceLite || isComplete) &&\n (!usingBundle || sdpMLineIndex === 0)) {\n iceTransport.setRemoteCandidates(cands);\n } else {\n cands.forEach(function(candidate) {\n maybeAddCandidate(transceiver.iceTransport, candidate);\n });\n }\n }\n\n if (!usingBundle || sdpMLineIndex === 0) {\n if (iceTransport.state === 'new') {\n iceTransport.start(iceGatherer, remoteIceParameters,\n 'controlling');\n }\n if (dtlsTransport.state === 'new') {\n dtlsTransport.start(remoteDtlsParameters);\n }\n }\n\n // If the offer contained RTX but the answer did not,\n // remove RTX from sendEncodingParameters.\n var commonCapabilities = getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n var hasRtx = commonCapabilities.codecs.filter(function(c) {\n return c.name.toLowerCase() === 'rtx';\n }).length;\n if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n delete transceiver.sendEncodingParameters[0].rtx;\n }\n\n pc._transceive(transceiver,\n direction === 'sendrecv' || direction === 'recvonly',\n direction === 'sendrecv' || direction === 'sendonly');\n\n // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n if (rtpReceiver &&\n (direction === 'sendrecv' || direction === 'sendonly')) {\n track = rtpReceiver.track;\n if (remoteMsid) {\n if (!streams[remoteMsid.stream]) {\n streams[remoteMsid.stream] = new window.MediaStream();\n }\n addTrackToStreamAndFireEvent(track, streams[remoteMsid.stream]);\n receiverList.push([track, rtpReceiver, streams[remoteMsid.stream]]);\n } else {\n if (!streams.default) {\n streams.default = new window.MediaStream();\n }\n addTrackToStreamAndFireEvent(track, streams.default);\n receiverList.push([track, rtpReceiver, streams.default]);\n }\n } else {\n // FIXME: actually the receiver should be created later.\n delete transceiver.rtpReceiver;\n }\n }\n });\n\n if (pc._dtlsRole === undefined) {\n pc._dtlsRole = description.type === 'offer' ? 'active' : 'passive';\n }\n\n pc._remoteDescription = {\n type: description.type,\n sdp: description.sdp\n };\n if (description.type === 'offer') {\n pc._updateSignalingState('have-remote-offer');\n } else {\n pc._updateSignalingState('stable');\n }\n Object.keys(streams).forEach(function(sid) {\n var stream = streams[sid];\n if (stream.getTracks().length) {\n if (pc.remoteStreams.indexOf(stream) === -1) {\n pc.remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n window.setTimeout(function() {\n pc._dispatchEvent('addstream', event);\n });\n }\n\n receiverList.forEach(function(item) {\n var track = item[0];\n var receiver = item[1];\n if (stream.id !== item[2].id) {\n return;\n }\n fireAddTrack(pc, track, receiver, [stream]);\n });\n }\n });\n receiverList.forEach(function(item) {\n if (item[2]) {\n return;\n }\n fireAddTrack(pc, item[0], item[1], []);\n });\n\n // check whether addIceCandidate({}) was called within four seconds after\n // setRemoteDescription.\n window.setTimeout(function() {\n if (!(pc && pc.transceivers)) {\n return;\n }\n pc.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport &&\n transceiver.iceTransport.state === 'new' &&\n transceiver.iceTransport.getRemoteCandidates().length > 0) {\n console.warn('Timeout for addRemoteCandidate. Consider sending ' +\n 'an end-of-candidates notification');\n transceiver.iceTransport.addRemoteCandidate({});\n }\n });\n }, 4000);\n\n return Promise.resolve();\n };\n\n RTCPeerConnection.prototype.close = function() {\n this.transceivers.forEach(function(transceiver) {\n /* not yet\n if (transceiver.iceGatherer) {\n transceiver.iceGatherer.close();\n }\n */\n if (transceiver.iceTransport) {\n transceiver.iceTransport.stop();\n }\n if (transceiver.dtlsTransport) {\n transceiver.dtlsTransport.stop();\n }\n if (transceiver.rtpSender) {\n transceiver.rtpSender.stop();\n }\n if (transceiver.rtpReceiver) {\n transceiver.rtpReceiver.stop();\n }\n });\n // FIXME: clean up tracks, local streams, remote streams, etc\n this._isClosed = true;\n this._updateSignalingState('closed');\n };\n\n // Update the signaling state.\n RTCPeerConnection.prototype._updateSignalingState = function(newState) {\n this.signalingState = newState;\n var event = new Event('signalingstatechange');\n this._dispatchEvent('signalingstatechange', event);\n };\n\n // Determine whether to fire the negotiationneeded event.\n RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() {\n var pc = this;\n if (this.signalingState !== 'stable' || this.needNegotiation === true) {\n return;\n }\n this.needNegotiation = true;\n window.setTimeout(function() {\n if (pc.needNegotiation) {\n pc.needNegotiation = false;\n var event = new Event('negotiationneeded');\n pc._dispatchEvent('negotiationneeded', event);\n }\n }, 0);\n };\n\n // Update the ice connection state.\n RTCPeerConnection.prototype._updateIceConnectionState = function() {\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n checking: 0,\n connected: 0,\n completed: 0,\n disconnected: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport && !transceiver.rejected) {\n states[transceiver.iceTransport.state]++;\n }\n });\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.checking > 0) {\n newState = 'checking';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0) {\n newState = 'connected';\n } else if (states.completed > 0) {\n newState = 'completed';\n }\n\n if (newState !== this.iceConnectionState) {\n this.iceConnectionState = newState;\n var event = new Event('iceconnectionstatechange');\n this._dispatchEvent('iceconnectionstatechange', event);\n }\n };\n\n // Update the connection state.\n RTCPeerConnection.prototype._updateConnectionState = function() {\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n connecting: 0,\n connected: 0,\n completed: 0,\n disconnected: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport && transceiver.dtlsTransport &&\n !transceiver.rejected) {\n states[transceiver.iceTransport.state]++;\n states[transceiver.dtlsTransport.state]++;\n }\n });\n // ICETransport.completed and connected are the same for this purpose.\n states.connected += states.completed;\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.connecting > 0) {\n newState = 'connecting';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0) {\n newState = 'connected';\n }\n\n if (newState !== this.connectionState) {\n this.connectionState = newState;\n var event = new Event('connectionstatechange');\n this._dispatchEvent('connectionstatechange', event);\n }\n };\n\n RTCPeerConnection.prototype.createOffer = function() {\n var pc = this;\n\n if (pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createOffer after close'));\n }\n\n var numAudioTracks = pc.transceivers.filter(function(t) {\n return t.kind === 'audio';\n }).length;\n var numVideoTracks = pc.transceivers.filter(function(t) {\n return t.kind === 'video';\n }).length;\n\n // Determine number of audio and video tracks we need to send/recv.\n var offerOptions = arguments[0];\n if (offerOptions) {\n // Reject Chrome legacy constraints.\n if (offerOptions.mandatory || offerOptions.optional) {\n throw new TypeError(\n 'Legacy mandatory/optional constraints not supported.');\n }\n if (offerOptions.offerToReceiveAudio !== undefined) {\n if (offerOptions.offerToReceiveAudio === true) {\n numAudioTracks = 1;\n } else if (offerOptions.offerToReceiveAudio === false) {\n numAudioTracks = 0;\n } else {\n numAudioTracks = offerOptions.offerToReceiveAudio;\n }\n }\n if (offerOptions.offerToReceiveVideo !== undefined) {\n if (offerOptions.offerToReceiveVideo === true) {\n numVideoTracks = 1;\n } else if (offerOptions.offerToReceiveVideo === false) {\n numVideoTracks = 0;\n } else {\n numVideoTracks = offerOptions.offerToReceiveVideo;\n }\n }\n }\n\n pc.transceivers.forEach(function(transceiver) {\n if (transceiver.kind === 'audio') {\n numAudioTracks--;\n if (numAudioTracks < 0) {\n transceiver.wantReceive = false;\n }\n } else if (transceiver.kind === 'video') {\n numVideoTracks--;\n if (numVideoTracks < 0) {\n transceiver.wantReceive = false;\n }\n }\n });\n\n // Create M-lines for recvonly streams.\n while (numAudioTracks > 0 || numVideoTracks > 0) {\n if (numAudioTracks > 0) {\n pc._createTransceiver('audio');\n numAudioTracks--;\n }\n if (numVideoTracks > 0) {\n pc._createTransceiver('video');\n numVideoTracks--;\n }\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n pc._sdpSessionVersion++);\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n // For each track, create an ice gatherer, ice transport,\n // dtls transport, potentially rtpsender and rtpreceiver.\n var track = transceiver.track;\n var kind = transceiver.kind;\n var mid = transceiver.mid || SDPUtils.generateIdentifier();\n transceiver.mid = mid;\n\n if (!transceiver.iceGatherer) {\n transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n pc.usingBundle);\n }\n\n var localCapabilities = window.RTCRtpSender.getCapabilities(kind);\n // filter RTX until additional stuff needed for RTX is implemented\n // in adapter.js\n if (edgeVersion < 15019) {\n localCapabilities.codecs = localCapabilities.codecs.filter(\n function(codec) {\n return codec.name !== 'rtx';\n });\n }\n localCapabilities.codecs.forEach(function(codec) {\n // work around https://bugs.chromium.org/p/webrtc/issues/detail?id=6552\n // by adding level-asymmetry-allowed=1\n if (codec.name === 'H264' &&\n codec.parameters['level-asymmetry-allowed'] === undefined) {\n codec.parameters['level-asymmetry-allowed'] = '1';\n }\n\n // for subsequent offers, we might have to re-use the payload\n // type of the last offer.\n if (transceiver.remoteCapabilities &&\n transceiver.remoteCapabilities.codecs) {\n transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec) {\n if (codec.name.toLowerCase() === remoteCodec.name.toLowerCase() &&\n codec.clockRate === remoteCodec.clockRate) {\n codec.preferredPayloadType = remoteCodec.payloadType;\n }\n });\n }\n });\n localCapabilities.headerExtensions.forEach(function(hdrExt) {\n var remoteExtensions = transceiver.remoteCapabilities &&\n transceiver.remoteCapabilities.headerExtensions || [];\n remoteExtensions.forEach(function(rHdrExt) {\n if (hdrExt.uri === rHdrExt.uri) {\n hdrExt.id = rHdrExt.id;\n }\n });\n });\n\n // generate an ssrc now, to be used later in rtpSender.send\n var sendEncodingParameters = transceiver.sendEncodingParameters || [{\n ssrc: (2 * sdpMLineIndex + 1) * 1001\n }];\n if (track) {\n // add RTX\n if (edgeVersion >= 15019 && kind === 'video' &&\n !sendEncodingParameters[0].rtx) {\n sendEncodingParameters[0].rtx = {\n ssrc: sendEncodingParameters[0].ssrc + 1\n };\n }\n }\n\n if (transceiver.wantReceive) {\n transceiver.rtpReceiver = new window.RTCRtpReceiver(\n transceiver.dtlsTransport, kind);\n }\n\n transceiver.localCapabilities = localCapabilities;\n transceiver.sendEncodingParameters = sendEncodingParameters;\n });\n\n // always offer BUNDLE and dispose on return if not supported.\n if (pc._config.bundlePolicy !== 'max-compat') {\n sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n sdp += 'a=ice-options:trickle\\r\\n';\n\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n sdp += writeMediaSection(transceiver, transceiver.localCapabilities,\n 'offer', transceiver.stream, pc._dtlsRole);\n sdp += 'a=rtcp-rsize\\r\\n';\n\n if (transceiver.iceGatherer && pc.iceGatheringState !== 'new' &&\n (sdpMLineIndex === 0 || !pc.usingBundle)) {\n transceiver.iceGatherer.getLocalCandidates().forEach(function(cand) {\n cand.component = 1;\n sdp += 'a=' + SDPUtils.writeCandidate(cand) + '\\r\\n';\n });\n\n if (transceiver.iceGatherer.state === 'completed') {\n sdp += 'a=end-of-candidates\\r\\n';\n }\n }\n });\n\n var desc = new window.RTCSessionDescription({\n type: 'offer',\n sdp: sdp\n });\n return Promise.resolve(desc);\n };\n\n RTCPeerConnection.prototype.createAnswer = function() {\n var pc = this;\n\n if (pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createAnswer after close'));\n }\n\n if (!(pc.signalingState === 'have-remote-offer' ||\n pc.signalingState === 'have-local-pranswer')) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createAnswer in signalingState ' + pc.signalingState));\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n pc._sdpSessionVersion++);\n if (pc.usingBundle) {\n sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n sdp += 'a=ice-options:trickle\\r\\n';\n\n var mediaSectionsInOffer = SDPUtils.getMediaSections(\n pc._remoteDescription.sdp).length;\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n if (sdpMLineIndex + 1 > mediaSectionsInOffer) {\n return;\n }\n if (transceiver.rejected) {\n if (transceiver.kind === 'application') {\n if (transceiver.protocol === 'DTLS/SCTP') { // legacy fmt\n sdp += 'm=application 0 DTLS/SCTP 5000\\r\\n';\n } else {\n sdp += 'm=application 0 ' + transceiver.protocol +\n ' webrtc-datachannel\\r\\n';\n }\n } else if (transceiver.kind === 'audio') {\n sdp += 'm=audio 0 UDP/TLS/RTP/SAVPF 0\\r\\n' +\n 'a=rtpmap:0 PCMU/8000\\r\\n';\n } else if (transceiver.kind === 'video') {\n sdp += 'm=video 0 UDP/TLS/RTP/SAVPF 120\\r\\n' +\n 'a=rtpmap:120 VP8/90000\\r\\n';\n }\n sdp += 'c=IN IP4 0.0.0.0\\r\\n' +\n 'a=inactive\\r\\n' +\n 'a=mid:' + transceiver.mid + '\\r\\n';\n return;\n }\n\n // FIXME: look at direction.\n if (transceiver.stream) {\n var localTrack;\n if (transceiver.kind === 'audio') {\n localTrack = transceiver.stream.getAudioTracks()[0];\n } else if (transceiver.kind === 'video') {\n localTrack = transceiver.stream.getVideoTracks()[0];\n }\n if (localTrack) {\n // add RTX\n if (edgeVersion >= 15019 && transceiver.kind === 'video' &&\n !transceiver.sendEncodingParameters[0].rtx) {\n transceiver.sendEncodingParameters[0].rtx = {\n ssrc: transceiver.sendEncodingParameters[0].ssrc + 1\n };\n }\n }\n }\n\n // Calculate intersection of capabilities.\n var commonCapabilities = getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n var hasRtx = commonCapabilities.codecs.filter(function(c) {\n return c.name.toLowerCase() === 'rtx';\n }).length;\n if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n delete transceiver.sendEncodingParameters[0].rtx;\n }\n\n sdp += writeMediaSection(transceiver, commonCapabilities,\n 'answer', transceiver.stream, pc._dtlsRole);\n if (transceiver.rtcpParameters &&\n transceiver.rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n });\n\n var desc = new window.RTCSessionDescription({\n type: 'answer',\n sdp: sdp\n });\n return Promise.resolve(desc);\n };\n\n RTCPeerConnection.prototype.addIceCandidate = function(candidate) {\n var pc = this;\n var sections;\n if (candidate && !(candidate.sdpMLineIndex !== undefined ||\n candidate.sdpMid)) {\n return Promise.reject(new TypeError('sdpMLineIndex or sdpMid required'));\n }\n\n // TODO: needs to go into ops queue.\n return new Promise(function(resolve, reject) {\n if (!pc._remoteDescription) {\n return reject(makeError('InvalidStateError',\n 'Can not add ICE candidate without a remote description'));\n } else if (!candidate || candidate.candidate === '') {\n for (var j = 0; j < pc.transceivers.length; j++) {\n if (pc.transceivers[j].rejected) {\n continue;\n }\n pc.transceivers[j].iceTransport.addRemoteCandidate({});\n sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n sections[j] += 'a=end-of-candidates\\r\\n';\n pc._remoteDescription.sdp =\n SDPUtils.getDescription(pc._remoteDescription.sdp) +\n sections.join('');\n if (pc.usingBundle) {\n break;\n }\n }\n } else {\n var sdpMLineIndex = candidate.sdpMLineIndex;\n if (candidate.sdpMid) {\n for (var i = 0; i < pc.transceivers.length; i++) {\n if (pc.transceivers[i].mid === candidate.sdpMid) {\n sdpMLineIndex = i;\n break;\n }\n }\n }\n var transceiver = pc.transceivers[sdpMLineIndex];\n if (transceiver) {\n if (transceiver.rejected) {\n return resolve();\n }\n var cand = Object.keys(candidate.candidate).length > 0 ?\n SDPUtils.parseCandidate(candidate.candidate) : {};\n // Ignore Chrome's invalid candidates since Edge does not like them.\n if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) {\n return resolve();\n }\n // Ignore RTCP candidates, we assume RTCP-MUX.\n if (cand.component && cand.component !== 1) {\n return resolve();\n }\n // when using bundle, avoid adding candidates to the wrong\n // ice transport. And avoid adding candidates added in the SDP.\n if (sdpMLineIndex === 0 || (sdpMLineIndex > 0 &&\n transceiver.iceTransport !== pc.transceivers[0].iceTransport)) {\n if (!maybeAddCandidate(transceiver.iceTransport, cand)) {\n return reject(makeError('OperationError',\n 'Can not add ICE candidate'));\n }\n }\n\n // update the remoteDescription.\n var candidateString = candidate.candidate.trim();\n if (candidateString.indexOf('a=') === 0) {\n candidateString = candidateString.substr(2);\n }\n sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n sections[sdpMLineIndex] += 'a=' +\n (cand.type ? candidateString : 'end-of-candidates')\n + '\\r\\n';\n pc._remoteDescription.sdp =\n SDPUtils.getDescription(pc._remoteDescription.sdp) +\n sections.join('');\n } else {\n return reject(makeError('OperationError',\n 'Can not add ICE candidate'));\n }\n }\n resolve();\n });\n };\n\n RTCPeerConnection.prototype.getStats = function(selector) {\n if (selector && selector instanceof window.MediaStreamTrack) {\n var senderOrReceiver = null;\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.rtpSender &&\n transceiver.rtpSender.track === selector) {\n senderOrReceiver = transceiver.rtpSender;\n } else if (transceiver.rtpReceiver &&\n transceiver.rtpReceiver.track === selector) {\n senderOrReceiver = transceiver.rtpReceiver;\n }\n });\n if (!senderOrReceiver) {\n throw makeError('InvalidAccessError', 'Invalid selector.');\n }\n return senderOrReceiver.getStats();\n }\n\n var promises = [];\n this.transceivers.forEach(function(transceiver) {\n ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport',\n 'dtlsTransport'].forEach(function(method) {\n if (transceiver[method]) {\n promises.push(transceiver[method].getStats());\n }\n });\n });\n return Promise.all(promises).then(function(allStats) {\n var results = new Map();\n allStats.forEach(function(stats) {\n stats.forEach(function(stat) {\n results.set(stat.id, stat);\n });\n });\n return results;\n });\n };\n\n // fix low-level stat names and return Map instead of object.\n var ortcObjects = ['RTCRtpSender', 'RTCRtpReceiver', 'RTCIceGatherer',\n 'RTCIceTransport', 'RTCDtlsTransport'];\n ortcObjects.forEach(function(ortcObjectName) {\n var obj = window[ortcObjectName];\n if (obj && obj.prototype && obj.prototype.getStats) {\n var nativeGetstats = obj.prototype.getStats;\n obj.prototype.getStats = function() {\n return nativeGetstats.apply(this)\n .then(function(nativeStats) {\n var mapStats = new Map();\n Object.keys(nativeStats).forEach(function(id) {\n nativeStats[id].type = fixStatsType(nativeStats[id]);\n mapStats.set(id, nativeStats[id]);\n });\n return mapStats;\n });\n };\n }\n });\n\n // legacy callback shims. Should be moved to adapter.js some days.\n var methods = ['createOffer', 'createAnswer'];\n methods.forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[0] === 'function' ||\n typeof args[1] === 'function') { // legacy\n return nativeMethod.apply(this, [arguments[2]])\n .then(function(description) {\n if (typeof args[0] === 'function') {\n args[0].apply(null, [description]);\n }\n }, function(error) {\n if (typeof args[1] === 'function') {\n args[1].apply(null, [error]);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n methods = ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'];\n methods.forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[1] === 'function' ||\n typeof args[2] === 'function') { // legacy\n return nativeMethod.apply(this, arguments)\n .then(function() {\n if (typeof args[1] === 'function') {\n args[1].apply(null);\n }\n }, function(error) {\n if (typeof args[2] === 'function') {\n args[2].apply(null, [error]);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n // getStats is special. It doesn't have a spec legacy method yet we support\n // getStats(something, cb) without error callbacks.\n ['getStats'].forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[1] === 'function') {\n return nativeMethod.apply(this, arguments)\n .then(function() {\n if (typeof args[1] === 'function') {\n args[1].apply(null);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n return RTCPeerConnection;\n};\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nvar SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(function(line) {\n return line.trim();\n });\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n var parts = blob.split('\\nm=');\n return parts.map(function(part, index) {\n return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n });\n};\n\n// returns the session description.\nSDPUtils.getDescription = function(blob) {\n var sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n var sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(function(line) {\n return line.indexOf(prefix) === 0;\n });\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\nSDPUtils.parseCandidate = function(line) {\n var parts;\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: parseInt(parts[1], 10),\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 compability.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag\n candidate[parts[i]] = parts[i + 1];\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\nSDPUtils.writeCandidate = function(candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n sdp.push(candidate.component);\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 &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generate an a=rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n var channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses an a=extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1]\n };\n};\n\n// Generates a=extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses an ftmp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n var parsed = {};\n var kv;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(function(param) {\n if (codec.parameters[param]) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(function(fb) {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses an RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\nSDPUtils.parseSsrcGroup = function(line) {\n var parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(function(ssrc) {\n return parseInt(ssrc, 10);\n })\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\nSDPUtils.parseFingerprint = function(line) {\n var parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1]\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role.\n // Note2: 'algorithm' is not case sensitive except in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(function(fp) {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n 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 + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES paramters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n return 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\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++) { // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // 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 sdp += 'a=rtcp-mux\\r\\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:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(parts) {\n return parts.attribute === 'cname';\n });\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc;\n\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .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\n - (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 tha with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\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\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;\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:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\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;\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 = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0]\n .substr(10)\n .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 = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n'\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boilder 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;\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' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\nSDPUtils.writeMediaSection = function(transceiver, caps, type, stream) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.direction) {\n sdp += 'a=' + transceiver.direction + '\\r\\n';\n } else if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n if (transceiver.rtpSender) {\n // spec.\n var msid = 'msid:' + stream.id + ' ' +\n transceiver.rtpSender.track.id + '\\r\\n';\n sdp += 'a=' + msid;\n\n // for Chrome.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n if (transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' ' + msid;\n sdp += 'a=ssrc-group:FID ' +\n transceiver.sendEncodingParameters[0].ssrc + ' ' +\n transceiver.sendEncodingParameters[0].rtx.ssrc +\n '\\r\\n';\n }\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n }\n return sdp;\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 === 'object') {\n module.exports = SDPUtils;\n}\n"],"names":["_defineProperty","obj","key","value","i","t","r","e","Symbol","toPrimitive","call","TypeError","String","Number","_toPrimitive","Object","defineProperty","enumerable","configurable","writable","logDisabled_","deprecationWarnings_","extractVersion","uastring","expr","pos","match","length","parseInt","wrapPeerConnectionEvent","window","eventNameToWrap","wrapper","RTCPeerConnection","proto","prototype","nativeAddEventListener","addEventListener","nativeEventName","cb","apply","this","arguments","wrappedCallback","modifiedEvent","handleEvent","_eventMap","Map","set","nativeRemoveEventListener","removeEventListener","has","unwrappedCb","get","delete","size","keys","disableLog","bool","Error","disableWarnings","log","console","deprecated","oldMethod","newMethod","warn","isObject","val","toString","compactObject","data","reduce","accumulator","isObj","isEmptyObject","undefined","assign","walkStats","stats","base","resultSet","id","forEach","name","endsWith","filterStats","result","track","outbound","streamStatsType","filteredResult","trackStats","type","trackIdentifier","push","trackStat","trackId","logging","utils","shimGetUserMedia","browserDetails","navigator","mediaDevices","constraintsToChrome_","c","mandatory","optional","cc","ideal","exact","min","max","oldname_","prefix","charAt","toUpperCase","slice","oc","mix","advanced","concat","shimConstraints_","constraints","func","version","JSON","parse","stringify","audio","remap","a","b","video","face","facingMode","matches","getSupportedFacingModeLies","getSupportedConstraints","enumerateDevices","then","devices","dev","filter","d","kind","find","some","label","toLowerCase","includes","deviceId","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","message","constraint","constraintName","getUserMedia","onSuccess","onError","webkitGetUserMedia","bind","origGetUserMedia","cs","stream","getAudioTracks","getVideoTracks","getTracks","stop","DOMException","Promise","reject","shimGetDisplayMedia","getSourceId","getDisplayMedia","sourceId","widthSpecified","width","heightSpecified","height","frameRateSpecified","frameRate","chromeMediaSource","chromeMediaSourceId","maxFrameRate","maxWidth","maxHeight","error","shimMediaStream","MediaStream","webkitMediaStream","shimOnTrack","_ontrack","f","origSetRemoteDescription","setRemoteDescription","_this","_ontrackpoly","te","receiver","getReceivers","event","Event","transceiver","streams","dispatchEvent","shimGetSendersWithDtmf","shimSenderWithDtmf","pc","dtmf","_dtmf","createDTMFSender","_pc","getSenders","_senders","origAddTrack","addTrack","sender","origRemoveTrack","removeTrack","idx","indexOf","splice","origAddStream","addStream","_this2","origRemoveStream","removeStream","_this3","s","RTCRtpSender","origGetSenders","_this4","senders","shimGetStats","origGetStats","getStats","_this5","_arguments","Array","selector","onSucc","onErr","fixChromeStats_","response","standardReport","report","standardStats","timestamp","localcandidate","remotecandidate","names","stat","makeMapStats","map","resolve","shimSenderReceiverGetStats","RTCRtpReceiver","_this6","origGetReceivers","_this7","receivers","srcElement","MediaStreamTrack","err","shimAddTrackRemoveTrackWithNative","getLocalStreams","_this8","_shimmedLocalStreams","streamId","_this9","existingSenders","newSenders","newSender","_this10","shimAddTrackRemoveTrack","origGetLocalStreams","_this11","nativeStreams","_reverseStreams","_this12","_streams","newStream","_this13","signalingState","oldStream","method","nativeMethod","methodObj","_this14","args","description","desc","replaceInternalStreamId","origSetLocalDescription","setLocalDescription","sdp","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","replaceExternalStreamId","origLocalDescription","getOwnPropertyDescriptor","_this15","streamid","shimPeerConnection","webkitRTCPeerConnection","RTCIceCandidate","fixNegotiationNeeded","target","getConfiguration","sdpSemantics","catch","RTCIceGatherer","origMSTEnabled","ev","enabled","RTCDtmfSender","RTCDTMFSender","RTCPeerConnectionShim","shimRTCPeerConnection","config","iceServers","hasTurn","server","urls","url","isString","validTurn","startsWith","shimReplaceTrack","replaceTrack","setTrack","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","preferredMediaSource","code","mediaSource","RTCTrackEvent","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","DataChannel","RTCDataChannel","shimAddTransceiver","origAddTransceiver","addTransceiver","setParametersPromises","initParameters","shouldPerformCheck","sendEncodings","encodingParam","test","rid","parseFloat","scaleResolutionDownBy","RangeError","maxFramerate","params","getParameters","encodings","setParameters","shimGetParameters","origGetParameters","shimCreateOffer","origCreateOffer","createOffer","_arguments2","all","finally","shimCreateAnswer","origCreateAnswer","createAnswer","_arguments3","shimLocalStreamsAPI","_localStreams","_addTrack","_len","_key","index","tracks","shimRemoteStreamsAPI","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","shimCallbacksAPI","addIceCandidate","successCallback","failureCallback","options","promise","withCallback","candidate","_getUserMedia","shimConstraints","errcb","shimRTCIceServerUrls","OrigPeerConnection","pcConfig","pcConstraints","newIceServers","hasOwnProperty","generateCertificate","shimTrackEventTransceiver","shimCreateOfferLegacy","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","direction","setDirection","offerToReceiveVideo","videoTransceiver","shimAudioContext","AudioContext","webkitAudioContext","shimRTCIceCandidate","NativeRTCIceCandidate","substr","nativeCandidate","parsedCandidate","SDPUtils","augmentedCandidate","toJSON","sdpMid","sdpMLineIndex","usernameFragment","shimMaxMessageSize","_sctp","remoteIsFirefox","canSendMaxMessageSize","browser","sections","shift","mediaSection","mLine","protocol","sctpInDescription","maxMessageSize","isFirefox","getRemoteFirefoxVersion","canSendMMS","remoteMMS","getMaxMessageSize","POSITIVE_INFINITY","Math","sctp","shimSendThrowTypeError","origCreateDataChannel","createDataChannel","dataChannel","wrapDcSend","channel","dc","origDataChannelSend","send","byteLength","readyState","shimConnectionState","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","removeExtmapAllowMixed","nativeSRD","split","line","trim","join","shimAddIceCandidateNullOrEmpty","nativeAddIceCandidate","adapter","shimChrome","shimFirefox","shimEdge","shimSafari","mozGetUserMedia","userAgent","isSecureContext","supportsUnifiedPlan","RTCRtpTransceiver","commonShim","chromeShim","browserShim","firefoxShim","edgeShim","safariShim","adapterFactory","module","exports","parts","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","NoVideoInputDevicesError","defaultDeviceIdChooser","filteredDevices","videoDevices","getFacingModePattern","getDeviceId","chooseDeviceId","device","pattern","_ref","prevProps","nextProps","changedProps","_class","_temp","_extends","source","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","React","Component","PropTypes","_require","havePropsChanged","createBlob","workerBlob","propsKeys","_Component","Reader","instance","_classCallCheck","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","els","state","mirrorVideo","initiate","initiateLegacyMode","check","handleVideo","handleLoadStart","handleInputChange","clearComponent","handleReaderLoad","openImageDialog","handleWorkerMessage","setRefFactory","subClass","superClass","create","constructor","setPrototypeOf","_inherits","worker","Worker","URL","createObjectURL","onmessage","legacyMode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","prop","delay","timeout","setTimeout","clearTimeout","componentDidUpdate","return","nextState","terminate","stopCamera","reader","img","supported","preview","srcObject","mozSrcObject","src","webkitURL","playsInline","streamTrack","setState","streamLabel","_props","onLoad","_state","play","_props2","resolution","_els","canvas","floor","naturalWidth","videoWidth","naturalHeight","videoHeight","hozOffset","vertOffset","ratio","_ratio","previewIsPlaying","HAVE_ENOUGH_DATA","ctx","getContext","drawImage","imageData","getImageData","postMessage","_props3","onScan","FileReader","selectedImg","files","readAsDataURL","input","click","element","_props4","style","className","onImageLoad","showViewFinder","hiddenStyle","display","previewStyle","top","left","position","overflow","videoPreviewStyle","objectFit","transform","imgPreviewStyle","createElement","paddingTop","zIndex","boxSizing","border","boxShadow","accept","ref","onChange","propTypes","isRequired","oneOfType","number","oneOf","any","string","object","defaultProps","writeMediaSection","caps","dtlsRole","writeRtpDescription","writeIceParameters","iceGatherer","getLocalParameters","writeDtlsParameters","dtlsTransport","mid","rtpSender","rtpReceiver","_initialTrackId","msid","sendEncodingParameters","ssrc","rtx","localCName","getCommonCapabilities","localCapabilities","remoteCapabilities","commonCapabilities","codecs","headerExtensions","fecMechanisms","findCodecByPayloadType","pt","payloadType","preferredPayloadType","rtxCapabilityMatches","lRtx","rRtx","lCodecs","rCodecs","lCodec","parameters","apt","rCodec","clockRate","numChannels","rtcpFeedback","fb","j","parameter","lHeaderExtension","rHeaderExtension","uri","isActionAllowedInSignalingState","action","offer","answer","maybeAddCandidate","iceTransport","alreadyAdded","getRemoteCandidates","remoteCandidate","foundation","ip","port","priority","addRemoteCandidate","makeError","NotSupportedError","InvalidAccessError","OperationError","edgeVersion","addTrackToStreamAndFireEvent","MediaStreamTrackEvent","fireAddTrack","trackEvent","_dispatchEvent","_eventTarget","document","createDocumentFragment","canTrickleIceCandidates","needNegotiation","localStreams","remoteStreams","_localDescription","_remoteDescription","iceGatheringState","usingBundle","bundlePolicy","rtcpMuxPolicy","iceTransportPolicy","filterIceServers","_iceGatherers","iceCandidatePoolSize","gatherPolicy","_config","transceivers","_sdpSessionId","generateSessionId","_sdpSessionVersion","_dtlsRole","_isClosed","onicecandidate","onaddstream","ontrack","onremovestream","onsignalingstatechange","oniceconnectionstatechange","onconnectionstatechange","onicegatheringstatechange","onnegotiationneeded","ondatachannel","_emitGatheringStateChange","_createTransceiver","doNotAdd","hasBundleTransport","recvEncodingParameters","associatedRemoteMediaStreams","wantReceive","transports","_createIceAndDtlsTransports","_maybeFireNegotiationNeeded","clonedStream","clone","clonedTrack","_createIceGatherer","bufferedCandidateEvents","bufferCandidates","end","_gather","onlocalcandidate","evt","cand","component","ufrag","serializedCandidate","writeCandidate","parseCandidate","getMediaSections","getDescription","complete","every","RTCIceTransport","onicestatechange","_updateIceConnectionState","_updateConnectionState","RTCDtlsTransport","ondtlsstatechange","onerror","_disposeIceAndDtlsTransports","_transceive","recv","rtcp","cname","compound","rtcpParameters","p","receive","sessionpart","splitSections","parseRtpParameters","isIceLite","matchPrefix","isRejected","rejected","remoteIceParameters","getIceParameters","remoteDtlsParameters","getDtlsParameters","role","start","_updateSignalingState","receiverList","iceOptions","lines","splitLines","getKind","getDirection","remoteMsid","parseMsid","getMid","generateIdentifier","parseRtpEncodingParameters","parseRtcpParameters","isComplete","cands","setTransport","setRemoteCandidates","default","getCapabilities","codec","isNewTrack","nativeTrack","removeTrackFromStreamAndFireEvent","sid","item","close","newState","states","closed","connected","disconnected","failed","new","connecting","numAudioTracks","numVideoTracks","writeSessionBoilerplate","remoteCodec","hdrExt","rHdrExt","getLocalCandidates","mediaSectionsInOffer","localTrack","reducedSize","candidateString","senderOrReceiver","promises","allStats","results","ortcObjectName","nativeGetstats","nativeStats","mapStats","methods","random","blob","part","substring","address","relatedAddress","relatedPort","tcpType","parseIceOptions","parseRtpMap","parsed","channels","writeRtpMap","parseExtmap","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","param","parseRtcpFb","writeRtcpFb","parseSsrcMedia","sp","colon","attribute","parseSsrcGroup","semantics","ssrcs","parseFingerprint","algorithm","fingerprints","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","pwd","password","mline","rtpmapline","fmtps","maxptime","extension","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","encParam","codecPayloadType","fec","mechanism","bandwidth","maxBitrate","remoteSsrc","rsize","mux","spec","planB","msidParts","parseSctpDescription","parseMLine","maxSizeLine","isNaN","sctpPort","fmt","writeSctpDescription","media","output","sessId","sessVer","sessUser","parseOLine","username","sessionId","sessionVersion","netType","addressType","isValidSDP"],"sourceRoot":""}